学习学习

我的最新日志

  • spkm开源实现

    2008-4-27

    http://www.citi.umich.edu/projects/nfsv4/linux/

    网上找了一下spkm的开源实现.

  • 《linux PowerPC 详解--核心篇》

    2008-3-23

       昨天在新华书店买了本《linux PowerPC 详解--核心篇》,虽然本人对powerPC以及linux内核一窍不通,但是还是买了。

       前天,这本书的作者给我们作讲座。对linux感兴趣的我也去听了,结果只能听到一些概念。本人对操作系统以及编译原理都比较敢兴趣,奈何这些都需要自学。听讲座时,感觉作者对powerpc非常熟悉,甚至是其他公司的cpu。对我打击比较大的是:当我在他那个年龄,是不是也有所成就?

       我问他,出版这本书需要花多少钱。他说,不需要花钱,是机械工业出版社找他写的。再问他,出版一本书能赚多少,他说,卖一本书他赚2元钱。这本书才40元,他得到的居然是%8在加上%20的不知道啥税,看来出版书绝对是赚不到钱的。

       《openssl 编程》写了一点点,感觉还是没写好。并不是我不想写好,而是水平不够。《linux PowerPC 详解--核心篇》的作者说,写书是自己有一桶水,给读者倒一杯。我感觉,我写《openssl编程》的时候是自己只有半杯水,而试图给读者倒一杯水。看来,我还是得好好学习,继续完善和添加书的内容。

  • 获取用户的用户名和口令以及隐私的几种简单方法

    2008-2-10

    通过合法的方式来获取用户信息:

    1.搭建代理服务

             通过搭建代理服务,比如http代理和socks代理,并让用户使用。可以获取用户信息。因为很多信息都是明文发送的。即使用户通过SSL通道来访问也有可能通过这种方式来获取用户的任何信息,你要做的只是让用户信任你的服务证书和有一个合法客户身份。

             所以,不要轻易使用代理。

    2.直接获取

             比如搭建一个BBS或者类似的网站,将用户口令改成明文存放,然后诱使用户去注册。更要命的是,你的这个口令很可能到处用。

             所以,注册用户时,必须慎重。因为你不能保证网站的管理员对于用户口里不是明文存放的。

    3.应用系统

            有时候直接打电话问就可以了。说你的系统出问题了。

  • 打算自己写一个简单的SSLVPN

    2008-1-16

    打算自己写一个简单的SSLVPN。同时支持远程访问以及site2site。

    这两天把ssl加进去了。勉强能用。
    不过客户端界面比较丑,MFC不会用,只有功能;


    需要完善:
     HTTP协议代理完整实行;
     客户端界面;
     服务端配置管理;
     加入访问控制;

  • SSL/TLS在ldap中的使用

    2007-12-12

      可以说,ldap服务的保护有一定的通用性(访问控制除外)。ldap中的保护可以挪到其他服务上使用。这里只说明ssl/tls协议在ldap中的使用。以openldap为例。

      ldap协议中用到ssl/tls的地方:

      sasl认证中:当采用gssapi来作为认证机制的时候,gssapi可以用ssl协议实现,尽管流行的gssapi的实现是基于kerberos的。

         当采用SASL external SASL 机制时,可以采用ssl/tls来实现。

      ldap协议中的startTLS: startTLS可以让ldap协议通信时,在某个时间开始采用ssl/tls协议。

      另外,openldap在ldap协议外可以单独套一层ssl/tls实现,此时openssl打开的是一个ssl/tls的端口。可以用openss s_client来测试链接。但好像这种做法不是ldap协议本身要求的,其他ldap服务是否支持还有待学习。

       openldap服务的启动方式
    1.打开的端口是一个标准ldap服务端口: slapd -h ldap://:401

      此时,可以打的命令可以有:

       简单认证:

       ldapsearch -H ldap://192.168.1.24:401 -D cn=xx,dc=xxx -w xxxx -x -b dc=xxx

       ldapsearch -H ldap://192.168.1.24:401 -D cn=xx,dc=xxx -w xxxx -x -b dc=xxx -Z

       sasl digest-md5认证:

       ldapsearch -H ldap://192.168.1.24:401 -Y DIGEST-MD5 -U XXX (-Z)

       -Z表面使用startTLS

    2.打开的端口是一个ssl/tls端口: slapd -h ldaps://:401

       此时上面的命令都能使用。只是要稍作修改:ldap://写成 ldaps://,并且可以需要指定证书信息。

      此端口可以用openssl s_client工具去测试。

     

      

     

  • 《openssl编程》完整电子版

    2007-12-10

    登录 open_ssl@126.com 密码:open_ssl
  • 《openssl编程》电子版

    2007-12-08

    过几天发布。稍等。

  • 《openssl 编程》之 终于帖完了

    2007-11-19

    终于帖完了
  • 《openssl 编程》之 openssl命令(5)

    2007-11-15

    32.30      s_time

           s_timeopenss提供的SSL/TLS性能测试工具,用于测试SSL/TSL服务。

    用法:

    openssl s_time [-connect host:port] [-www page] [-cert filename] [-key filename] [-CApath directory] [-CAfile filename] [-reuse] [-new] [-verify depth] [-nbio] [-time seconds] [-ssl2] [-ssl3] [-bugs] [-cipher cipherlist]

    用法:

           -connect host:port

                  指定服务,默认为本机的4433端口。

           -www page

                  指定获取的web网页。

           -cert filename

                  指定证书。

           -key filename

                  指定私钥。

           -CApath directory

                  指定CA文件目录。

           -CAfile filename

                  指定CA文件。

           -reuse

                  session重用。

           -new

                  新建链接。

           -verify depth

                  设置验证深度。

           -nbio

                  不采用BIO

           -time seconds

                  指定搜集数据的秒数,默认30秒。

           -ssl2-ssl3

                  采用的SSL协议。

           -bugs

                  开启SSL bug兼容。

    -cipher cipherlist

           指定加密套件。

    示例:

    1)  启动s_server服务:

    openssl s_server -cert sslservercert.pem -key sslserverkey.pem -ssl3

    2)      启动s_time

    openssl s_time -cert sslclientcert.pem -key sslclientkey.pem -CAfile demoCA/cacert.pem -ssl3

    32.31 dhparamdh

           Dhparamdh参数操作和生成工具。dh命令与dhparam用法大致一致,下面只给出了dhparam的说明。

    用法:

    openssl dhparam [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-dsaparam] [-noout] [-check] [-text] [-C] [-2] [-5] [-rand file(s)] [-engine id] [numbits]

    选项:

           -inform DER|PEM

                  输入文件格式,DER或者PEM格式。

           -outform DER|PEM

                  输出格式。

           -in filename

                  读取DH参数的文件,默认为标准输入。

           -out filename

    dh参数输出文件,默认为标准输出。

    -dsaparam

           生成DSA参数,并转换为DH格式。

    -noout

           不输出信息。

    -text

           打印信息。

    -check

           检查dh参数。

    -C

           C语言风格打印信息。

    -2-5

    指定25为发生器,默认为2,如果指定这些项,输入DH参数文件将被忽略,自动生成DH参数。

           -rand files

                  指定随机数种子文件。

           -engine id

                  指定硬件引擎。

    numbit

                  指定素数bit数,默认为512

    示例:

           1)    openssl dhparam –out dhparam.pem -text 512

           生成内容如下:

           Diffie-Hellman-Parameters: (512 bit)

        prime:

            00:8f:18:1b:4f:7a:74:e1:89:42:e6:99:0f:15:4e:

            72:ad:ca:7b:fb:68:ef:85:7b:16:a8:5b:85:01:82:

            dd:db:57:1f:c5:86:89:fa:16:10:6e:d0:05:2b:15:

            e2:87:98:0e:53:f2:c8:18:f9:5b:7e:4d:ce:9b:6d:

            3f:23:11:52:63

        generator: 2 (0x2)

    -----BEGIN DH PARAMETERS-----

    MEYCQQCPGBtPenThiULmmQ8VTnKtynv7aO+FexaoW4UBgt3bVx/Fhon6FhBu0AUr

    FeKHmA5T8sgY+Vt+Tc6bbT8jEVJjAgEC

    -----END DH PARAMETERS-----

    2)        检查生成的DH参数

    openssl dhparam -in dhparam.pem -text -check

    32.32    ecparam

    椭圆曲线密钥参数生成及操作。

    用法:

    openssl ecparam [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-noout] [-text] [-C] [-check] [-name arg] [-list_curve] [-conv_form arg] [-param_enc arg] [-no_seed] [-rand file(s)] [-genkey] [-engine id]

    用法:

           -inform DER|PEM

                  输入文件格式。

           -outform DER|PEM

                  输出文件格式。

           -in filename

                  输入文件。

           -out filename

                  输出文件。

           -noout

                  不打印信息。

           -text

                  打印信息。

           -C

                  C语言风格打印信息。

           -check

                  检查参数。

           -name arg

                  采用短名字。

           -list_curves

                  打印所有可用的短名字。

           -conv_form arg

    指定信息存放方式,可以是compresseduncompressed或者hybrid,默认为compressed

           -param_enc arg

                  指定参数编码方法,可以是named_curveexplicit,默认为named_curve

           -no_seed

                  如果-param_enc指定编码方式为explicit,不采用随机数种子。

    -rand file(s)

           指定随机数种子。

    -genkey

           生成密钥。

    -engine id

           指定硬件引擎。

           示例:

                  openssl ecparam -list_curves

                  openssl ecparam -name secp112r1  -genkey –text

    openssl ecparam -genkey -name secp160r1 -out ec160.pem
    openssl req -newkey ec:ec160.pem

    32.33      ec

    椭圆曲线密钥处理工具。

    用法:

    openssl ec [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-des] [-des3] [-idea] [-text] [-noout] [-param_out] [-pubin] [-pubout] [-conv_form arg] [-param_enc arg] [-engine id]

    选项:

           -inform PEM|DER

                  输入文件格式。

           -outform PEM|DER

                  输出文件格式。

           -in filename

                  输入文件名。

           -passin arg

                  私钥保护口令来源。

           -out filename

                  输出文件名。

           -passout arg

                  输出文件保护口令来源。

           -des-des3-idea

                  私钥保护算法。

           -noout

                  不输出信息。

           -param_out

                  输出参数。

           -pubin

                  输入的是公钥。

           -pubout

                  输出公钥。

           -conv_form arg

    指定信息存放方式,可以是compresseduncompressed或者hybrid,默认为compressed

           -param_enc arg

                  指定参数编码方法,可以是named_curveexplicit,默认为named_curve

    -engine id

                  指定硬件引擎。

    示例:

    1)   生成ec私钥

    openssl ecparam -genkey  -name secp112r1 -out eckey.pem -text

    2)   转换为DER编码

    openssl ec -outform der -in eckey.pem -out eckey.der

    3)   给私钥进行口令保护

    openssl ec -in eckey.pem -des -out enceckey.pem

    4)    将公钥写入文件

    openssl ec -in eckey.pem -pubout -out ecpubkey.pem

    2)  显示密钥信息

    openssl ec -in eckey.pem –text

    openssl ec -in ecpubkey.pem -pubin –text

    3)  转换为pkcs8格式

    openssl pkcs8 -topk8 -in eckey.pem -out eckeypk8.pem

    32.34 dsa

    dsa命令用于处理DSA密钥、格式转换和打印信息。

    用法:

    openssl dsa [-inform PEM|DER] [-outform PEM|DER] [-in filename]

           [-passin arg] [-out filename] [-passout arg] [-des] [-des3] [-idea]

           [-text] [-noout] [-modulus] [-engine id]

    选项:

           -inform  

    输入dsa密钥格式,PEMDER

           -outform

    输出文件格式,PEMDER

           -in   filename

    输入的DSA密钥文件名。

           -passin arg

    指定私钥包含口令存放方式。比如用户将私钥的保护口令写入一个文件,采用此选项指定此文件,可以免去用户输入口令的操作。比如用户将口令写入文件“pwd.txt”,输入的参数为:-passin file:pwd.txt

           -out filename  

    指定输出文件名。

           -passout arg   

    输出文件口令保护存放方式。

           -des  -des3 -idea  

    指定私钥保护加密算法。

           -text       

    打印所有信息。

           -noout

                  不打印信息。

    -modulus

    打印公钥信息。

    -engine id

    指定引擎。

    示例:

    1)    生成dsa参数文件

    openssl  dsaparam  -out dsaparam.pem 1024

    2)    根据dsa参数文件生成dsa密钥

    openssl gendsa -out dsakey.pem dsaparam.pem

    3)    PME密钥转换为DER密钥

    openssl dsa -in dsakey.pem -outform DER -out  dsakeyder.pem

    4)    打印公钥信息

    openssl dsa -in dsakey.pem –modulus

    5)    打印所有信息

    openssl dsa -in dsakey.pem –text

    6)    dsa密钥加密存放

    openssl dsa -in dsakey.pem -des -out enckey.pem

    32.35      nseq

    本命令用于多个证书与netscape证书序列间相互转化。

    用法:openssl nseq [-in filename] [-out filename] [-toseq]

    选项:

           -in   filename 

    输入文件名。

           -out filename

                  输出文件名。

           -toseq

    含此项时将多个证书转化为netscape证书序列,否则将netscape证书序列转化为多个证书。

    示例:

    1)   将多个证书写成一个文件

    cat    newcert.pem > 1.pem

    cat    cacert.pem  >> 1.pem

    2)    将多个证书转化为netscape证书序列

    openssl nseq -in 1.pem -toseq  -out 2.pem

    3)   netscape证书序列转化为多个证书

    openssl nseq -in 2.pem -out 3.pem

    32.36      prime

    检查一个数是否为素数。示例如下:

    openssl prime       79

    openssl prime        -hex  4F

    32.37      smime

    S/MIME工具,用于处理S/MIME邮件,它能加密、解密、签名和验证S/MIME消息。

    用法:

    openssl smime [-encrypt] [-decrypt] [-sign] [-verify] [-pk7out] [-des]

           [-des3] [-rc2-40] [-rc2-64] [-rc2-128] [-in file] [-certfile file]

           [-signer file] [-recip  file] [-inform SMIME|PEM|DER] [-passin arg]

           [-inkey file] [-out file] [-outform SMIME|PEM|DER] [-content file] [-to

           addr] [-from ad] [-subject s] [-text] [-rand file(s)] [cert.pem]...

    主要选项:

           -encrypt

                  加密数据。

           -decrypt

                  解密数据。

           -sign

                  签名数据。

           -verify

                  验证数据。

           -in

                  输入文件名。

           -out

    输出文件名。

           -pk7out

                  输出pkcs7格式的文件。

           -des -des3 -rc2-40 –rc2-60 –rc2-128

                  对称算法。

           -signer file

                  指定签名者证书。

           -recip      file

                  指定接收者证书。

           -inform

                  输入文件格式。

           -passin arg

                  私钥保护口令来源。

           -inkey file

                  私钥文件。

           -outform

                  输出文件格式。

    示例:

    1)   用对方的证书来加密消息

    openssl smime -encrypt -in mail.pem -out enced.pem newcert.pem

    openssl smime -encrypt -in mail.pem -out enced.pem  -des newcert.pem

    2 用私钥解密消息

    openssl smime -decrypt -in  enced.pem -out mymail.pem -inkey newkey.pem

    openssl smime -decrypt -in  enced.pem -out mymail.pem -inkey newkey.pem -des

           3)用自己的私钥签名数据

    openssl smime -sign -in  mail.pem -out signedmail.pem -inkey newkey.pem -signer newcert.pem

    4)    验证签名

    openssl smime -verify -in  signedmail.pem -CAfile newcert.pem -signer newcert.pem

    此处newcert是一个自签名证书,如果不是自签名证书用如下命令:

    openssl smime -verify -in  signedmail.pem -CAfile demoCA/cacert.pem -signer newcert2.pem

    5)   将数据转化为pkcs7格式

    openssl smime -pk7out -in signedmail.pem  -out p7.pem

  • 《openssl 编程》之 openssl命令(4)

    2007-11-15

    32.25    crl2pkcs7

    本命令根据CRL或证书来生成pkcs#7消息。

    用法:

    openssl  crl2pkcs7  [-inform PEM|DER ] [-outform PEM|DER ] [-in filename ] [-out filename ] [-certfile filename ] [-nocrl ]

    选项:

           -inform PME|DER

                  CRL输入格式,默认为PEM格式。

           -outform PME|DER

                  pkcs#7输出格式,默认为PEM格式。

           -in filename

                  指定CRL文件,不设置此项则从标准输入中获取。

           -out filename

                  指定输出文件,不设置此项则输入到标准输出。

           -certfile filename

                  指定证书文件,PEM格式的证书文件可以包含多个证书,此选项可以多次使用。

           -nocrl

    不处理crl。一般情况下,输出文件中包含crl信息,设置此选项时,读取时忽略CRL信息,生成的信息不保护CRL信息。

           示例:

                  openssl crl2pkcs7 -in crl.crl -out crlpkcs7.pem

    openssl crl2pkcs7 -in crl.crl -certfile demoCA/ca cert.pem  -out crlcertpkcs7.pem

    openssl crl2pkcs7 -in crl.crl -certfile demoCA/ca cert.pem  -out certpkcs7.pem –nocrl  上面生成的三个pkcs7文件包含的内容是不同的,crlpkcs7.pem只有crl信息;crlcertpkcs7.pem既有crl信息又有证书信息;certpkcs7.pem只有证书信息。

    所以,不要被crl2pkcs7名字所迷惑,以为它只能将crl转换为pkcs7格式的信息。

    32.26    errstr

           本命令用于查询错误代码。

    用法:

           openssl errstr [-stats] <errno>

    选项:

           -stats

                  打印哈希表状态。

           errno

                  错误号。

    举例:

           用户输入:

           openssl req -config no.txt

           有如下错误信息:

           2220:error:02001002:system library:

           openssl errstr 02001002