一文帶你了解 SSL 協(xié)議
什么是SSL
簡(jiǎn)稱(chēng)是SSL,全稱(chēng)Secure Sockets Layer 安全套接字協(xié)議,一般我們?cè)趯W(xué)習(xí) SSL 的時(shí)候,都會(huì)和 TLS一起來(lái)學(xué)習(xí)的,為什么呢?因?yàn)? SSL 和 TLS 都是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層與應(yīng)用層之間對(duì)網(wǎng)絡(luò)連接進(jìn)行加密。
我們先看 SSL協(xié)議,然后在看 TLS協(xié)議。
SSL協(xié)議位于 TCP/IP 協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL 協(xié)議可分為兩層:
- SSL記錄協(xié)議(SSL Record Protocol):
 
它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。
- SSL握手協(xié)議(SSL Handshake Protocol):
 
它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
要說(shuō) SSL 協(xié)議我們先來(lái)看看結(jié)構(gòu),

SSL的體系結(jié)構(gòu)中包含兩個(gè)協(xié)議子層,其中底層是
- SSL記錄協(xié)議層(SSL Record Protocol Layer);
 - 高層是SSL握手協(xié)議層(SSL HandShake Protocol Layer)
 
SSL記錄協(xié)議層的作用是為高層協(xié)議提供基本的安全服務(wù)的,而SSL握手協(xié)議層是用于SSL管理信息的交換,允許應(yīng)用協(xié)議傳送數(shù)據(jù)之間相互驗(yàn)證,協(xié)商加密算法和生成密鑰的。
SSL的工作過(guò)程
SSL 的工作過(guò)程實(shí)際上是分為了兩個(gè)部分,一個(gè)是發(fā)送,而另一個(gè)就是接收,每個(gè)部分所處理的事情也是不一樣的,畢竟一個(gè)是發(fā)送一個(gè)是接收。
發(fā)送過(guò)程:
(1)從上層接受要發(fā)送的數(shù)據(jù)(包括各種消息和數(shù)據(jù));
(2)對(duì)信息進(jìn)行分段,分成若干記錄;
(3)使用指定的壓縮算法進(jìn)行數(shù)據(jù)壓縮;
(4)使用指定的MAC算法生成MAC;
(5)使用指定的加密算法進(jìn)行數(shù)據(jù)加密;
(6)添加SSL記錄協(xié)議的頭,發(fā)送數(shù)據(jù)。
到了這個(gè)位置,發(fā)送過(guò)程就已經(jīng)結(jié)束,接下來(lái)就是接收的過(guò)程了。
接收過(guò)程:
(1)接收數(shù)據(jù),從SSL記錄協(xié)議的頭中獲取相關(guān)信息;
(2)使用指定的解密算法解密數(shù)據(jù);
(3)使用指定的MAC算法校驗(yàn)MAC;
(4)使用壓縮算法對(duì)數(shù)據(jù)解壓縮(在需要進(jìn)行);
(5)將記錄進(jìn)行數(shù)據(jù)重組;
(6)將數(shù)據(jù)發(fā)送給高層。
(7)SSL記錄協(xié)議處理的最后一個(gè)步驟是附加一個(gè)SSL記錄協(xié)議的頭,以便構(gòu)成一個(gè)SSL記錄。SSL記錄協(xié)議頭中包含了SSL記錄協(xié)議的若干控制信息。
如果面試官問(wèn)你,簡(jiǎn)述SSL的工作流程?
如果你這么說(shuō),感覺(jué)就不是那么的給力,你這時(shí)候就可以給他區(qū)分一下了,就是服務(wù)器認(rèn)證階段,和用戶(hù)認(rèn)證的階段了。
服務(wù)器認(rèn)證階段:
(1)客戶(hù)端向服務(wù)器發(fā)送一個(gè)開(kāi)始信息“Hello”以便開(kāi)始一個(gè)新的會(huì)話連接;
(2)服務(wù)器根據(jù)客戶(hù)的信息確定是否需要生成新的主密鑰,如需要?jiǎng)t服務(wù)器在響應(yīng)客戶(hù)的“Hello”信息時(shí)將包含生成主密鑰所需的信息;
(3)客戶(hù)根據(jù)收到的服務(wù)器響應(yīng)信息,產(chǎn)生一個(gè)主密鑰,并用服務(wù)器的公開(kāi)密鑰加密后傳給服務(wù)器;
(4)服務(wù)器恢復(fù)該主密鑰,并返回給客戶(hù)一個(gè)用主密鑰認(rèn)證的信息,以此讓客戶(hù)認(rèn)證服務(wù)器。
用戶(hù)認(rèn)證階段:
在此之前,服務(wù)器已經(jīng)通過(guò)了客戶(hù)認(rèn)證,這一階段主要完成對(duì)客戶(hù)的認(rèn)證。經(jīng)認(rèn)證的 服務(wù)器發(fā)送一個(gè)提問(wèn)給客戶(hù),客戶(hù)則返回(數(shù)字)簽名后的提問(wèn)和其公開(kāi)密鑰,從而向服務(wù)器提供認(rèn)證。
把這玩意給面試官一說(shuō),沒(méi)啥毛病吧。
SSL 的加密方式
說(shuō)到加密,這就有點(diǎn)深入了,加密算法主要分為了兩大類(lèi)。

第一類(lèi):
對(duì)稱(chēng)加密
第二類(lèi):
非對(duì)稱(chēng)加密
什么事對(duì)稱(chēng)加密呢?
對(duì)稱(chēng)式加密實(shí)際上就是加密和解密使用同一個(gè)密鑰,通常稱(chēng)之為“Session Key ”這種加密技術(shù)在當(dāng)今被廣泛采用,如美國(guó)政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對(duì)稱(chēng)式”加密法,它的Session Key長(zhǎng)度為56bits。
而非對(duì)稱(chēng)加密就稍微復(fù)雜了,
非對(duì)稱(chēng)式加密就是加密和解密所使用的不是同一個(gè)密鑰,通常有兩個(gè)密鑰,稱(chēng)為“公鑰”和“私鑰”,它們兩個(gè)必需配對(duì)使用,否則不能打開(kāi)加密文件。這里的“公鑰”是指可以對(duì)外公布的,“私鑰”則不能,只能由持有人一個(gè)人知道。它的優(yōu)越性就在這里,因?yàn)閷?duì)稱(chēng)式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難不把密鑰告訴對(duì)方,不管用什么方法都有可能被別人竊聽(tīng)到。而非對(duì)稱(chēng)式的加密方法有兩個(gè)密鑰,且其中的“公鑰”是可以公開(kāi)的,也就不怕別人知道,收件人解密時(shí)只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問(wèn)題。
如果使用的話,各位想怎么是用呢?
根據(jù)剛才阿粉說(shuō)的服務(wù)器認(rèn)證和用戶(hù)認(rèn)證了,那么就繼續(xù)來(lái)分析一下這個(gè)過(guò)程中 SSL 是如何加密的。
簡(jiǎn)單說(shuō):(1)認(rèn)證服務(wù)器 (2)協(xié)商會(huì)話秘鑰 (3)加密傳輸
但是如果你敢這么說(shuō),你會(huì)被錘死。
強(qiáng)制在分解一下:
第一步:客戶(hù)端給出支持SSL協(xié)議版本號(hào),一個(gè)客戶(hù)端隨機(jī)數(shù)(Client random,請(qǐng)注意這是第一個(gè)隨機(jī)數(shù)),客戶(hù)端支持的加密方法等信息;
第二步:服務(wù)端收到信息后,確認(rèn)雙方使用的加密方法,并返回?cái)?shù)字證書(shū),一個(gè)服務(wù)器生成的隨機(jī)數(shù)(Server random,注意這是第二個(gè)隨機(jī)數(shù))等信息;
第三步:客戶(hù)端確認(rèn)數(shù)字證書(shū)的有效性,然后生成一個(gè)新的隨機(jī)數(shù)(Premaster secret),然后使用數(shù)字證書(shū)中的公鑰,加密這個(gè)隨機(jī)數(shù),發(fā)給服務(wù)端。
第四步:服務(wù)端使用自己的私鑰,獲取客戶(hù)端發(fā)來(lái)的隨機(jī)數(shù)(即Premaster secret);(第三、四步就是非對(duì)稱(chēng)加密的過(guò)程了)
第五步:客戶(hù)端和服務(wù)端通過(guò)約定的加密方法(通常是AES算法),使用前面三個(gè)隨機(jī)數(shù),生成對(duì)話密鑰,用來(lái)加密接下來(lái)的通信內(nèi)容;
這是不是就完成了呢?你學(xué)會(huì)了么?















 
 
 



















 
 
 
 