https 顧名思義,就是安全版的 http。既然說 https 是安全的,那么為什么它安全呢?原因是相比于 http ,htttps 在 http 之下加了一層 SSL/TLS(Secure Socket Layer/Transport Layer Secure)。SSL/TLS 是用來加密傳輸信息的。
1、http發(fā)送的消息都是未經(jīng)過加密的,而且直接通過下層 TCP 直接發(fā)送。這樣如果有人在發(fā)送途中,截獲到信息,由于信息是未加密的,攻擊人輕易地就能得知信息的內(nèi)容。
2、而對于 https 來說,它并不是將信息直接交由 TCP 來發(fā)送。而需要經(jīng)過 SSL/TLS 層的加密,加密后的內(nèi)容,再由 TCP 來發(fā)送。相當(dāng)于在 TCP 層上,HTTP 之下,構(gòu)建了一層 SSL/TSL 。
3、這個加密過程中
- 首先,需要驗證數(shù)字證書是否簽發(fā)自可信的 CA(Certificate Agent) ,以此來驗證站點的合法性。
- 在確認站點是可信之后,client 和 server 會協(xié)商一個會話密鑰(session key)。會話密鑰(session key)來加密雙方通信信息。會話的加密一般采用對稱加密。目的是為了降低加密解密運算的復(fù)雜度
4、SSL/TLS 的加密對用戶是透明,感受的不到它的存在,在瀏覽體驗上和 http 并無二致。對于中間人,就算是截獲報文,由于沒有私鑰,無法對報文進行解密
SSL

https 通信的過程
步驟1,在端口號 443 建立 TCP 連接
步驟2,進行站點身份驗證,和加密方法的協(xié)商
步驟3,http 發(fā)送信息給 SSL ,SSL 使用協(xié)商的加密算法加密信息后,發(fā)送給 TCP
步驟4,接收使用協(xié)商的加密算法加密的信息,并解密后發(fā)給 http 層
步驟5,關(guān)閉 SSL 連接
步驟6,關(guān)閉 TCP 連接
下圖左側(cè)a為 http 連接建立過程,右側(cè)b為 https 連接建立過程

說一說關(guān)鍵步驟2
步驟 2 可以分為兩個步驟:
1、進行站點的身份認證
2、會話加密算法的協(xié)商、會話秘鑰的生成
在建立 TCP 連接后,就可以進行站點身份的驗證和會話內(nèi)容加密算法的協(xié)商。
在說明身份驗證的過程,需要先簡單了解一下由 CA 簽發(fā)的數(shù)字證書。 數(shù)字證書的一般形式(x.509 v3 certificate)如下圖所示。

來看一下知乎的證書chrome->開發(fā)者工具->security

包含了,證書序列號、證書過期時間、站點所有者、域名、公鑰、簽發(fā) CA和證書的簽名。
證書的簽名是用來驗證證書的完整性和防止被篡改。它生成過程是,通過一種非對稱加密算法(如RSA),使用私鑰對證書所有域進行加密運算后得到的一串?dāng)?shù)字簽名。
進行站點身份驗證的過程是這樣的:
首先,client 獲得 server 發(fā)來的數(shù)字證書。
然后驗證數(shù)字證書是否過期、是否簽發(fā)自可信的CA、證書是否完整是否被篡改,再驗證證書的發(fā)來站點和證書上的站是否一致。如果以上,驗證都通過。那么站點就是可信的??梢赃M一步協(xié)商,進行會話所需要的密鑰。然后使用此密鑰對會話內(nèi)容進行加密解密
首先,驗證數(shù)字證書
- 日期驗證(Date check),通過和證書中的過期字段對比,判斷證書是否有效
- 簽發(fā)者驗證(Signer trust check),判斷證書中的 CA 是否在本地 CA 信任列表上
- 簽名驗證(Signature check),通過使用證書中的公鑰和加密方法,對signature進行反向解密,來驗證證書的內(nèi)容是否和解密出的內(nèi)容一致
-
站點身份認證(Site identity check),將站點的域名和證書域名比較,來驗證數(shù)字證書發(fā)自可信任的站點
SSLhandshake
數(shù)字證書的簽名驗證中,使用的非對稱加密。signature = d(cert,private),通過使用公式 e(d(cert,private),pub) = cert,即可驗證證書的真?zhèn)巍?/p>
然后,協(xié)商對會話加密的密鑰
在上面那張圖中可以看到,client 在請求連接站點時,會向服務(wù)器請求數(shù)字證書,同時發(fā)送可選的加密方式。
站點在接收到請求后,會選擇一種加密方式。此時,client 和站點就擁有了加密和解密的密鑰。接下來,雙方的通信就可以使用這個協(xié)商的密鑰的進行加密。
一般情況下,對會話進行加密使用的是對稱加密。原因是對稱加密的加密和解密速度快于非對稱加密。
