https
HTTPS工作在443端口,而HTTP默認(rèn)工作在80端口。 SSL 是“Secure Sockets Layer”的縮寫,中文叫做“安全套接層”。它是在上世紀(jì)90年代中期,由網(wǎng)景公司設(shè)計的。到了1999年,SSL 應(yīng)用廣泛,已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn)。IETF 就把SSL 標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化之后SSL被改為 TLS(Transport Layer Security傳輸層安全協(xié)議)。SSL/ TLS SSL原理詳解SSL協(xié)議結(jié)構(gòu):
SSL協(xié)議分為兩層,下層為SSL記錄協(xié)議,上層為SSL握手協(xié)議、SSL密碼變化協(xié)議和SSL警告協(xié)議。 1.下層為SSL記錄協(xié)議,主要作用是為高層協(xié)議提供基本的安全服務(wù)
2.上層為SSL握手協(xié)議、SSL密碼變化協(xié)議和SSL報警協(xié)議
SSL工作大致可以分為兩個階段1.第一階段:Handshake phase(握手階段)
2.第二階段:Secure data transfer phase(安全數(shù)據(jù)傳輸階段)
SSL協(xié)議提供的服務(wù):1)認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的 客戶機(jī)和服務(wù)器 認(rèn)證服務(wù)器:瀏覽器內(nèi)置一個受信任的CA機(jī)構(gòu)列表,并保存了這些CA機(jī)構(gòu)的證書。第一階段服務(wù)器會提供經(jīng)CA機(jī)構(gòu)認(rèn)證頒發(fā)的服務(wù)器證書,如果認(rèn)證該服務(wù)器證書的CA機(jī)構(gòu),存在于瀏覽器的受信任CA機(jī)構(gòu)列表中,并且服務(wù)器證書中的信息與當(dāng)前正在訪問的網(wǎng)站(域名等)一致,那么瀏覽器就認(rèn)為服務(wù)端是可信的,并從服務(wù)器證書中取得服務(wù)器公鑰,用于后續(xù)流程。否則,瀏覽器將提示用戶,根據(jù)用戶的選擇,決定是否繼續(xù)。當(dāng)然,我們可以管理這個受信任CA機(jī)構(gòu)列表,添加我們想要信任的CA機(jī)構(gòu),或者移除我們不信任的CA機(jī)構(gòu)。 SSL原理
在用SSL進(jìn)行通信之前,首先要使用SSL的Handshake協(xié)議在通信兩端握手,協(xié)商數(shù)據(jù)傳輸中要用到的相關(guān)安全參數(shù)(如加密算法、共享密鑰、產(chǎn)生密鑰所要的材料等),并對對端的身份進(jìn)行驗(yàn)證。 SSL第一階段客戶端首先發(fā)送ClientHello消息到服務(wù)端,服務(wù)端收到ClientHello消息后,再發(fā)送ServerHello消息回應(yīng)客戶端。
ClientHello客戶端瀏覽器向服務(wù)器端發(fā)送如下信息:
ServerHello服務(wù)器端向客戶端發(fā)送如下信息:
在此階段之后通信雙方分別確定了: 1、SSL的版本;2、加密套件;3、壓縮算法;4、倆個隨機(jī)數(shù) SSL第二階段服務(wù)器向客戶端發(fā)送消息,本階段服務(wù)器是唯一發(fā)送方,客戶端是唯一接收方。
本階段共有四個消息,如下:
Certificate(可選)——第一次建立必須要有證書一般情況下,除了會話恢復(fù)時不需要發(fā)送該消息,在SSL握手的全過程中都需要該消息。消息中包含一個X.509證書,證書中包含公鑰,發(fā)給客戶端用來驗(yàn)證簽名或者在密鑰交換時給消息加密。 Server Key Exchange(可選)根據(jù)之前的client hello消息中的cipther suite信息決定了,密鑰交換的方法(例如RSA和DH),因此在此消息中便會完成密鑰交換所需的一系列參數(shù)。 Certificate Request(可選)——可以是單向身份認(rèn)證,也可以是雙向這一步是可選的,在安全性要求高的場合可以看到;服務(wù)端發(fā)送Certificate Request消息,請求客戶端發(fā)送他自己的證書來進(jìn)行驗(yàn)證。該消息中包含服務(wù)器端支持的證書類型(RSA、DSA、ECDSA),和服務(wù)器所信任的所有證書的發(fā)行機(jī)構(gòu)的CA列表,客戶端會用這些信息來篩選證書。 ServerHello Done表示服務(wù)器已將所有的信息發(fā)送完畢,等待客戶端發(fā)送消息 SSL第三階段客戶端收到服務(wù)器發(fā)送的一系列消息并解析后,將本端相應(yīng)的消息發(fā)送給服務(wù)器。 客戶機(jī)啟動SSL握手第3階段,是本階段所有消息的唯一發(fā)送方,服務(wù)器是所有消息的唯一接收方。該階段分為3步:
Certificate(可選)如果在第二階段服務(wù)器要求客戶端發(fā)送證書,客戶端便會發(fā)送自己的證書,服務(wù)器端之前在發(fā)送的Certificate Request消息中包含了服務(wù)器所支持的證書類型和CA列表,客戶端會在證書中找到滿足要求的一個發(fā)送給服務(wù)器。若客戶端沒有證書,則會發(fā)送一個no_certificate警告。 Client Key Exchange
Certificate Verify(可選)只有在客戶端在發(fā)送了證書到服務(wù)端時,這個消息才需要發(fā)送,其中包含簽名,對從握手第一條消息以來的所有握手消息的HMAC值(用master_secret)進(jìn)行簽名。 SSL第四階段完成握手協(xié)議,建立SSL連接。
該階段有四個消息交互,前兩個為客戶端發(fā)送,后兩個為服務(wù)器發(fā)送。 建立起一個安全的連接,客戶端發(fā)送一個Change Cipher spec消息,并且把協(xié)商得到的Cipher suite拷貝到當(dāng)前連接的狀態(tài)之中。然后客戶端使用新的算法和密鑰參數(shù)發(fā)送一個Finished消息,這條消息可以檢測密鑰交換和認(rèn)證過程是否已經(jīng)成功,其中包括一個校驗(yàn)值,對客戶端整個握手消息進(jìn)行校驗(yàn)。服務(wù)器同樣發(fā)送一個Change Cipher Spec消息和Finished消息。握手過程完成,客戶端和服務(wù)器可以交換應(yīng)用層數(shù)據(jù)進(jìn)行通信。 Change Cipher Spec編碼改變通知,表示隨后的信息將用雙方商定的加密算法和和密鑰發(fā)送(ChangeCipherSpec是一個獨(dú)立的協(xié)議,體現(xiàn)在數(shù)據(jù)包中就是一個字節(jié)的數(shù)據(jù),用于告知服務(wù)端,客戶端已經(jīng)切換到之前協(xié)商好的加密套件(Cipher Suite)的狀態(tài),準(zhǔn)備使用之前協(xié)商好的加密套件加密數(shù)據(jù)并傳輸了)。 Client finished客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時也是前面所有發(fā)送的內(nèi)容的hash值,用來供服務(wù)器校驗(yàn)。(使用HMAC算法計算收到和發(fā)送的所有握手消息的摘要,加密后發(fā)送。此數(shù)據(jù)是為了在正式傳輸應(yīng)用數(shù)據(jù)之前對剛剛握手建立起來的加解密通道進(jìn)行驗(yàn)證。) Server Finished服務(wù)端握手結(jié)束通知。 使用私鑰解密加密的Pre-master數(shù)據(jù),基于之前(Client Hello 和 Server Hello)交換的兩個明文隨機(jī)數(shù) random_C 和 random_S,計算得到協(xié)商密鑰:enc_key=Fuc(random_C, random_S, Pre-Master); SSL原理—會話恢復(fù)會話恢復(fù)是指只要客戶端和服務(wù)器已經(jīng)通信過一次,它們就可以通過會話恢復(fù)的方式來跳過整個握手階段而直接進(jìn)行數(shù)據(jù)傳輸。SSL采用會話恢復(fù)的方式來減少SSL握手過程中造成的巨大開銷。此功能從之前的13步減少到6步,大大減少了開銷。 兩種會話機(jī)制
二者對比,主要是保存協(xié)商信息的位置與方式不同,類似與 http 中的 session 與 cookie。二者都存在的情況下,(nginx 實(shí)現(xiàn))優(yōu)先使用 session_ticket。 恢復(fù)過程 SSL記錄協(xié)議SSL記錄協(xié)議主要用于實(shí)現(xiàn)對數(shù)據(jù)的分塊、加密解密、壓縮解壓縮、完整性檢測和封裝各種高層協(xié)議。
主要包括:
|
|
|