標籤:

理解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 協議的實現需要用到的幾類演算法

對稱加密

常用的加密演算法:DESAES ,RC2,RC4

優點:演算法公開、計算量小、加密速度快、加密效率高。

缺點:交易雙方都使用同樣鑰匙,安全性得不到保證。

非對稱加密技術

常用的非對稱加密演算法:RSA,DSA,Diffie-Hellman

優點:安全性高

缺點:速度慢

完整性驗證演算法

HASH演算法:MD5SHA1SHA256

用作校驗消息的完整性

SSL協議構成

  1. 第一層是Record Protocol, 用於定義傳輸格式。
  2. 第二層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從現在開始發送的消息都是加密過的

b. Client發送Finishd,包含了前面所有握手消息的hash,可以讓server驗證握手過程是否被第三方篡改

c. 服務端發送ChangeCipherSpec,指示Client從現在開始發送的消息都是加密過的

d. Server發送Finishd,包含了前面所有握手消息的hash,可以讓client驗證握手過程是否被第三方篡改,並且證明自己是Certificate密鑰的擁有者,即證明自己的身份

HTTPS完整建立連接過程,如下圖

  1. 首先建立tcp 握手連接
  2. 進行ssl 協議的握手密鑰交換(Handshake protocal)
  3. 然後通過共同約定的密鑰開始通信

上文說到的證書是個什麼玩意兒

證書的作用就是,我和服務端通信,我怎麼知道這個服務端是我要真正通信的服務端呢. 打個不恰當的比方:

你在某寶購物,到了結算頁面,你消費了100萬,輸入銀行卡賬號和密碼付款,但是當你付款結束以後,你發現賬戶少了100萬,但是賬戶頁面還是顯示未付款,你去打某寶客服,客服說你被別人盜號了100萬沒支付到我某寶,注意:這裡面存在兩種可能性

  1. 一個是有可能遭到了中間人攻擊(用戶名和密碼被黑客截獲)
  2. 某寶收了你的錢,假裝不承認,(抵賴)

申請和發放證書流程如下:

  1. 服務方 Server 向第三方機構CA提交公鑰、組織信息、個人信息(域名)等信息並申請認證;
  2. CA通過線上、線下等多種手段驗證申請者提供信息的真實性,如組織是否存在、企業是否合法,是否擁有域名的所有權等;
  3. 如信息審核通過,CA會向申請者簽發認證文件-證書。證書包含以下信息:申請者公鑰、申請者的組織信息和個人信息、簽發機構 CA的信息、有效時間、證書序列號等信息的明文,同時包含一個簽名; 簽名的產生演算法:首先,使用散列函數計算公開的明文信息的信息摘要,然後,採用 CA的私鑰對信息摘要進行加密,密文即簽名;
  4. 客戶端 Client 向伺服器 Server 發出請求時,Server 返回證書文件;
  5. 客戶端 Client 讀取證書中的相關的明文信息,採用相同的散列函數計算得到信息摘要,然後,利用對應 CA的公鑰解密簽名數據,對比證書的信息摘要,如果一致,則可以確認證書的合法性,即公鑰合法;
  6. 客戶端還會驗證證書相關的域名信息、有效時間等信息; 客戶端會內置信任CA的證書信息(包含公鑰),如果CA不被信任,則找不到對應 CA的證書,證書也會被判定非法。

證書鏈

  1. 伺服器證書 server.pem 的簽發者為中間證書機構 inter,inter 根據證書 inter.pem 驗證 server.pem 確實為自己簽發的有效證書
  2. 中間證書 inter.pem 的簽發 CA 為 root,root 根據證書 root.pem 驗證 inter.pem 為自己簽發的合法證書;
  3. 客戶端內置信任 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 |