捕风之巢

统计

留言簿(3)

java友情链接

阅读排行榜

评论排行榜

openssl简介(五)--入门

 

五.     入门

实现了 SSL 的软件不多,但都蛮优秀的。首先, netscape 自己提出来的概念,当然自己会实现一套了。 netscape 的技术蛮优秀的,不过我没用过他们的 ssl-toolkit. 甚至连名字都没搞清楚。
    1995
年, eric.young 开始开发 openssl, 那时候叫 ssleay. 一直到现在, openssl 还在不停的修改和新版本的发行之中。 openssl 真够大的,我真佩服 eric 的水平和兴趣。这些 open/free 的斗士的精神是我写这个系列的主要动力,虽然写的挺烦的。
ps: eric
现在去了 RSA 公司做,做了一个叫 SSL-C toolkit, 其实和 openssl 差不多。估计应该比 openssl 稳定,区别是这个是要银子的,而且几乎所有低层的函数都不提供直接调用了。那多没意思。
   
www.openssl.org down openssl 吧,最新的是 0.9.6 版。
   
安装是很简单的。我一直用的是 sun sparc 的机器,所以用 sun sparc 的机器做例子。
    gunzip -d openssl.0.9.6.tar.gz
    tar -xf openssl.0.9.6.tar
    mv openssl.0.9.6 openssl
    cd openssl
    ./configure --prefix=XXXXX --openssldir=XXXXXXXX
    (
这里 prefix 是你想安装 openssl 的地方, openssldir 就是你 tar 开的 openssl 源码的地方。好象所有的出名点的 free software 都是这个操行, configure, make , make test, make install, 搞定。 )
    ./make(
如果机器慢,这一步的时候可以去洗个澡,换套衣服 )
    ./make test
    ./make install
    OK,
如果路上没有什么问题的话,搞定。
   
经常有人报 bug, hp-ux, sgi 上装 openssl 出问题,我没试过,没发言权。
   
现在可以开始玩 openssl 了。
   
注意: 我估计 openssl 最开始是在 linux 下开发的。大家可以看一看在 linxu 下有这么一个文件: /dev/urandom, sparc 下没有。这个文件有什么用?你可以随时找它要一个随机数。在加密算法产生 key 的时候,我们需要一颗种子: seed 。这个 seed 就是找 /dev/urandom 要的那个随机数。那么在 sparc 下,由于没有这么一个设备,很多 openssl 的函数会报错: "RNG not seeded". 解决方法是:在你的 ~/.profile 里面添加一个变量 $RANDFILE 设置如下:
    $RANDFILE=$HOME/.rnd
   
然后在 $HOME vi .rnd, 随便往里面乱输入一些字符,起码俩行。
   
很多 openssl 的函数都会把这个文件当 seed, 除了 openssl rsa, 希望 openssl 尽快修改这个 bug.
   
如果用 openssl toolkit 编程, 则有其他不太安全的解决方法。以后讲到 openssl 编程的章节会详细介绍。
   
先生成自己的私有密钥文件,比如叫 server.key
    openssl genrsa -des3 -out server.key 1024
    genras
表示生成 RSA 私有密钥文件, -des3 表示用 DES3 加密该文件, 1024 是我们的 key 的长度。一般用 512 就可以了, 784 可用于商业行为了, 1024 可以用于军事用途了。
   
当然,这是基于现在的计算机的速度而言,可能没过几年 1024 是用于开发测试, 2048 用于一般用途了。
   
生成 server.key 的时候会要你输入一个密码,这个密钥用来保护你的 server.key 文件,这样即使人家偷走你的 server.key 文件,也打不开,拿不到你的私有密钥。
    openssl rsa -noout -text -in server.key
   
可以用来看看这个 key 文件里面到底有些什么东西 ( 不过还是看不懂 )
   
如果你觉得 server.key 的保护密码太麻烦想去掉的话:
    openssl rsa -in server.key -out server.key.unsecure
   
不过不推荐这么做
   
下一步要得到证书了。得到证书之前我们要生成一个 Certificate Signing Request.
    CA
只对 CSR 进行处理。
    openssl req -new -key server.key -out server.csr
   
生成 CSR 的时候屏幕上将有提示 , 依照其指示一步一步输入要求的信息即可 .
   
生成的 csr 文件交给 CA 签名后形成服务端自己的证书 . 怎么交给 CA 签名?
   
自己去 www.verisign.com 慢慢看吧。
   
   
如果是自己玩下,那么自己来做 CA 吧。 openssl 有很简单的方法做 CA. 但一般只好在开发的时候或者自己玩的时候用,真的做出产品,还是使用正规的 CA 签发给你的证书吧
   
在你 make install 之后,会发现有个 misc 的目录,进去,运行 CA.sh -newca ,他会找你要 CA 需要的一个 CA 自己的私有密钥密码文件。没有这个文件?按回车创建,输入密码来保护这个密码文件。之后会要你的一个公司信息 来做 CA.crt 文件。最后在当前目录下多了一个 ./demoCA 这样的目录 ../demoCA/private/cakey.pem 就是 CA key 件啦,
    ./demoCA/cacert.pem
就是 CA crt 文件了。把自己创建出来的 server.crt 文件 copy misc 目录下, mv newreq.pem, 然后执行 CA.sh -sign, ok,
   
得到回来的证书我们命名为 server.crt.
   
   
看看我们的证书里面有些什么吧
    openssl x509 -noout -text -in server.crt
   
玩是玩过了, openssl 的指令繁多,就象天上的星星。慢慢一个一个解释吧。

posted on 2006-10-17 15:24 捕风 阅读(400) 评论(0)  编辑  收藏 所属分类: java安全


只有注册用户登录后才能发表评论。


网站导航: