圖解HTTPS建立過程


閱讀目錄

關於網絡安全加密的介紹可以看之前文章:

1. 網絡安全——數據的加密與簽名,RSA介紹
2. Base64編碼、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)
3. When I see you again(DES、AES、RSA、Base64、MD5加密原理介紹,代碼實現)

HTTPS建立過程相當復雜,下圖為示意圖,可以有整體認識,一般我們編程知道這些已足夠。

 

 

 

如果你想仿照HTTPS實現類似加密,可以閱讀下具體過程,作為參照

 

准備工作(對應圖中prepare1234)

可以看到,在客戶端向服務器發起請求前,還有一些准備工作要做,或者說是有一些工作已經做好了。

  • 從CA證書頒發機構,獲取數字證書。
    • 服務器:生成一對公私鑰S.pub,S.pri,私鑰自己保留,用於解密和簽名,不能外泄。將公鑰S.pub,身份信息,傳給CA(Certificate Authority)機構;
    • CA機構:也有公私鑰C.pub,C.pri;由S.pub,身份信息另外附加CA簽名生成數字證書(簽名使用C.pri進行簽名)
    • 將數字證書頒發給申請者(服務器)
  • 客戶端(比如我們經常使用的瀏覽器),為了安全性,會內置一份CA根證書,它包含C.pri,用於對數字證書驗證

發起鏈接

https使用的是443端口,而http使用的是80端口

TCP端口號是一個2字節的整型,處於TCP報文段的前四個字節(2字節源端口號,2字節目的端口號)。

很明顯范圍是0~65535。其中0~1023具有特殊意義,已經被綁定,比如上面說的443,80,還有ftp的21端口。從1024~49151也具有特殊含義,但是還沒有被用完,比如8080端口重定向。剩下的我們就可以隨便使用,自定義了。

其實之前在嵌入式開發中,沒有連接外網,也沒有使用瀏覽器等等這些。所以端口完全自定義隨便用,不用擔心沖突:)。

下面的過程為具體詳細一點的過程,如果不想看,可以完全只看示意圖即可,對我們平時開發用處並不大。或者你在用wireshark類似的抓包工具時看的抓狂不認識,可以看看(反正我用Charles抓包):

1 客戶端發起請求(對應圖中1)

同樣需要三次握手,建立TCP連接(毫無疑問HTTPS也是基於TCP的)

2 客戶端發送Client Hello包(對應圖中2)

  • 隨機數

里面有1970年1月1日到現在的秒數,后面還有一個客戶端發來的隨機數Client.random

  • Session ID

如果客戶端與服務器費盡周折建立了一個HTTPS鏈接,剛建完就斷了,也太可惜,所以用Session ID將其保存,如果下次再來可以直接使用之前的鏈接進行對話(對稱密鑰)。

  • 密文族

告訴服務器,自己支持的加密算法種類

  • Server_name

3 Server Hello(對應圖中2)

  • 隨機數:對應服務器時間,服務器sever.random
  • Seesion ID,如果客戶端發給服務器的session ID在服務端有緩存,服務端會嘗試使用這個session;否則服務器會啟用新的並返回給客戶端;
  • 服務器挑選一個密文族

4 Certificate(對應圖中2)

服務器終於發來我們想要的數字證書,包含了:簽發機構、過期時間、主題名稱、公共密鑰信息、指紋信息等等

 

 

5 Server Hello Done(對應圖中2)

服務器發送結束

6 客戶端驗證(對應圖中3)

客戶端從內置的CA根證書獲取C.pub,對服務器發送來的數字證書進行驗簽,如果一致,說明證書是CA頒發的(前提是C.pub是真實的,確實是CA機構的公鑰)。然后看看證書是否過期,域名是否匹配

7 生成對稱密鑰(對應圖中4、5、6)

客戶端根據之前的:Client.random + sever.random + pre-master生成對稱密鑰

經過S.pub加密發送給服務器,之后即可通過對稱密鑰進行通訊。(就是之前我們熟悉的http)

最后

在整個過程中,一共涉及2對公私密鑰對,一對由服務器產生,主要用於加密,一對由CA產生,主要用於簽名。

為什么要多一個CA呢?

假設沒有CA,那么如果服務器返回的包含公鑰的包被hack截取,然后hack也生成一對公私鑰,他將自己的公鑰發給客戶端。hack得到客戶端數據后,解密,然后再通過服務器的公鑰加密發給服務器,這樣數據就被hack獲取。

有了CA后,客戶端根據內置的CA根證書,很容易識別出hack的公鑰不合法,或者說hack的證書不合法。

 

http://www.cnblogs.com/mddblog/p/6948980.html

標題中的新版指:版本 56.0.2924.87 (64-bit)

原來的版本可以點擊綠色的小鎖進入查看頁面,新版的已經改了

新版的進入方式為F12-->Security選項卡(找不到的點右箭頭>>),然后點擊View certificate

 

 


免責聲明!

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



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