?
五.????
入門(mén)
實(shí)現(xiàn)了
SSL
的軟件不多,但都蠻優(yōu)秀的。首先,
netscape
自己提出來(lái)的概念,當(dāng)然自己會(huì)實(shí)現(xiàn)一套了。
netscape
的技術(shù)蠻優(yōu)秀的,不過(guò)我沒(méi)用過(guò)他們的
ssl-toolkit.
甚至連名字都沒(méi)搞清楚。
? ? 1995
年,
eric.young
開(kāi)始開(kāi)發(fā)
openssl,
那時(shí)候叫
ssleay.
一直到現(xiàn)在,
openssl
還在不停的修改和新版本的發(fā)行之中。
openssl
真夠大的,我真佩服
eric
的水平和興趣。這些
open/free
的斗士的精神是我寫(xiě)這個(gè)系列的主要?jiǎng)恿Γm然寫(xiě)的挺煩的。
ps: eric
現(xiàn)在去了
RSA
公司做,做了一個(gè)叫
SSL-C
的
toolkit,
其實(shí)和
openssl
差不多。估計(jì)應(yīng)該比
openssl
穩(wěn)定,區(qū)別是這個(gè)是要銀子的,而且?guī)缀跛械蛯拥暮瘮?shù)都不提供直接調(diào)用了。那多沒(méi)意思。
? ?
去
www.openssl.org down openssl
吧,最新的是
0.9.6
版。
? ?
安裝是很簡(jiǎn)單的。我一直用的是
sun sparc
的機(jī)器,所以用
sun sparc
的機(jī)器做例子。
? ? 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
開(kāi)的
openssl
源碼的地方。好象所有的出名點(diǎn)的
free software
都是這個(gè)操行,
configure, make , make test, make install,
搞定。
)
? ? ./make(
如果機(jī)器慢,這一步的時(shí)候可以去洗個(gè)澡,換套衣服
)
? ? ./make test
? ? ./make install
? ? OK,
如果路上沒(méi)有什么問(wèn)題的話,搞定。
? ?
經(jīng)常有人報(bào)
bug,
在
hp-ux, sgi
上裝
openssl
出問(wèn)題,我沒(méi)試過(guò),沒(méi)發(fā)言權(quán)。
? ?
現(xiàn)在可以開(kāi)始玩
openssl
了。
? ?
注意:
我估計(jì)
openssl
最開(kāi)始是在
linux
下開(kāi)發(fā)的。大家可以看一看在
linxu
下有這么一個(gè)文件:
/dev/urandom,
在
sparc
下沒(méi)有。這個(gè)文件有什么用?你可以隨時(shí)找它要一個(gè)隨機(jī)數(shù)。在加密算法產(chǎn)生
key
的時(shí)候,我們需要一顆種子:
seed
。這個(gè)
seed
就是找
/dev/urandom
要的那個(gè)隨機(jī)數(shù)。那么在
sparc
下,由于沒(méi)有這么一個(gè)設(shè)備,很多
openssl
的函數(shù)會(huì)報(bào)錯(cuò):
"RNG not seeded".
解決方法是:在你的
~/.profile
里面添加一個(gè)變量
$RANDFILE
,
設(shè)置如下:
? ? $RANDFILE=$HOME/.rnd
? ?
然后在
$HOME
下
vi .rnd,
隨便往里面亂輸入一些字符,起碼倆行。
? ?
很多
openssl
的函數(shù)都會(huì)把這個(gè)文件當(dāng)
seed,
除了
openssl rsa,
希望
openssl
盡快修改這個(gè)
bug.
? ?
如果用
openssl
做
toolkit
編程,
則有其他不太安全的解決方法。以后講到
openssl
編程的章節(jié)會(huì)詳細(xì)介紹。
? ?
先生成自己的私有密鑰文件,比如叫
server.key
? ? openssl genrsa -des3 -out server.key 1024
? ? genras
表示生成
RSA
私有密鑰文件,
-des3
表示用
DES3
加密該文件,
1024
是我們的
key
的長(zhǎng)度。一般用
512
就可以了,
784
可用于商業(yè)行為了,
1024
可以用于軍事用途了。
? ?
當(dāng)然,這是基于現(xiàn)在的計(jì)算機(jī)的速度而言,可能沒(méi)過(guò)幾年
1024
是用于開(kāi)發(fā)測(cè)試,
2048
用于一般用途了。
? ?
生成
server.key
的時(shí)候會(huì)要你輸入一個(gè)密碼,這個(gè)密鑰用來(lái)保護(hù)你的
server.key
文件,這樣即使人家偷走你的
server.key
文件,也打不開(kāi),拿不到你的私有密鑰。
? ? openssl rsa -noout -text -in server.key
? ?
可以用來(lái)看看這個(gè)
key
文件里面到底有些什么東西
(
不過(guò)還是看不懂
)
? ?
如果你覺(jué)得
server.key
的保護(hù)密碼太麻煩想去掉的話:
? ? openssl rsa -in server.key -out server.key.unsecure
? ?
不過(guò)不推薦這么做
? ?
下一步要得到證書(shū)了。得到證書(shū)之前我們要生成一個(gè)
Certificate Signing Request.
? ? CA
只對(duì)
CSR
進(jìn)行處理。
? ? openssl req -new -key server.key -out server.csr
? ?
生成
CSR
的時(shí)候屏幕上將有提示
,
依照其指示一步一步輸入要求的信息即可
.
? ?
生成的
csr
文件交給
CA
簽名后形成服務(wù)端自己的證書(shū)
.
怎么交給
CA
簽名?
? ?
自己去
www.verisign.com
慢慢看吧。
? ?
? ?
如果是自己玩下,那么自己來(lái)做
CA
吧。
openssl
有很簡(jiǎn)單的方法做
CA.
但一般只好在開(kāi)發(fā)的時(shí)候或者自己玩的時(shí)候用,真的做出產(chǎn)品,還是使用正規(guī)的
CA
簽發(fā)給你的證書(shū)吧
? ?
在你
make install
之后,會(huì)發(fā)現(xiàn)有個(gè)
misc
的目錄,進(jìn)去,運(yùn)行
CA.sh -newca
,他會(huì)找你要
CA
需要的一個(gè)
CA
自己的私有密鑰密碼文件。沒(méi)有這個(gè)文件?按回車(chē)創(chuàng)建,輸入密碼來(lái)保護(hù)這個(gè)密碼文件。之后會(huì)要你的一個(gè)公司信息
來(lái)做
CA.crt
文件。最后在當(dāng)前目錄下多了一個(gè)
./demoCA
這樣的目錄
../demoCA/private/cakey.pem
就是
CA
的
key
文
件啦,
? ? ./demoCA/cacert.pem
就是
CA
的
crt
文件了。把自己創(chuàng)建出來(lái)的
server.crt
文件
copy
到
misc
目錄下,
mv
成
newreq.pem,
然后執(zhí)行
CA.sh -sign, ok,
? ?
得到回來(lái)的證書(shū)我們命名為
server.crt.
? ?
? ?
看看我們的證書(shū)里面有些什么吧
? ? openssl x509 -noout -text -in server.crt
? ?
玩是玩過(guò)了,
openssl
的指令繁多,就象天上的星星。慢慢一個(gè)一個(gè)解釋吧。