深入淺出HTTPS基本原理

一、什么是HTTPS,TLS,SSL

HTTPS,也稱作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被標(biāo)示為SSL 3.1,TLS 1.1為SSL 3.2,TLS 1.2為SSL 3.3。下圖描述了在TCP/IP協(xié)議棧中TLS(各子協(xié)議)和HTTP的關(guān)系。

二、HTTP和HTTPS協(xié)議的區(qū)別

1、https協(xié)議需要到證書頒發(fā)機(jī)構(gòu)(Certificate Authority,簡(jiǎn)稱CA)申請(qǐng)證書,一般免費(fèi)證書很少,需要交費(fèi)。

2、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。

3、http和https使用的是完全不同的連接方式,使用的端口也不一樣,前者是80,后者是443。

4、http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的 。

5、HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議, 要比http協(xié)議安全。

從上面可看出,HTTPS和HTTP協(xié)議相比提供了

數(shù)據(jù)完整性:內(nèi)容傳輸經(jīng)過(guò)完整性校驗(yàn)

數(shù)據(jù)隱私性:內(nèi)容經(jīng)過(guò)對(duì)稱加密,每個(gè)連接生成一個(gè)唯一的加密密鑰

身份認(rèn)證:第三方無(wú)法偽造服務(wù)端(客戶端)身份

其中,數(shù)據(jù)完整性和隱私性由TLS Record Protocol保證,身份認(rèn)證由TLS Handshaking Protocols實(shí)現(xiàn)。

三、證書

1、什么是證書呢?

2、證書中包含什么信息

證書信息:過(guò)期時(shí)間和序列號(hào)

所有者信息:姓名等

所有者公鑰

3、為什么服務(wù)端要發(fā)送證書給客戶端

互聯(lián)網(wǎng)有太多的服務(wù)需要使用證書來(lái)驗(yàn)證身份,以至于客戶端(操作系統(tǒng)或?yàn)g覽器等)無(wú)法內(nèi)置所有證書,需要通過(guò)服務(wù)端將證書發(fā)送給客戶端。

4、客戶端為什么要驗(yàn)證接收到的證書

中間人攻擊

5、客戶端如何驗(yàn)證接收到的證書

為了回答這個(gè)問(wèn)題,需要引入數(shù)字簽名(Digital Signature)。

將一段文本通過(guò)哈希(hash)和私鑰加密處理后生成數(shù)字簽名。

假設(shè)消息傳遞在Bob,Susan和Pat三人之間發(fā)生。Susan將消息連同數(shù)字簽名一起發(fā)送給Bob,Bob接收到消息后,可以這樣驗(yàn)證接收到的消息就是Susan發(fā)送的

當(dāng)然,這個(gè)前提是Bob知道Susan的公鑰。更重要的是,和消息本身一樣,公鑰不能在不安全的網(wǎng)絡(luò)中直接發(fā)送給Bob。

此時(shí)就引入了證書頒發(fā)機(jī)構(gòu)(Certificate Authority,簡(jiǎn)稱CA),CA數(shù)量并不多, ? ? ? ? ? ? ?Bob客戶端內(nèi)置了所有受信任CA的證書。CA對(duì)Susan的公鑰(和其他信息)數(shù)字簽名后生成證書。

Susan將證書發(fā)送給Bob后,Bob通過(guò)CA證書的公鑰驗(yàn)證證書簽名。

Bob信任CA,CA信任Susan, 使得 Bob信任Susan,信任鏈(Chain Of Trust)就是這樣形成的。

事實(shí)上,Bob客戶端內(nèi)置的是CA的根證書(Root Certificate),HTTPS協(xié)議中服務(wù)器會(huì)發(fā)送證書鏈(Certificate Chain)給客戶端。

正式開(kāi)始HTTPS的內(nèi)容:

一、HTTPS的基本原理

從上面可知,HTTPS能夠加密信息,以免敏感信息被第三方獲取。所以很多銀行網(wǎng)站或電子郵箱等等安全級(jí)別較高的服務(wù)都會(huì)采用HTTPS協(xié)議。HTTPS其實(shí)是有兩部分組成:HTTP +SSL/ TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。具體是如何進(jìn)行加密,解密,驗(yàn)證的,且看下圖。

1. 客戶端發(fā)起HTTPS請(qǐng)求

這個(gè)沒(méi)什么好說(shuō)的,就是用戶在瀏覽器里輸入一個(gè)https網(wǎng)址,然后連接到server的443端口。

2. 服務(wù)端的配置

采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書則不會(huì)彈出提示頁(yè)面(startssl就是個(gè)不錯(cuò)的選擇,有1年的免費(fèi)服務(wù))。這套證書其實(shí)就是一對(duì)公鑰和私鑰。如果對(duì)公鑰和私鑰不太理解,可以想象成一把鑰匙和一個(gè)鎖頭,只是全世界只有你一個(gè)人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來(lái)的東西。

3. 傳送證書

這個(gè)證書其實(shí)就是公鑰,只是包含了很多信息,如證書的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等。

4. 客戶端解析證書

這部分工作是由客戶端的TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警告框,提示證書存在問(wèn)題。如果證書沒(méi)有問(wèn)題,那么就生成一個(gè)隨機(jī)值。然后用證書對(duì)該隨機(jī)值進(jìn)行加密。就好像上面說(shuō)的,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容。

5. 傳送加密信息

這部分傳送的是用證書加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。

6. 服務(wù)端解密信息

服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(私鑰),然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密。所謂對(duì)稱加密就是,將信息和私鑰(隨機(jī)值)通過(guò)某種算法混合在一起,這樣除非知道私鑰(隨機(jī)值),不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰(隨機(jī)值),所以只要加密算法夠彪悍,私鑰(隨機(jī)值)夠復(fù)雜,數(shù)據(jù)就夠安全。

7. 傳輸加密后的信息

這部分信息是服務(wù)端用私鑰(隨機(jī)值)加密后的信息,可以在客戶端被還原

8. 客戶端解密信息

客戶端用之前生成的私鑰(隨機(jī)值)解密服務(wù)端傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。整個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù),也束手無(wú)策。

二、HTTPS的通信流程和握手過(guò)程

1、HTTPS對(duì)應(yīng)的通信時(shí)序圖:

2、HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過(guò)程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議,更是一件經(jīng)過(guò)藝術(shù)家精心設(shè)計(jì)的藝術(shù)品,TLS/SSL中使用了非對(duì)稱加密,對(duì)稱加密以及HASH算法。握手過(guò)程的具體描述如下:

1. 瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。

2.網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。

3.瀏覽器獲得網(wǎng)站證書之后瀏覽器要做以下工作:

a) 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等),如果證書受信任,則瀏覽器欄里面會(huì)顯示一個(gè)小鎖頭,否則會(huì)給出證書不受信的提示。

b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼,并用證書中提供的公鑰加密。

c) 使用約定好的HASH算法計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。

4.網(wǎng)站接收瀏覽器發(fā)來(lái)的數(shù)據(jù)之后要做以下的操作:

a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來(lái)的握手消息,并驗(yàn)證HASH是否與瀏覽器發(fā)來(lái)的一致。

b) 使用密碼加密一段握手消息,發(fā)送給瀏覽器。

5.瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱加密算法進(jìn)行加密。

轉(zhuǎn)自:http://blog.csdn.net/kobejayandy/article/details/11545057

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容