HTTPS實現原理分析

来源:https://www.cnblogs.com/waldron/archive/2022/10/15/16793707.html
-Advertisement-
Play Games

概述 在上一節中介紹了兩種加密方法 對稱加密 非對稱加密 其中對稱加密性能高,但是有泄露密鑰的風險,而非對稱加密相反,加密性能較差,但是密鑰不易泄露,那麼能不能把他們進行一下結合呢? HTTPS採用混合加密 HTTPS經由HTTP進行通信,但利用SSL/TLS來加密數據包,而SSL/TLS的加密方式 ...


概述

在上一節中介紹了兩種加密方法

  • 對稱加密
  • 非對稱加密

其中對稱加密性能高,但是有泄露密鑰的風險,而非對稱加密相反,加密性能較差,但是密鑰不易泄露,那麼能不能把他們進行一下結合呢?

HTTPS採用混合加密

HTTPS經由HTTP進行通信,但利用SSL/TLS來加密數據包,而SSL/TLS的加密方式就是採用了對稱加密與非對稱加密的結合。

SSL/TLS考慮到非對稱加密的性能較低,所以在初始協商對稱加密密鑰時,使用了非對稱加密,當對稱加密密鑰協商完成後,則後續所有的通訊,全部採用對稱加密進行通訊。

但是這種方式無法證明公開密鑰就是真實伺服器的公開密鑰,假設與B伺服器進行通信,怎麼確認公開密鑰是B伺服器的,後續在公開密鑰傳輸途中已經被替換了,但是卻發現不了。

由於任何人都可以訪問伺服器,所以不可能一一把公鑰告訴他們,那麼能不能提供一個公鑰下載的地方讓客戶機訪問伺服器時先下載公鑰,但是下載公鑰的地址也有可能是假的,不可取。

那麼有沒有更好的方式,既能安全的獲取公鑰又能確保訪問的伺服器是真實的?答案:由數字證書認證機構頒發(CA)公開密鑰證書

數字證書認證機構是客戶端和伺服器端都可以信賴的第三方機構,VeriSign就是一家數字證書機構。流程如下:

  1. 企業向證書機構提出公開密鑰申請。
  2. 證書機構首先對公司身份進行核實,核實通過去,使用自己的私鑰對企業伺服器的公開密鑰進行數字簽名,並把簽名信息綁定在公鑰證書里下發給企業。
  3. 拿到證書的客戶端對證書的簽名進行校驗,驗證通過,即可確認:
    1. 伺服器的公開密鑰是值得信賴的
    2. 根據數字證書簽發機構是真實有效的數字證書認證機構。

這裡應該有人好奇,證書簽發機構的公鑰是怎麼傳到客戶端的?瀏覽器在發佈時,已經包含了主流的認證的機構的公開密鑰了,所以是不需要傳輸的。

HTTPS通信流程

上圖大致描述了 SSL/TLS 的握手過程,具體細節如下:

  1. Client Hello

    握手第一步是客戶端向服務端發送 Client Hello 消息,這個消息里包含了一個客戶端生成的隨機數 Random1、客戶端支持的加密套件(Support Ciphers)和 SSL Version 等信息。通過 Wireshark 抓包,我們可以看到如下信息:

  2. Server Hello

    第二步是服務端向客戶端發送 Server Hello 消息,這個消息會從 Client Hello 傳過來的 Support Ciphers 里確定一份加密套件,這個套件決定了後續加密和生成摘要時具體使用哪些演算法,另外還會生成一份隨機數 Random2。註意,至此客戶端和服務端都擁有了兩個隨機數(Random1+ Random2),這兩個隨機數會在後續生成對稱秘鑰時用到。

  3. Certificate

    這一步是服務端將自己的證書下發給客戶端,讓客戶端驗證自己的身份,客戶端驗證通過後取出證書中的公鑰。

  4. Server Hello Done

Server Hello Done 通知客戶端 Server Hello 過程結束。

  1. Client Key Exchange

客戶端收到服務端傳來的證書後,先從 CA 驗證該證書的合法性,驗證通過後取出證書中的服務端公鑰,再生成一個隨機數 Random3,再用服務端公鑰非對稱加密 Random3生成 PreMaster Key。

Client Key Exchange 就是將這個 key 傳給服務端,服務端再用自己的私鑰解出這個 PreMaster Key 得到客戶端生成的 Random3。至此,客戶端和服務端都擁有 Random1 + Random2 + Random3,兩邊再根據同樣的演算法就可以生成一份秘鑰,握手結束後的應用層數據都是使用這個秘鑰進行對稱加密。為什麼要使用三個隨機數呢?這是因為 SSL/TLS 握手過程的數據都是明文傳輸的,並且多個隨機數種子來生成秘鑰不容易被暴力破解出來。客戶端將 PreMaster Key 傳給服務端的過程如下圖所示:

  1. Change Cipher Spec(Client)

這一步是客戶端通知服務端後面再發送的消息都會使用前面協商出來的秘鑰加密了,是一條事件消息。

  1. Encrypted Handshake Message(Client)

這一步對應的是 Client Finish 消息,客戶端將前面的握手消息生成摘要再用協商好的秘鑰加密,這是客戶端發出的第一條加密消息。服務端接收後會用秘鑰解密,能解出來說明前面協商出來的秘鑰是一致的。

  1. Change Cipher Spec(Server)

這一步是服務端通知客戶端後面再發送的消息都會使用加密,也是一條事件消息。

  1. Encrypted Handshake Message(Server)

這一步對應的是 Server Finish 消息,服務端也會將握手過程的消息生成摘要再用秘鑰加密,這是服務端發出的第一條加密消息。客戶端接收後會用秘鑰解密,能解出來說明協商的秘鑰是一致的。

  1. Application Data

應用層協議通信即發送HTTP請求。


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

-Advertisement-
Play Games
更多相關文章
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 前文回顧 實現一個簡單的Database1(譯文) 實現一個簡單的Database2(譯文) 實現一個簡單的Database3(譯文) 實現一個簡單的D ...
  • 一、首先創建一張測試表,隨便插入一點測試數據: CREATE TABLE `test_index` ( `id` int(11) NOT NULL AUTO_INCREMENT, `no` int(11) NOT NULL DEFAULT '0' COMMENT '訂單號,int型', `no_st ...
  • 圖像處理的業務場景比較多,例如 圖像搜索、視頻去重、人臉識別、美圖、圖片去重 等。 比如,視頻去重,一些用戶上傳了較多的視頻,同一部電影可能有不同的版本,解析度不一樣,音軌不一樣,壓縮比不一樣。這種情況會導致服務端重覆存儲大量的視頻。 又比如甄別黃色視頻或黃色圖片,鑒黃師的職業要消失了。 有什... ...
  • 一.簡單瞭解MySQL 1.在瞭解MySQL之前因該瞭解的東西 資料庫(Database)指長期存儲在電腦內的、有組織的、可共用的數據集合。資料庫實際上就是一個文件集合,是一個存儲數據的倉庫,本質就是一個文件系統,資料庫是按照特定的格式把數據存儲起來,用戶可以對存儲的數據進行增刪改查操作。 資料庫 ...
  • 2022 年 10 月 13 日- PostgreSQL 全球開發組今天宣佈發佈 PostgreSQL 15,這是世界上最先進的開源資料庫的最新版本。 PostgreSQL 15 建立在最近版本的性能改進的基礎上,在管理本地和分散式部署中的工作負載方面取得了顯著收益,包括改進的排序。此版本通過... ...
  • 相關術語: DB :資料庫:在硬碟上以文件的方式存在DBMS:資料庫管理系統:例如mysql,oracle,sqlserver…SQL:一門適用於所有DBMS,對DB進行操作的標準規劃語言,DQL:資料庫查詢語句 select,DML:資料庫管理語句,修改表中數據update,insert,dele ...
  • 什麼是枚舉Enum 枚舉 Enum是在眾多語言中都有的一種數據類型,JavaScript中還沒有(TypeScript有)。用來表示一些特定類別的常量數據,如性別、學歷、方向、賬戶狀態等,項目開發中是很常用的。 | Text文字(界面顯示) | key編碼(編碼、存儲使用) | 數字value值(存 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 LocalStorage 是HTML5中一個方便使用的 API,它為 Web 開發人員 提供了一個易於使用的5MB的存儲空間。使用 LocalStorage API 真的再簡單不過了。不信看下: //Save a value to loc ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...