首頁 >常見問題 >HTTPS通訊原理是什麼

HTTPS通訊原理是什麼

藏色散人
藏色散人原創
2020-07-02 09:03:404368瀏覽

HTTPS通訊原理是:HTTPS是“HTTP over SSL/TLS”,HTTPS相比HTTP多了一層“SSL/TLS”,HTTPS在傳輸資料之前需要客戶端與服務端之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。

HTTPS通訊原理是什麼

簡介:

#HTTP 協定(HyperText Transfer Protocol,超文本傳輸協定):是客戶端瀏覽器或其他程式與Web伺服器之間的應用層通訊協定。 HTTPS(全名為:HyperText Transfer Protocol over Secure Socket Layer),可以理解為HTTP SSL/TLS, 即HTTP 下加入SSL 層,HTTPS 的安全基礎是SSL,因此加密的詳細內容就需要SSL,用於安全的HTTP 數據傳輸。

HTTPS和HTTP的差別:

a. https協定需要到ca申請證書,一般免費證書很少,需要繳費。

b. http是超文本傳輸協議,訊息是明文傳輸;https 則是具有安全性的ssl加密傳輸協議。

c. http和https使用的是完全不同的連接方式,用的連接埠也不一樣,前者是80,後者是443。

d. http的連接很簡單,是無狀態的;HTTPS協議是由SSL HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

HTTPS的作用

      它的主要功能可分為兩種:一種是建立一個資訊安全通道,來確保資料傳輸的安全;另一種就是確認網站的真實性。

  a.一般意義上的https,就是伺服器有憑證。主要目的是確保伺服器就是他所聲稱的伺服器,這跟第一點一樣;服務端和客戶端之間的所有通訊,都是加密的。

  b. 具體講,是客戶端產生一個對稱的金鑰,透過伺服器的憑證來交換金鑰,也就是一般意義上的握手過程。這部分會在下面詳細介紹。

  c. 接下來所有的資訊往來都是加密的。第三方即使截獲,也沒有任何意義,因為他沒有金鑰,當然竄改也就沒有什麼意義了。

  d.少許對客戶端有要求的情況下,會要求客戶端也必須有一個憑證。

為何需要HTTPS協定:

#HTTP協定是沒有加密的明文傳輸協議,如果Client(APP、瀏覽器)採用HTTP傳輸數據,則會洩漏傳輸內容,可能被中間人劫持,修改傳輸的內容。如下圖所示是典型的APP HTTP通訊被業者劫持修改,插入廣告:

     

   

#######CC ########為了保護使用者的資訊安全、保護自己的商業利益,減少攻擊面,我們需要保障通訊頻道的安全,採用開發方便的HTTPS是比較好的方式。 ######

HTTPS通訊原理

HTTPS是HTTP over SSL/TLS,HTTP是應用層協議,TCP是傳輸層協議,在應用層和傳輸層之間,增加了一個安全通訊端SSL/TLS:

#如上圖所示HTTPS 相比HTTP 多了一層SSL /TLS,SSL/TLS層負責客戶端與伺服器之間的加解密演算法協商、金鑰交換、通訊連線的建立。

HTTPS在傳輸資料之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。 TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH演算法。握手過程如下:

(1).client_hello

客戶端發起請求,以明文傳送請求訊息,包含版本訊息,加密套件候選列表,壓縮演算法候選列表,隨機數,擴展字段等信息,相關信息如下:

• 支持的最高TSL協議版本version,從低到高依次SSLv2 SSLv3 TLSv1 TLSv1 .1 TLSv1.2,目前基本上不再使用低於TLSv1 的版本;

# • 客戶端支援的加密套件cipher suites 列表, 每個加密套件對應前面TLS 原理中的四個功能的組合:認證演算法Au (驗證)、金鑰交換演算法KeyExchange(金鑰協商)、對稱加密演算法Enc (資訊加密)和資訊摘要Mac(完整性校驗);

#  • 支援的壓縮演算法compression methods 列表,用於後續的資訊壓縮傳輸;

  • 隨機數random_C,用於後續的密鑰的產生;

  • 擴充字段extensions,支援協定與演算法的相關參數以及其它輔助資訊等,常見的SNI 就屬於擴充字段,後續單獨討論該字段作用。

(2).server_hello server_certificate sever_hello_done

## • server_hello, 服務端傳回協商的資訊結果,包括選擇使用的協定版本version,所選的加密套件cipher suite,選擇的壓縮演算法compression method、隨機數random_S 等,其中隨機數用於後續的金鑰協商;

 • server_certificates, 伺服器端配置對應的憑證鏈,用於驗證與金鑰交換;

 • server_hello_done,通知客戶端server_hello 訊息傳送結束;

(3) .證書校驗

客戶端驗證證書的合法性,如果驗證通過才會進行後續通信,否則根據錯誤情況不同做出提示和操作,合法性驗證包括如下:

• [憑證鏈]的可信任性trusted certificate path,方法如前文所述;

• 憑證是否撤銷revocation,有兩類方式離線CRL 與線上OCSP,不同的客戶行為會不同;

• 有效期限expiry date,憑證是否在有效時間範圍;

• 網域domain,核查憑證網域是否與目前的存取網域名稱匹配,匹配規則後續分析;

(4 ).client_key_exchange change_cipher_spec encrypted_handshake_message

##(a) client_key_exchange,合法性驗證通過之後,客戶端計算產生隨機數字Pre-master,並用證書公鑰加密,發送給伺服器;


##################### ##########(b) 此時客戶端已經取得全部的計算協商金鑰所需的資訊:兩個明文隨機數random_C 和random_S 與自己計算產生的Pre-master,計算得到協商密鑰;############ enc_key=Fuc(random_C, random_S, Pre-Master)############ (c) change_cipher_spec,客戶端通知伺服器後續的通訊都採用協商的通訊金鑰和加密演算法進行加密通訊;############(d) encrypted_handshake_message,結合先前所有通訊參數的hash 值與其它相關資訊產生一段數據,採用協商密鑰session secret 與演算法進行加密,然後發送給伺服器用於資料與握手驗證;#############(5).change_cipher_spec encrypted_handshake_message############(#######( a) 伺服器以私鑰解密加密的Pre-master 數據,基於先前交換的兩個明文隨機數random_C 和random_S,計算得到協商金鑰:enc_key=Fuc(random_C, random_S, Pre-Master);#### ########(b) 計算先前所有接收資訊的hash 值,然後解密用戶端發送的encrypted_handshake_message,驗證資料和金鑰正確性;############(c ) change_cipher_spec, 驗證通過之後,伺服器同樣發送change_cipher_spec 以告知客戶端後續的通訊都採用協商的金鑰與演算法進行加密通訊;###########(d) encrypted_handshake_message, 伺服器也結合所有目前的通訊參數資訊產生一段資料並採用協商金鑰enc_key與演算法加密並傳送到客戶端;############(6).握手結束######## ####客戶端計算所有接收資訊的hash 值,並採用協商金鑰解密encrypted_handshake_message,驗證伺服器傳送的資料和金鑰,驗證透過則握手完成;############( 7).加密通訊############開始使用協商金鑰與演算法進行加密通訊###。時序圖如下:############################

驗證憑證

在(3)憑證校驗中,客戶端會對服務端發送過來的憑證做校驗,下面我們具體看下該流程做了哪些工作

1、驗證頒發者、有效期限

2、驗證是否在信任清單中

2、驗證合法性

驗證憑證時,客戶端讀取憑證中的相關的明文訊息,採用相同的雜湊函數計算得到訊息摘要,然後,利用對應CA的公鑰(從本地取出)解密簽名數據,對比證書的資訊摘要,如果一致,則可以確認證書的合法性,即公鑰合法;

證書內容:

申請者公鑰、申請者的組織資訊和個人資訊、簽發機構CA的資訊、有效時間、證書序號等資訊的明文,同時包含一個簽名;

簽名的產生:使用雜湊函數計算公開的明文資訊的資訊摘要,然後,採用CA的私鑰對資訊摘要進行加密,密文即簽名。

    


Tips;

1、Client使用Server傳送的公鑰加密數據,將加密資料傳送給Server,Server使用私鑰解密,是為非對稱加密

2、當Client、Server都掌握了協商金鑰enc_key後,雙方均用此金鑰進行加密、解密,是為對稱加密

加密演算法概述

 TLS/SSL的功能實作主要依賴三類基本演算法:雜湊函數Hash、對稱加密和非對稱加密,其利用非對稱加密實現身份認證和金鑰協商,對稱加密演算法採用協商的金鑰對資料加密,基於雜湊函數驗證資訊的完整性。


#1、對稱加密

有串流、分組兩種,加密和解密都是使用的同一個金鑰。

例如:DES、AES-GCM、ChaCha20-Poly1305等

#

2、非對稱加密

加密使用的金鑰和解密使用的金鑰是不相同的,分別稱為:公鑰、私鑰,公鑰和演算法都是公開的,私鑰是保密的。非對稱加密演算法效能較低,但是安全性超強,由於其加密特性,非對稱加密演算法能加密的資料長度也是有限的。

例如:RSA、DSA、ECDSA、 DH、ECDHE

3、雜湊演算法

##將任意長度的資訊轉換為較短的固定長度的值,通常其長度要比資訊小得多,且演算法不可逆。

例如:MD5、SHA-1、SHA-2、SHA-256 等

4、數位簽章

簽名就是在訊息的後面再加上一段內容(訊息經過hash後的數值),可以證明訊息沒有被修改過。 hash值一般都會加密後(也就是簽章)再和訊息一起傳送,以確保這個hash值不會被修改。

雙向驗證:

伺服器也可以要求驗證客戶端,也就是雙向認證,可以在流程2要傳送client_certificate_request 訊息,客戶端在過程4中先發送client_certificate與certificate_verify_message 訊息,憑證的驗證方式基本上相同,certificate_verify_message 是採用client的私鑰加密的一段基於已經協商的通訊資訊得到數據,伺服器可以採用對應的公鑰解密並驗證。

#

以上是HTTPS通訊原理是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn