詳解HTTPS、TLS、SSL
HTTPS、TLS、SSL
HTTP也稱作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被標示為SSL 3.1,TLS 1.1為SSL 3.2,TLS 1.2為SSL 3.3。下圖描述了在TCP/IP協議棧中TLS(各子協議)和HTTP的關系
回到頂部
二、HTTP和HTTPS協議的區別
1、HTTPS協議需要到證書頒發機構(Certificate Authority,簡稱CA)申請證書,一般免費證書很少,需要交費。
2、HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議。
3、HTTP和HTTPS使用的是完全不同的連接方式,使用的端口也不一樣,前者是80,後者是443。
4、HTTP的連接很簡單,是無狀態的。
5、HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP協議安全。
從上面可看出,HTTPS和HTTP協議相比提供了
· 數據完整性:內容傳輸經過完整性校驗
· 數據隱私性:內容經過對稱加密,每個連接生成一個唯一的加密密鑰
· 身份認證:第三方無法偽造服務端(客戶端)身份
其中,數據完整性和隱私性由TLS Record Protocol保證,身份認證由TLS Handshaking Protocols實現。
回到頂部三、證書
1、什麽是證書呢?
2、證書中包含什麽信息
證書信息:過期時間和序列號
所有者信息:姓名等
所有者公鑰
3、為什麽服務端要發送證書給客戶端
互聯網有太多的服務需要使用證書來驗證身份,以至於客戶端(操作系統或瀏覽器等)無法內置所有證書,需要通過服務端將證書發送給客戶端。
4、客戶端為什麽要驗證接收到的證書
中間人攻擊
5、客戶端如何驗證接收到的證書
為了回答這個問題,需要引入數字簽名(Digital Signature)。
將一段文本通過哈希(hash)和私鑰加密處理後生成數字簽名。
假設消息傳遞在Bob,Susan和Pat三人之間發生。Susan將消息連同數字簽名一起發送給Bob,Bob接收到消息後,可以這樣驗證接收到的消息就是Susan發送的
當然,這個前提是Bob知道Susan的公鑰。更重要的是,和消息本身一樣,公鑰不能在不安全的網絡中直接發送給Bob。
此時就引入了證書頒發機構(Certificate Authority,簡稱CA),CA數量並不多,Bob客戶端內置了所有受信任CA的證書。CA對Susan的公鑰(和其他信息)數字簽名後生成證書。
Susan將證書發送給Bob後,Bob通過CA證書的公鑰驗證證書簽名。
Bob信任CA,CA信任Susan, 使得 Bob信任Susan,信任鏈(Chain Of Trust)就是這樣形成的。
事實上,Bob客戶端內置的是CA的根證書(Root Certificate),HTTPS協議中服務器會發送證書鏈(Certificate Chain)給客戶端。
正式開始HTTPS的內容:
回到頂部四、HTTPS的基本原理
從上面可知,HTTPS能夠加密信息,以免敏感信息被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會采用HTTPS協議。
HTTPS其實是有兩部分組成:HTTP +SSL/ TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密後的數據。具體是如何進行加密,解密,驗證的,且看下圖。
1. 客戶端發起HTTPS請求
這個沒什麽好說的,就是用戶在瀏覽器裏輸入一個HTTPS網址,然後連接到server的443端口。
2. 服務端的配置
采用HTTPS協議的服務器必須要有一套數字證書,可以自己制作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
4. 客戶端解析證書
這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麽就生成一個隨機值。然後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5. 傳送加密信息
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6. 服務端解密信息
服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰(隨機值)通過某種算法混合在一起,這樣除非知道私鑰(隨機值),不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰(隨機值),所以只要加密算法夠彪悍,私鑰(隨機值)夠復雜,數據就夠安全。
7. 傳輸加密後的信息
這部分信息是服務端用私鑰(隨機值)加密後的信息,可以在客戶端被還原
8. 客戶端解密信息
客戶端用之前生成的私鑰(隨機值)解密服務端傳過來的信息,於是獲取了解密後的內容。整個過程第三方即使監聽到了數據,也束手無策。
回到頂部五、HTTPS的通信流程和握手過程
1、HTTPS對應的通信時序圖:
2、HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的具體描述如下:
1. 瀏覽器將自己支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,並將自己的身份信息以證書的形式發回給瀏覽器。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.瀏覽器獲得網站證書之後瀏覽器要做以下工作:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的HASH算法計算握手消息,並使用生成的隨機數對消息進行加密,最後將之前生成的所有信息發送給網站。
4.網站接收瀏覽器發來的數據之後要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密並計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通信數據將由之前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。
詳解HTTPS、TLS、SSL