http://blog.csdn.net/junehappylove/article/details/52288796
指紋:hash(指紋算法)過后的證書信息,用來保證證書信息完整性,防止黑客篡改。hash是單向的,只能通過內(nèi)容生成hash值,不能反推
簽名:通過非對稱加密算法和其私鑰(CA私鑰)對指紋加密,形成簽名。
瀏覽器驗證證書:通過公鑰(這個公鑰并不是證書中的公鑰,證書中的公鑰是服務(wù)器提供的公鑰,這里的是CA的公鑰)解密簽名,然后用同樣的的指紋算法hash證書信息,最后驗證是否和指紋相同。
重點:
step1: “客戶”向服務(wù)端發(fā)送一個通信請求
“客戶”->“服務(wù)器”:你好
step2: “服務(wù)器”向客戶發(fā)送自己的數(shù)字證書。證書中有一個公鑰用來加密信息,私鑰由“服務(wù)器”持有
“服務(wù)器”->“客戶”:你好,我是服務(wù)器,這里是我的數(shù)字證書
step3: “客戶”收到“服務(wù)器”的證書后,它會去驗證這個數(shù)字證書到底是不是“服務(wù)器”的,數(shù)字證書有沒有什么問題,數(shù)字證書如果檢查沒有問題,就說明數(shù)字證書中的公鑰確實是“服務(wù)器”的。檢查數(shù)字證書后,“客戶”會發(fā)送一個隨機的字符串給“服務(wù)器”用私鑰去加密,服務(wù)器把加密的結(jié)果返回給“客戶”,“客戶”用公鑰解密這個返回結(jié)果,如果解密結(jié)果與之前生成的隨機字符串一致,那說明對方確實是私鑰的持有者,或者說對方確實是“服務(wù)器”。
“客戶”->“服務(wù)器”:向我證明你就是服務(wù)器,這是一個隨機字符串 //前面的例子中為了方便解釋,用的是“你好”等內(nèi)容,實際情況下一般是隨機生成的一個字符串。
“服務(wù)器”->“客戶”:{一個隨機字符串}[私鑰|RSA]
step4: 驗證“服務(wù)器”的身份后,“客戶”生成一個對稱加密算法和密鑰,用于后面的通信的加密和解密。這個對稱加密算法和密鑰,“客戶”會用公鑰加密后發(fā)送給“服務(wù)器”,別人截獲了也沒用,因為只有“服務(wù)器”手中有可以解密的私鑰。這樣,后面“服務(wù)器”和“客戶”就都可以用對稱加密算法來加密和解密通信內(nèi)容了。
“服務(wù)器”->“客戶”:{OK,已經(jīng)收到你發(fā)來的對稱加密算法和密鑰!有什么可以幫到你的?}[密鑰|對稱加密算法]
“客戶”->“服務(wù)器”:{我的帳號是aaa,密碼是123,把我的余額的信息發(fā)給我看看}[密鑰|對稱加密算法]
“服務(wù)器”->“客戶”:{你好,你的余額是100元}[密鑰|對稱加密算法]