公私鑰:公鑰可以唯一解密私鑰加密過(guò)的數(shù)據(jù),反之亦然。以下用P指代公鑰,V指代私鑰。
SSL過(guò)程:需要兩對(duì)公私鑰(P1,V1),(P2,V2),假設(shè)通信雙方是A和B,B是服務(wù)器,A要確認(rèn)和它通信的是B:
A->B: hello
B->A: 用V2加密過(guò)的P1(即用戶(hù)證書(shū),A就用P2解密出P1)
A->B: ok
B->A: 用V1加密的一段信息
A->B: 用P1加密一個(gè)自動(dòng)生成的K(用之前的P1解密成功這段信息則認(rèn)為B是可信的了)
B->A: 用K加密的數(shù)據(jù)(之后兩對(duì)密鑰功能結(jié)束,由K來(lái)加解密數(shù)據(jù))
這里,P2就是第3方的CA證書(shū),由于非對(duì)稱(chēng)加密很慢,所以公私鑰只是用來(lái)保證K的傳送安全,之后通信是用K的對(duì)稱(chēng)加密算法來(lái)保證。
為什么通過(guò)以上過(guò)程A就能夠確定肯定是B,而不是某個(gè)C在假裝B了呢?因?yàn)檫@個(gè)過(guò)程中,B用V1加密過(guò)一段信息發(fā)給A,A也成功解開(kāi)了。我們開(kāi)頭談到公鑰(P1)只可以唯一解密私鑰(V1)加密過(guò)的信息,這樣A就可以完全相信B是擁有V1的,而V1是嚴(yán)格保密,只被服務(wù)提供公司擁有,所以保證了通信的服務(wù)方正確性。
這里(P2,V2)就是certificate authority (CA)用來(lái)給客戶(hù)簽名用的公私鑰。
(P1,V1)是客戶(hù)自己的公私鑰,提交給CA,CA所做的事情就是用(P2,V2)來(lái)給客戶(hù)的(P1,V1)簽名,簡(jiǎn)單吧?
V2是CA公司要保密的,而P2就是公用CA證書(shū)。用V2加密過(guò)(簽名過(guò))的P1,稱(chēng)為用戶(hù)證書(shū),一般被安裝在服務(wù)器端。
下面我們OpenSSL來(lái)做這一整件事情。
先生成CA的公私鑰(Root Certificate )
準(zhǔn)備工作





生成配置文件。由于openssl命令行參數(shù)太多,所以就用文件來(lái)組織各種選項(xiàng)。
其中,req_distinguished_name 節(jié)表示需要提示用戶(hù)輸入的信息。
v3_ca是有關(guān)CA公私鑰生成的,v3_req是有關(guān)用戶(hù)證書(shū)生成的。
ca_default是用CA公私鑰簽名的時(shí)候,用戶(hù)證書(shū)的默認(rèn)信息。
vi ./openssl.cnf



































































生成CA公私鑰:

會(huì)提示輸入密碼,當(dāng)用它給用戶(hù)證書(shū)簽名時(shí)需要輸入,以避免其它人用它隨意產(chǎn)生用戶(hù)證書(shū)。
-days表示有效期,因?yàn)樗歉C書(shū),所以時(shí)間一定要很長(zhǎng),否則由它生成的用戶(hù)證書(shū)容易過(guò)期。
這時(shí)就生成了:
P1
cacert.pem
V1
private/cakey.pem
查看信息用:
openssl x509 -in cacert.pem -noout -text
生成P2,V2,即Certificate Signing Request (CSR)
執(zhí)行:
openssl req -new -nodes -out req.pem -config ./openssl.cnf
這樣就生成了:
P2
req.pem
V2
key.pem
用此命令查看:
openssl req -in req.pem -text -verify -noout
用CA的私鑰V1為P2簽名,即生成用戶(hù)證書(shū)
執(zhí)行:
openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
生成用戶(hù)證書(shū):
cert.pem
此時(shí),會(huì)拷貝一份到newcerts目錄下。并會(huì)更新數(shù)據(jù)庫(kù)文件:index.txt以及serail文件
用命令查看:
openssl x509 -in cert.pem -noout -text -purpose | more
如果要去除可讀信息部分,執(zhí)行:
mv cert.pem tmp.pem
openssl x509 -in tmp.pem -out cert.pem
安裝證書(shū)
key.pem(V2)和cert.pem(用V1加密過(guò)的P2)安裝到服務(wù)端
有的服務(wù)器需要把這兩個(gè)文件連為一個(gè),可以執(zhí)行:
cat key.pem cert.pem >key-cert.pem
cacert.pem安裝到客戶(hù)端
Apache的配置:
File Comment
/home/httpd/html Apache DocumentRoot
/home/httpd/ssl SSL-related files
/home/httpd/ssl/cert.pem Site certificate
/home/httpd/ssl/key.pem Site private key
Stunnel的配置
stunnel -p /etc/ssl/certs/key-cert.pem
編輯于08.4.26,另有兩個(gè)例子:
用OpenSSL與JAVA(JSSE)通信
Perl與Java的SSL通信示例