五.
入门
实现了
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
的指令繁多,就象天上的星星。慢慢一个一个解释吧。