網路安全——一圖看懂HTTPS建立過程

来源:http://www.cnblogs.com/mddblog/archive/2017/06/06/6948980.html
-Advertisement-
Play Games

關於網路安全加密的介紹可以看之前文章: "1. 網路安全——數據的加密與簽名,RSA介紹" "2. Base64編碼、MD5、SHA1 SHA512、HMAC(SHA1 SHA512)" "3. When I see you again(DES、AES、RSA、Base64、MD5加密原理介紹,代碼 ...


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

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

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

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的證書不合法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1,下載安裝node 訪問 http://nodejs.org ,然後點擊大大的綠色的 install 按鈕,下載完成後直接運行程式,就一切準備就緒。 npm 會隨著安裝包一起安裝, 2,打開代碼行 node -v //查看node版本,如果顯示版本號,則安裝成功。 npm -v //查看npm版本 ...
  • 之前學習中做的筆記,放在有道雲筆記裡面了,分享出來,一起學習啦。 gulp入門篇: http://note.youdao.com/noteshare?id=f0fae7bae57c9deaaa10d2b51c431d75 gulp進階篇: http://note.youdao.com/notesha ...
  • <ul class="ddd"> <li class="solid active">啦啦啦啦</li> <li class="solid">我哦我我</li> <li class="solid">哦哦哦哦</li> <li class="solid">噢噢噢噢</li> <li class="sol ...
  • 1. 2.雙向數據綁定 3.v-if 4.v-show:也是條件渲染指令,和v-if指令不同的是,使用v-show指令的元素始終會被渲染到HTML(但是使用v-if指令的元素如果表達式為假,則不會被渲染到HTML頁面,這裡要註意v-if和v-show的這個區別),它只是簡單地為元素設置CSS的sty ...
  • 作者 | 劉博(又拍雲多媒體開發工程師) 當前為了滿足比較火熱的移動 Web 端直播需求,一系列的 HTML5 直播技術迅速的發展起來。 常見的可用於 HTML5 的直播技術有 HLS、WebSocket 與 WebRTC。今天我向大家介紹WebSocket 與 MSE 相關的技術要點,併在最後通過 ...
  • 之前一直用js的foreach,只是用來迴圈,也不知道它的定義是什麼,知道今天看到一段js, 裡邊用的方式是第一次見到,於是上網一搜。 才知道foreach原來是這樣的 array1.forEach(callbackfn[, thisArg]) 它還有一個可選的參數 具體用法這裡寫的已經很清楚了 看 ...
  • omi cli "omi cli" "omi cli命令" "omi框架" 用戶指南 "文件目錄" "npm 腳本" "npm start" "npm run dist" "代碼分割" "相容 IE8" "插入 CSS" "插入組件局部 CSS" "局部CSS使用圖片" "插入 Less" "插入組 ...
  • 前端感覺寫的比較少,也是為了練手,下午沒事用來寫了這個三級聯動,也是第一次寫這東西。 據我瞭解,城市信息可以選擇存在資料庫或者直接寫在前端,為了省事,我直接寫在前端,下麵是我的代碼: <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional/ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...