理解HTTPS
轉自:
一文完全理解HTTPS
http通信有什麼問題呢
1. 可能被竊聽
- HTTP 本身不具備加密的功能,HTTP 報文使用明文方式發送
- 由於互聯網是由聯通世界各個地方的網路設施組成,所有發送和接收經過某些設備的數據都可能被截獲或窺視。(例如大家都熟悉的抓包工具:Wireshark),即使經過加密處理,也會被窺視是通信內容,只是可能很難或者無法破解出報文的信息而已
2. 認證問題
- 無法確認你發送到的伺服器就是真正的目標伺服器(可能伺服器是偽裝的)
- 無法確定返回的客戶端是否是按照真實意圖接收的客戶端(可能是偽裝的客戶端)
- 無法確定正在通信的對方是否具備訪問許可權,Web 伺服器上某些重要的信息,只想發給特定用戶
- 即使是無意義的請求也會照單全收。無法阻止海量請求下的 DoS 攻擊(Denial of Service,拒絕服務攻擊)。
3. 可能被篡改
請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊被稱為中間人攻擊(Man-in-the-Middle attack,MITM)。
HTTPS如何解決上述三個問題
HTTPS 只是在通信介面部分用 TLS(Transport Layer Security)協議代替而已。
SSL 和 TLS 的區別:
傳輸層安全性協議(英語:Transport Layer Security,縮寫作 TLS),及其前身安全套接層(Secure Sockets Layer,縮寫作 SSL)是一種安全協議,目的是為互聯網通信,提供安全及數據完整性保障。網景公司(Netscape)在1994年推出首版網頁瀏覽器,網景導航者時,推出HTTPS協議,以SSL進行加密,這是SSL的起源。IETF將SSL進行標準化,1999年公布第一版TLS標準文件。隨後又公布RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)。以下就簡稱SSL
TLS是SSL的標準. HTTPS 就是 HTTP + SSL
SSL 協議
SSL 協議的實現需要用到的幾類演算法
對稱加密
常用的加密演算法:DES
、AES
,RC2
,RC4
非對稱加密技術
常用的非對稱加密演算法:RSA
,DSA
,Diffie-Hellman
缺點:速度慢
完整性驗證演算法
HASH演算法:MD5
,SHA1
,SHA256
SSL協議構成
- 第一層是Record Protocol, 用於定義傳輸格式。
- 第二層Handshake Protocol,它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。
工作方式:
- 客戶端使用非對稱加密與伺服器進行通信,實現身份驗證並協商對稱加密使用的密鑰,
- 然後採用協商密鑰對信息進行加密通信,不同的節點之間採用的對稱密鑰不同,從而可以保證對稱密鑰的安全。
SSL密鑰協商的過程如下
點擊查看大圖
來源
詳細描述下流程,主要分為四大步驟(此處略繁瑣,不關注細節的可以先略過):
1. client_hello 過程
客戶端發起請求,以明文傳輸請求信息,包含版本信息,加密套件候選列表,壓縮演算法候選列表,隨機數,擴展欄位等信息,相關信息如下:
- 版本信息: 支持的最高TSL協議版本version,從低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,當前基本不再使用低於 TLSv1 的版本
- 加密套件候選列表(cipher suite): 認證演算法 Au (身份驗證)、密鑰交換演算法 KeyExchange(密鑰協商)、對稱加密演算法 Enc (信息加密)和信息摘要 Mac(完整性校驗);
- 壓縮演算法候選列表:支持的壓縮演算法 compression methods 列表,用於後續的信息壓縮傳輸;
- 隨機數:隨機數就是上圖裡的RNc,用於後續生成協商密鑰;
- 協商數據:支持協議與演算法的相關參數以及其它輔助信息等,常見的 SNI 就屬於擴展欄位,後續單獨討論該欄位作用。
2. server_hello 過程
- 服務端返回協商的信息結果,包括選擇使用的協議版本version,選擇的加密套件 cipher suite,選擇的壓縮演算法 compression method、隨機數 RNs等,其中隨機數用於後續的密鑰協商;
- 伺服器證書鏈,用於身份校驗和密鑰交換
- 通知客戶端server-hello 結束,請求客戶端的證書和密鑰
3. 證書校驗,協商最後通信密鑰
a. 客戶端驗證服務端證書的合法性,如果驗證通過才會進行後續通信,否則根據錯誤情況不同做出提示和操作,合法性驗證包括如下:
- 證書鏈的可信性 trusted certificate path
- 證書是否吊銷 revocation
- 有效期 expiry date,證書是否在有效時間範圍;
- 域名 domain,核查證書域名是否與當前的訪問域名匹配,匹配規則後續分析;
b. 客戶端發送客戶端證書,公鑰服務端驗證(過程同客戶端驗證)
c. 客戶端hash所有之前的消息,發送hash值和摘要,用客戶端的私鑰加密發送給服務端,服務端用客戶端的公鑰解密,驗證了服務端獲取的客戶端的公鑰和演算法是正確的d. 客戶端生成pms
,用服務端的公鑰加密加密後發送給服務端e. 客戶端和服務端同時計算出最終會話密鑰(MS
)
4. 驗證協商密鑰
a. Client發送ChangeCipherSpec
,指示Server從現在開始發送的消息都是加密過的
ChangeCipherSpec
,指示Client從現在開始發送的消息都是加密過的d. Server發送Finishd,包含了前面所有握手消息的hash,可以讓client驗證握手過程是否被第三方篡改,並且證明自己是Certificate密鑰的擁有者,即證明自己的身份
HTTPS完整建立連接過程,如下圖
- 首先建立tcp 握手連接
- 進行ssl 協議的握手密鑰交換(Handshake protocal)
- 然後通過共同約定的密鑰開始通信
上文說到的證書是個什麼玩意兒
證書的作用就是,我和服務端通信,我怎麼知道這個服務端是我要真正通信的服務端呢. 打個不恰當的比方:
你在某寶購物,到了結算頁面,你消費了100萬,輸入銀行卡賬號和密碼付款,但是當你付款結束以後,你發現賬戶少了100萬,但是賬戶頁面還是顯示未付款,你去打某寶客服,客服說你被別人盜號了100萬沒支付到我某寶,注意:這裡面存在兩種可能性
- 一個是有可能遭到了中間人攻擊(用戶名和密碼被黑客截獲)
- 某寶收了你的錢,假裝不承認,(抵賴)
申請和發放證書流程如下:
- 服務方 Server 向第三方機構CA提交公鑰、組織信息、個人信息(域名)等信息並申請認證;
- CA通過線上、線下等多種手段驗證申請者提供信息的真實性,如組織是否存在、企業是否合法,是否擁有域名的所有權等;
- 如信息審核通過,CA會向申請者簽發認證文件-證書。證書包含以下信息:申請者公鑰、申請者的組織信息和個人信息、簽發機構 CA的信息、有效時間、證書序列號等信息的明文,同時包含一個簽名; 簽名的產生演算法:首先,使用散列函數計算公開的明文信息的信息摘要,然後,採用 CA的私鑰對信息摘要進行加密,密文即簽名;
- 客戶端 Client 向伺服器 Server 發出請求時,Server 返回證書文件;
- 客戶端 Client 讀取證書中的相關的明文信息,採用相同的散列函數計算得到信息摘要,然後,利用對應 CA的公鑰解密簽名數據,對比證書的信息摘要,如果一致,則可以確認證書的合法性,即公鑰合法;
- 客戶端還會驗證證書相關的域名信息、有效時間等信息; 客戶端會內置信任CA的證書信息(包含公鑰),如果CA不被信任,則找不到對應 CA的證書,證書也會被判定非法。
證書鏈
- 伺服器證書 server.pem 的簽發者為中間證書機構 inter,inter 根據證書 inter.pem 驗證 server.pem 確實為自己簽發的有效證書
- 中間證書 inter.pem 的簽發 CA 為 root,root 根據證書 root.pem 驗證 inter.pem 為自己簽發的合法證書;
- 客戶端內置信任 CA 的 root.pem 證書,因此伺服器證書 server.pem 的被信任。
伺服器證書、中間證書與根證書在一起組合成一條合法的證書鏈,證書鏈的驗證是自下而上的信任傳遞的過程。
證書的詳細了解,請詳細了解PKI體系
參考資料
- 詳解 HTTPS、TLS、SSL、HTTP區別和關係
- https 那些事兒
- WIKI傳輸層安全性協議
- 圖解TCP/IP
- 綠盟月刊SSL/TLS/WTLS原理
- how tls work
- SSL/TLS原理詳解
- PKI 基礎知識
推薦閱讀:
※為什麼要把網站升級到HTTPS
※浙大博士在阿里:曾想低頭離開,沒想到一干就停不下來……
※酷站推薦 - ssl.do - SSL.DO | SSL證書
※流量劫持背後:Google 在用「看不見」的方式保護你的隱私安全
※從零部署一個https網站
TAG:HTTPS |