網站的(de)前面的(de)https://與http://有何不(bù)同?
發布時(shí)間:2022/08/13
最近有客戶反饋,注意浏覽器左上(shàng)角已經全部出(chū)現了(le/liǎo)一(yī / yì /yí)把綠色鎖,這(zhè)把鎖表明該網站已經使用了(le/liǎo) HTTPS 進行保護。仔細觀察,會發現這(zhè)些網站已經全站使用 HTTPS。同時(shí),iOS 9 系統默認把所有的(de) http 請求都改爲(wéi / wèi) HTTPS 請求。随着互聯網的(de)發展,現代互聯網正在(zài)逐漸進入全站 HTTPS 時(shí)代。
全站 HTTPS 能夠帶來(lái)怎樣的(de)優勢?HTTPS 的(de)原理又是(shì)什麽?
爲(wéi / wèi)了(le/liǎo)解答大(dà)家的(de)困惑,騰訊TEG架構平台部靜态加速組高級工程師劉強,爲(wéi / wèi)大(dà)家綜合參考多種資料并經過實踐驗證,探究 HTTPS 的(de)基礎原理,分析基本的(de) HTTPS 通信過程,迎接全站 HTTPS 的(de)來(lái)臨。
1.HTTPS 基礎
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議 它是(shì)一(yī / yì /yí)個(gè)安全通信通道(dào),它基于(yú)HTTP開發,用于(yú)在(zài)客戶計算機和(hé / huò)服務器之(zhī)間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來(lái)說(shuō)它是(shì)HTTP的(de)安全版,是(shì)使用 TLS/SSL 加密的(de) HTTP 協議。
HTTP 協議采用明文傳輸信息,存在(zài)信息竊聽、信息篡改和(hé / huò)信息劫持的(de)風險,而(ér)協議 TLS/SSL 具有身份驗證、信息加密和(hé / huò)完整性校驗的(de)功能,可以(yǐ)避免此類問題。
TLS/SSL 全稱安全傳輸層協議 Transport Layer Security, 是(shì)介于(yú) TCP 和(hé / huò) HTTP 之(zhī)間的(de)一(yī / yì /yí)層安全協議,不(bù)影響原有的(de) TCP 協議和(hé / huò) HTTP 協議,所以(yǐ)使用 HTTPS 基本上(shàng)不(bù)需要(yào / yāo)對 HTTP 頁面進行太多的(de)改造。
2.TLS/SSL 原理
HTTPS 協議的(de)主要(yào / yāo)功能基本都依賴于(yú) TLS/SSL 協議,本節分析安全協議的(de)實現原理。
TLS/SSL 的(de)功能實現主要(yào / yāo)依賴于(yú)三類基本算法:散列函數 Hash、對稱加密和(hé / huò)非對稱加密,其利用非對稱加密實現身份認證和(hé / huò)密鑰協商,對稱加密算法采用協商的(de)密鑰對數據加密,基于(yú)散列函數驗證信息的(de)完整性。
散列函數 Hash,常見的(de)有 MD5、SHA1、SHA256,該類函數特點是(shì)函數單向不(bù)可逆、對輸入非常敏感、輸出(chū)長度固定,針對數據的(de)任何修改都會改變散列函數的(de)結果,用于(yú)防止信息篡改并驗證數據的(de)完整性;對稱加密,常見的(de)有 AES-CBC、DES、3DES、AES-GCM等,相同的(de)密鑰可以(yǐ)用于(yú)信息的(de)加密和(hé / huò)解密,掌握密鑰才能獲取信息,能夠防止信息竊聽,通信方式是(shì)1對1;非對稱加密,即常見的(de) RSA 算法,還包括 ECC、DH 等算法,算法特點是(shì),密鑰成對出(chū)現,一(yī / yì /yí)般稱爲(wéi / wèi)公鑰(公開)和(hé / huò)私鑰(保密),公鑰加密的(de)信息隻能私鑰解開,私鑰加密的(de)信息隻能公鑰解開。因此掌握公鑰的(de)不(bù)同客戶端之(zhī)間不(bù)能互相解密信息,隻能和(hé / huò)掌握私鑰的(de)服務器進行加密通信,服務器可以(yǐ)實現1對多的(de)通信,客戶端也(yě)可以(yǐ)用來(lái)驗證掌握私鑰的(de)服務器身份。
在(zài)信息傳輸過程中,散列函數不(bù)能單獨實現信息防篡改,因爲(wéi / wèi)明文傳輸,中間人(rén)可以(yǐ)修改信息之(zhī)後重新計算信息摘要(yào / yāo),因此需要(yào / yāo)對傳輸的(de)信息以(yǐ)及信息摘要(yào / yāo)進行加密;對稱加密的(de)優勢是(shì)信息傳輸1對1,需要(yào / yāo)共享相同的(de)密碼,密碼的(de)安全是(shì)保證信息安全的(de)基礎,服務器和(hé / huò) N 個(gè)客戶端通信,需要(yào / yāo)維持 N 個(gè)密碼記錄,且缺少修改密碼的(de)機制;非對稱加密的(de)特點是(shì)信息傳輸1對多,服務器隻需要(yào / yāo)維持一(yī / yì /yí)個(gè)私鑰就(jiù)能夠和(hé / huò)多個(gè)客戶端進行加密通信,但服務器發出(chū)的(de)信息能夠被所有的(de)客戶端解密,且該算法的(de)計算複雜,加密速度慢。
結合三類算法的(de)特點,TLS 的(de)基本工作方式是(shì),客戶端使用非對稱加密與服務器進行通信,實現身份驗證并協商對稱加密使用的(de)密鑰,然後對稱加密算法采用協商密鑰對信息以(yǐ)及信息摘要(yào / yāo)進行加密通信,不(bù)同的(de)節點之(zhī)間采用的(de)對稱密鑰不(bù)同,從而(ér)可以(yǐ)保證信息隻能通信雙方獲取。
3.PKI 體系 3.1 RSA 身份驗證的(de)隐患
身份驗證和(hé / huò)密鑰協商是(shì) TLS 的(de)基礎功能,要(yào / yāo)求的(de)前提是(shì)合法的(de)服務器掌握着對應的(de)私鑰。但 RSA 算法無法确保服務器身份的(de)合法性,因爲(wéi / wèi)公鑰并不(bù)包含服務器的(de)信息,存在(zài)安全隐患:
客戶端 C 和(hé / huò)服務器 S 進行通信,中間節點 M 截獲了(le/liǎo)二者的(de)通信;節點 M 自己計算産生一(yī / yì /yí)對公鑰 pub_M 和(hé / huò)私鑰 pri_M;C 向 S 請求公鑰時(shí),M 把自己的(de)公鑰 pub_M 發給了(le/liǎo) C;C 使用公鑰 pub_M 加密的(de)數據能夠被 M 解密,因爲(wéi / wèi) M 掌握對應的(de)私鑰 pri_M,而(ér) C 無法根據公鑰信息判斷服務器的(de)身份,從而(ér) C 和(hé / huò) M 之(zhī)間建立了(le/liǎo)”可信”加密連接;中間節點 M 和(hé / huò)服務器S之(zhī)間再建立合法的(de)連接,因此 C 和(hé / huò) S 之(zhī)間通信被M完全掌握,M 可以(yǐ)進行信息的(de)竊聽、篡改等操作。
另外,服務器也(yě)可以(yǐ)對自己的(de)發出(chū)的(de)信息進行否認,不(bù)承認相關信息是(shì)自己發出(chū)。
因此該方案下至少存在(zài)兩類問題:中間人(rén)攻擊和(hé / huò)信息抵賴。
3.2 身份驗證-CA 和(hé / huò)證書
解決上(shàng)述身份驗證問題的(de)關鍵是(shì)确保獲取的(de)公鑰途徑是(shì)合法的(de),能夠驗證服務器的(de)身份信息,爲(wéi / wèi)此需要(yào / yāo)引入權威的(de)第三方機構 CA。CA 負責核實公鑰的(de)擁有者的(de)信息,并頒發認證”證書”,同時(shí)能夠爲(wéi / wèi)使用者提供證書驗證服務,即 PKI 體系。
基本的(de)原理爲(wéi / wèi),CA 負責審核信息,然後對關鍵信息利用私鑰進行”簽名”,公開對應的(de)公鑰,客戶端可以(yǐ)利用公鑰驗證簽名。CA 也(yě)可以(yǐ)吊銷已經簽發的(de)證書,基本的(de)方式包括兩類 CRL 文件和(hé / huò) OCSP。CA 使用具體的(de)流程如下:
a.服務方 S 向第三方機構CA提交公鑰、組織信息、個(gè)人(rén)信息(域名)等信息并申請認證;
b.CA 通過線上(shàng)、線下等多種手段驗證申請者提供信息的(de)真實性,如組織是(shì)否存在(zài)、企業是(shì)否合法,是(shì)否擁有域名的(de)所有權等;
c.如信息審核通過,CA 會向申請者簽發認證文件-證書。
證書包含以(yǐ)下信息:申請者公鑰、申請者的(de)組織信息和(hé / huò)個(gè)人(rén)信息、簽發機構 CA 的(de)信息、有效時(shí)間、證書序列号等信息的(de)明文,同時(shí)包含一(yī / yì /yí)個(gè)簽名;
簽名的(de)産生算法:首先,使用散列函數計算公開的(de)明文信息的(de)信息摘要(yào / yāo),然後,采用 CA 的(de)私鑰對信息摘要(yào / yāo)進行加密,密文即簽名;
d.客戶端 C 向服務器 S 發出(chū)請求時(shí),S 返回證書文件;
e.客戶端 C 讀取證書中的(de)相關的(de)明文信息,采用相同的(de)散列函數計算得到(dào)信息摘要(yào / yāo),然後,利用對應 CA 的(de)公鑰解密簽名數據,對比證書的(de)信息摘要(yào / yāo),如果一(yī / yì /yí)緻,則可以(yǐ)确認證書的(de)合法性,即公鑰合法;
f.客戶端然後驗證證書相關的(de)域名信息、有效時(shí)間等信息;
g.客戶端會内置信任 CA 的(de)證書信息(包含公鑰),如果CA不(bù)被信任,則找不(bù)到(dào)對應 CA 的(de)證書,證書也(yě)會被判定非法。
在(zài)這(zhè)個(gè)過程注意幾點:
a.申請證書不(bù)需要(yào / yāo)提供私鑰,确保私鑰永遠隻能服務器掌握;
b.證書的(de)合法性仍然依賴于(yú)非對稱加密算法,證書主要(yào / yāo)是(shì)增加了(le/liǎo)服務器信息以(yǐ)及簽名;
c.内置 CA 對應的(de)證書稱爲(wéi / wèi)根證書,頒發者和(hé / huò)使用者相同,自己爲(wéi / wèi)自己簽名,即自簽名證書;
d.證書=公鑰+申請者與頒發者信息+簽名;