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存炮、這個加密過程中
- 首先,需要驗(yàn)證數(shù)字證書是否簽發(fā)自可信的 CA(Certificate Agent) 蜈漓,以此來驗(yàn)證站點(diǎn)的合法性穆桂。
- 在確認(rèn)站點(diǎn)是可信之后,client 和 server 會協(xié)商一個會話密鑰(session key)融虽。會話密鑰(session key)來加密雙方通信信息享完。會話的加密一般采用對稱加密。目的是為了降低加密解密運(yùn)算的復(fù)雜度
4、SSL/TLS 的加密對用戶是透明,感受的不到它的存在零聚,在瀏覽體驗(yàn)上和 http 并無二致。對于中間人,就算是截獲報文苛预,由于沒有私鑰句狼,無法對報文進(jìn)行解密
SSL
https 通信的過程
步驟1,在端口號 443 建立 TCP 連接
步驟2热某,進(jìn)行站點(diǎn)身份驗(yàn)證腻菇,和加密方法的協(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舍扰、進(jìn)行站點(diǎn)的身份認(rèn)證
2、會話加密算法的協(xié)商希坚、會話秘鑰的生成
在建立 TCP 連接后边苹,就可以進(jìn)行站點(diǎn)身份的驗(yàn)證和會話內(nèi)容加密算法的協(xié)商。
在說明身份驗(yàn)證的過程裁僧,需要先簡單了解一下由 CA 簽發(fā)的數(shù)字證書个束。 數(shù)字證書的一般形式(x.509 v3 certificate)如下圖所示。
來看一下知乎的證書chrome->開發(fā)者工具->security
包含了聊疲,證書序列號茬底、證書過期時間、站點(diǎn)所有者售睹、域名桩警、公鑰、簽發(fā) CA和證書的簽名昌妹。
證書的簽名是用來驗(yàn)證證書的完整性和防止被篡改捶枢。它生成過程是,通過一種非對稱加密算法(如RSA)飞崖,使用私鑰對證書所有域進(jìn)行加密運(yùn)算后得到的一串?dāng)?shù)字簽名烂叔。
進(jìn)行站點(diǎn)身份驗(yàn)證的過程是這樣的:
首先,client 獲得 server 發(fā)來的數(shù)字證書固歪。
然后驗(yàn)證數(shù)字證書是否過期蒜鸡、是否簽發(fā)自可信的CA、證書是否完整是否被篡改牢裳,再驗(yàn)證證書的發(fā)來站點(diǎn)和證書上的站是否一致逢防。如果以上,驗(yàn)證都通過蒲讯。那么站點(diǎn)就是可信的忘朝。可以進(jìn)一步協(xié)商判帮,進(jìn)行會話所需要的密鑰局嘁。然后使用此密鑰對會話內(nèi)容進(jìn)行加密解密
首先溉箕,驗(yàn)證數(shù)字證書
- 日期驗(yàn)證(Date check),通過和證書中的過期字段對比悦昵,判斷證書是否有效
- 簽發(fā)者驗(yàn)證(Signer trust check)肴茄,判斷證書中的 CA 是否在本地 CA 信任列表上
- 簽名驗(yàn)證(Signature check),通過使用證書中的公鑰和加密方法但指,對signature進(jìn)行反向解密寡痰,來驗(yàn)證證書的內(nèi)容是否和解密出的內(nèi)容一致
-
站點(diǎn)身份認(rèn)證(Site identity check),將站點(diǎn)的域名和證書域名比較枚赡,來驗(yàn)證數(shù)字證書發(fā)自可信任的站點(diǎn)
數(shù)字證書的簽名驗(yàn)證中氓癌,使用的非對稱加密。signature = d(cert贫橙,private)贪婉,通過使用公式 e(d(cert,private)卢肃,pub) = cert疲迂,即可驗(yàn)證證書的真?zhèn)巍?/p>
然后,協(xié)商對會話加密的密鑰
在上面那張圖中可以看到莫湘,client 在請求連接站點(diǎn)時尤蒿,會向服務(wù)器請求數(shù)字證書,同時發(fā)送可選的加密方式幅垮。
站點(diǎn)在接收到請求后腰池,會選擇一種加密方式。此時忙芒,client 和站點(diǎn)就擁有了加密和解密的密鑰示弓。接下來,雙方的通信就可以使用這個協(xié)商的密鑰的進(jìn)行加密呵萨。
一般情況下奏属,對會話進(jìn)行加密使用的是對稱加密。原因是對稱加密的加密和解密速度快于非對稱加密潮峦。