?
五.????
入門
實現了
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
的指令繁多,就象天上的星星。慢慢一個一個解釋吧。