雙向認(rèn)證 SSL 協(xié)議要求服務(wù)器和用戶雙方都有證書喷户。
單向認(rèn)證 SSL 協(xié)議不需要客戶擁有CA證書,具體的過程相對(duì)于上面的步驟访锻,只需將服務(wù)器端驗(yàn)證客戶證書的過程去掉褪尝,以及在協(xié)商對(duì)稱密碼方案,對(duì)稱通話密鑰時(shí)期犬,服務(wù)器發(fā)送給客戶的是沒有加過密的(這并不影響 SSL 過程的安全性)密碼方案河哑。
這樣,雙方具體的通訊內(nèi)容龟虎,就是加過密的數(shù)據(jù)璃谨,如果有第三方攻擊,獲得的只是加密的數(shù)據(jù)鲤妥,第三方要獲得有用的信息佳吞,就需要對(duì)加密的數(shù)據(jù)進(jìn)行解密,這時(shí)候的安全就依賴于密碼方案的安全棉安。
幸運(yùn)的是底扳,目前所用的密碼方案,只要通訊密鑰長(zhǎng)度足夠的長(zhǎng)贡耽,就足夠的安全衷模,這也是我們強(qiáng)調(diào)要求使用128位加密通訊的原因。
一般Web應(yīng)用都是采用SSL單向認(rèn)證的蒲赂,原因很簡(jiǎn)單阱冶,用戶數(shù)目廣泛,且無需在通訊層對(duì)用戶身份進(jìn)行驗(yàn)證凳宙,一般都在應(yīng)用邏輯層來保證用戶的合法登入熙揍。但如果是企業(yè)應(yīng)用對(duì)接职祷,情況就不一樣氏涩,可能會(huì)要求對(duì)客戶端(相對(duì)而言)做身份驗(yàn)證届囚。這時(shí)就需要做SSL雙向認(rèn)證。
SSL單向認(rèn)證具體過程
①客戶端的瀏覽器向服務(wù)器傳送客戶端SSL協(xié)議的版本號(hào)是尖,加密算法的種類意系,產(chǎn)生的隨機(jī)數(shù),以及其他服務(wù)器和客戶端之間通訊所需要的各種信息饺汹。
②服務(wù)器向客戶端傳送SSL協(xié)議的版本號(hào)蛔添,加密算法的種類,隨機(jī)數(shù)以及其他相關(guān)信息兜辞,同時(shí)服務(wù)器還將向客戶端傳送自己的證書迎瞧。
③客戶利用服務(wù)器傳過來的信息驗(yàn)證服務(wù)器的合法性,服務(wù)器的合法性包括:證書是否過期逸吵,發(fā)行服務(wù)器證書的CA是否可靠窿侈,發(fā)行者證書的公鑰能否正確解開服務(wù)器證書的"發(fā)行者的數(shù)字簽名"免胃,服務(wù)器證書上的域名是否和服務(wù)器的實(shí)際域名相匹配。如果合法性驗(yàn)證沒有通過,通訊將斷開;如果合法性驗(yàn)證通過刀脏,將繼續(xù)進(jìn)行第四步。
④用戶端隨機(jī)產(chǎn)生一個(gè)用于后面通訊的"對(duì)稱密碼"谆奥,然后用服務(wù)器的公鑰(服務(wù)器的公鑰從步驟②中的服務(wù)器的證書中獲得)對(duì)其加密见坑,然后將加密后的"預(yù)主密碼"傳給服務(wù)器。
⑤如果服務(wù)器要求客戶的身份認(rèn)證(在握手過程中為可選)段多,用戶可以建立一個(gè)隨機(jī)數(shù)然后對(duì)其進(jìn)行數(shù)據(jù)簽名首量,將這個(gè)含有簽名的隨機(jī)數(shù)和客戶自己的證書以及加密過的"預(yù)主密碼"一起傳給服務(wù)器。
⑥如果服務(wù)器要求客戶的身份認(rèn)證衩匣,服務(wù)器必須檢驗(yàn)客戶證書和簽名隨機(jī)數(shù)的合法性蕾总,具體的合法性驗(yàn)證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的CA是否可靠琅捏,發(fā)行CA 的公鑰能否正確解開客戶證書的發(fā)行CA的數(shù)字簽名生百,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗(yàn)如果沒有通過柄延,通訊立刻中斷;如果驗(yàn)證通過蚀浆,服務(wù)器將用自己的私鑰解開加密的"預(yù)主密碼 ",然后執(zhí)行一系列步驟來產(chǎn)生主通訊密碼(客戶端也將通過同樣的方法產(chǎn)生相同的主通訊密碼)搜吧。
⑦服務(wù)器和客戶端用相同的主密碼即"通話密碼"市俊,一個(gè)對(duì)稱密鑰用于SSL協(xié)議的安全數(shù)據(jù)通訊的加解密通訊。同時(shí)在SSL通訊過程中還要完成數(shù)據(jù)通訊的完整性滤奈,防止數(shù)據(jù)通訊中的任何變化摆昧。
⑧客戶端向服務(wù)器端發(fā)出信息,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對(duì)稱密鑰蜒程,同時(shí)通知服務(wù)器客戶端的握手過程結(jié)束绅你。
⑨服務(wù)器向客戶端發(fā)出信息伺帘,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對(duì)稱密鑰,同時(shí)通知客戶端服務(wù)器端的握手過程結(jié)束忌锯。
⑩-SSL的握手部分結(jié)束伪嫁,SSL安全通道的數(shù)據(jù)通訊開始,客戶和服務(wù)器開始使用相同的對(duì)稱密鑰進(jìn)行數(shù)據(jù)通訊偶垮,同時(shí)進(jìn)行通訊完整性的檢驗(yàn)张咳。
SSL雙向認(rèn)證具體過程
① 瀏覽器發(fā)送一個(gè)連接請(qǐng)求給安全服務(wù)器。
② 服務(wù)器將自己的證書似舵,以及同證書相關(guān)的信息發(fā)送給客戶瀏覽器脚猾。
③ 客戶瀏覽器檢查服務(wù)器送過來的證書是否是由自己信賴的CA中心(如沃通CA)所簽發(fā)的。如果是砚哗,就繼續(xù)執(zhí)行協(xié)議;如果不是婚陪,客戶瀏覽器就給客戶一個(gè)警告消息:警告客戶這個(gè)證書不是可以信賴的,詢問客戶是否需要繼續(xù)频祝。
④ 接著客戶瀏覽器比較證書里的消息泌参,例如域名和公鑰,與服務(wù)器剛剛發(fā)送的相關(guān)消息是否一致常空,如果是一致的沽一,客戶瀏覽器認(rèn)可這個(gè)服務(wù)器的合法身份。
⑤ 服務(wù)器要求客戶發(fā)送客戶自己的證書漓糙。收到后铣缠,服務(wù)器驗(yàn)證客戶的證書,如果沒有通過驗(yàn)證昆禽,拒絕連接;如果通過驗(yàn)證蝗蛙,服務(wù)器獲得用戶的公鑰。
⑥ 客戶瀏覽器告訴服務(wù)器自己所能夠支持的通訊對(duì)稱密碼方案醉鳖。
⑦ 服務(wù)器從客戶發(fā)送過來的密碼方案中捡硅,選擇一種加密程度最高的密碼方案,用客戶的公鑰加過密后通知瀏覽器盗棵。
⑧ 瀏覽器針對(duì)這個(gè)密碼方案壮韭,選擇一個(gè)通話密鑰,接著用服務(wù)器的公鑰加過密后發(fā)送給服務(wù)器纹因。
⑨ 服務(wù)器接收到瀏覽器送過來的消息喷屋,用自己的私鑰解密,獲得通話密鑰瞭恰。
⑩ 服務(wù)器屯曹、瀏覽器接下來的通訊都是用對(duì)稱密碼方案,對(duì)稱密鑰是加過密的。
雙向認(rèn)證則是需要服務(wù)端與客戶端提供身份認(rèn)證恶耽,只能是服務(wù)端允許的客戶能去訪問僵井,安全性相對(duì)于要高一些。
參考
SSL雙向認(rèn)證和SSL單向認(rèn)證的區(qū)別