HTTPS加密原理


http(超文本傳輸協議)

一種屬於應用層的協議

缺點:

  1. 通信使用明文(不加密),內容可能會被竊聽
  2. 不驗證通信方的身份,因此有可能遭遇偽裝
  3. 無法證明報文的完整性,所以有可能已遭篡改

優點:

  1. 傳輸速度快

https

HTTPS 並非是應用層的一種新協議。只是 HTTP 通信接口部分用 SSL (安全套接字層)和TLS (安全傳輸層協議)代替而已。即添加了加密及認證機制的 HTTP 稱為 HTTPS ( HTTP Secure )。

HTTP + 加密 + 認證 + 完整性保護 = HTTPS

使用兩把密鑰的公開密鑰加密

公開密鑰加密使用一對非對稱的密鑰。一把叫做私鑰,另一把叫做公鑰。私鑰不能讓其他任何人知道,而公鑰則可以隨意發布,任何人都可以獲得。使用公鑰加密方式,發送密文的一方使用對方的公鑰進行加密處理,對方收到被加密的信息后,再使用自己的私鑰進行解密。利用這種方式,不需要發送用來解密的私鑰,也不必擔心密鑰被攻擊者竊聽而盜走。

過程

①服務器把自己的公鑰登錄至數字證書認證機構。
②數字證書機構把自己的私有密鑰向服務器的公開密碼部署數字簽名並頒發公鑰證書。
③客戶端拿到服務器的公鑰證書后,使用數字證書認證機構的公開密鑰,向數字證書認證機構驗證公鑰證書上的數字簽名。以確認服務器公鑰的真實性。
④使用服務器的公開密鑰對報文加密后發送。
⑤服務器用私有密鑰對報文解密。

HTTPS通信的步驟

①客戶端發送報文進行SSL通信。報文中包含客戶端支持的SSL的指定版本、加密組件列表(加密算法及密鑰長度等)。
②服務器應答,並在應答報文中包含SSL版本以及加密組件。服務器的加密組件內容是從接受到的客戶端加密組件內篩選出來的。
③服務器發送報文,報文中包含公開密鑰證書。
④服務器發送報文通知客戶端,最初階段SSL握手協商部分結束。
⑤SSL第一次握手結束之后,客戶端發送一個報文作為回應。報文中包含通信加密中使用的一種被稱Pre-master secret的隨機密碼串。該密碼串已經使用服務器的公鑰加密。
⑥客戶端發送報文,並提示服務器,此后的報文通信會采用Pre-master secret密鑰加密。
⑦客戶端發送Finished報文。該報文包含連接至今全部報文的整體校驗值。這次握手協商是否能夠完成成功,要以服務器是否能夠正確解密該報文作為判定標准。
⑧服務器同樣發送Change Cipher Spec報文。
⑨服務器同樣發送Finished報文。
⑩服務器和客戶端的Finished報文交換完畢之后,SSL連接就算建立完成。
⑪應用層協議通信,即發送HTTP響應。
⑫最后由客戶端斷開鏈接。斷開鏈接時,發送close_nofify報文。

一、什么是HTTPS

在說HTTPS之前先說說什么是HTTP,HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全。為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之后IETF對SSL 3.0進行了升級,於是出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支持,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀的事情,SSL最后一個版本是3.0,今后TLS將會繼承SSL優良血統繼續為我們進行加密服務。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。
\n

二、HTTPS到底安全嗎?

這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣HTTPS的使用,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS,用戶只要在搜索前用Google帳號登錄,之后所有的搜索操作都將使用TLS協議加密,
\n

三、HTTPS的工作原理

HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:
1.瀏覽器將自己支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,並將自己的身份信息以證書的形式發回給瀏覽器。證書里面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.獲得網站證書之后瀏覽器要做以下工作:
a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,並用證書中提供的公鑰加密。
c) 使用約定好的HASH計算握手消息,並使用生成的隨機數對消息進行加密,最后將之前生成的所有信息發送給網站。
4.網站接收瀏覽器發來的數據之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密並計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之后所有的通信數據將由之前瀏覽器生成的隨機密碼並利用對稱加密算法進行加密。
這里瀏覽器與網站互相發送加密的握手消息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密數據,為后續真正數據的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非對稱加密算法用於在握手過程中加密生成的密碼,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的完整性。由於瀏覽器生成的密碼是整個數據加密的關鍵,因此在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,因此可以隨意傳輸,而網站的私鑰用於對數據進行解密,所以網站都會非常小心的保管自己的私鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,於是更多的是采用了假證書的手法來欺騙客戶端,從而獲取明文的信息,但是這些手段都可以被識別出來,我將在后續的文章進行講述。不過2010年還是有安全專家發現了TLS 1.0協議處理的一個漏洞:http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/。
實際上這種稱為BEAST的攻擊方式早在2002年就已經被安全專家發現,只是沒有公開而已。目前微軟和Google已經對此漏洞進行了修復。見:http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM