談談 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心機制:非對稱加密 + 對稱加密

HTTPS = HTTP over TLS/SSL,通過 ?混合加密體系? 解決三大問題:

  1. ?防竊聽? - 對稱加密傳輸內容(如 AES)
  2. ?防篡改? - 數字簽名驗證數據完整性
  3. ?防冒充? - 數字證書驗證服務器身份
// 前端感知的典型場景:混合內容攔截
// 在 HTTPS 頁面加載 HTTP 資源會被瀏覽器攔截
<img src="http://example.com/image.jpg"> 
// 控制臺報錯:Mixed Content: The page was loaded over HTTPS...

二、TLS 握手流程詳解(三次握手后)
1. Client Hello

客戶端發送:

  • 支持的 TLS 版本(如 TLS 1.3)
  • 客戶端隨機數(Client Random)
  • 加密套件列表(如 ECDHE-RSA-AES128-GCM-SHA256)
# 開發者工具查看加密套件(Chrome)
chrome://flags/#tls13-variant
2. Server Hello

服務端回應:

  • 選定的 TLS 版本和加密套件
  • 服務器隨機數(Server Random)
  • 數字證書(包含公鑰)
// 前端可通過 JS 獲取證書信息(需要用戶授權)
navigator.mediaDevices.getUserMedia({ video: true }).then(() => {const cert = document.querySelector('video').getCertificate();console.log(cert.issuer); // 頒發機構});
3. 證書驗證

客戶端驗證證書:

  • 證書鏈是否可信(CA 機構簽發)
  • 域名是否匹配
  • 是否過期
// 開發環境常見錯誤:自簽名證書報錯
// 解決方案1:瀏覽器手動信任(危險)
// 解決方案2:配置本地CA(推薦使用 mkcert)
// 生成本地證書
$ mkcert -install
$ mkcert localhost 127.0.0.1 ::1
4. 密鑰交換(以 ECDHE 為例)
  • 服務端發送 ?Server Params?(橢圓曲線公鑰)
  • 客戶端生成 ?Client Params? 并發送
  • 雙方通過 ECDHE 算法生成 ?Pre-Master Secret
# 簡化版密鑰計算邏輯(實際為二進制操作)
client_random = 0x1234
server_random = 0x5678
pre_master = ecdhe(client_params, server_params)
master_secret = PRF(pre_master, client_random + server_random)
5. 切換加密協議

雙方用 Master Secret 生成對稱密鑰,后續通信使用對稱加密。


三、前端開發重點場景
場景1:強制全站 HTTPS
 

nginx

# Nginx 配置自動跳轉(301 永久重定向)
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}
 

html

<!-- 前端兜底方案(慎用) -->
<script>
if (location.protocol !== 'https:') {location.replace(`https://${location.host}${location.pathname}`);
}
</script>
場景2:安全 Cookie 傳輸
 

javascript

// 設置 Secure + HttpOnly + SameSite
document.cookie = `session=xxx; Secure; HttpOnly; SameSite=Lax`;
場景3:HSTS 預加載
 

nginx

# 添加 Strict-Transport-Security 頭
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

提交預加載列表


四、性能優化實踐
技巧1:Session Resumption

復用 TLS 會話減少握手耗時:

 

nginx

# Nginx 配置會話票證
ssl_session_tickets on;
ssl_session_timeout 1d;
技巧2:OCSP Stapling

由服務端緩存證書狀態,減少客戶端驗證耗時:

 

nginx

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
技巧3:TLS 1.3 升級

比 TLS 1.2 減少一次 RTT:

 

nginx

ssl_protocols TLSv1.3 TLSv1.2;

五、常見坑點排查指南
問題1:證書鏈不完整

現象:Android 低版本報錯,iOS 正常
解決:使用?openssl?補全證書鏈

 

bash

$ openssl s_client -showcerts -connect example.com:443
$ cat fullchain.pem > chained.crt  # 合并根證書和中間證書
問題2:混合內容阻塞

定位:使用 CSP 報告收集非 HTTPS 請求

 

html

<meta http-equiv="Content-Security-Policy" content="default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri /csp-report">
問題3:CDN 證書配置錯誤

檢測工具

 

bash

$ curl -I https://example.com        # 檢查 Server 頭
$ nscurl --ats-diagnostics https://example.com  # iOS 特性檢測

六、開發環境 HTTPS 最佳實踐
方案1:Webpack DevServer 配置
 

javascript

// webpack.config.js
const fs = require('fs');
const https = require('https');
module.exports = {devServer: {https: {key: fs.readFileSync('localhost-key.pem'),cert: fs.readFileSync('localhost.pem')},public: 'https://localhost:8080' // 避免瀏覽器警告}
};
方案2:Service Worker 調試
 

javascript

// sw.js 中捕獲證書錯誤
self.addEventListener('fetch', event => {if (event.request.url.startsWith('https://')) {event.respondWith(fetch(event.request).catch(err => {console.error('證書錯誤:', err);return new Response('HTTPS故障');}));}
});

七、終極檢測清單
  1. 所有子域名啟用 HTTPS(包括 CDN)
  2. 配置 HSTS 頭部并提交預加載
  3. 定期更新 TLS 證書(監控到期時間)
  4. 禁用不安全協議(SSLv3、TLS 1.0)
  5. 使用 Qualys SSL Labs 評分達到 A+
 

bash

# 一鍵檢測(需安裝 testssl.sh)
$ testssl.sh --color 0 example.com

通過理解 TLS 握手流程,前端開發者能更好地處理證書錯誤、優化資源加載策略,并推動全站安全升級。記住:HTTPS 不是終點,而是現代 Web 應用的起跑線。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

共軛梯度法筆記

一、梯度下降法 x k 1 x k ? α ? f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1?xk??α?f(xk?) 這是普通的梯度下降公式&#xff0c;有兩個量是關鍵&#xff0c;步長 α \alpha α和方向 ? f ( x k ) \nabla f(x_k) ?f(xk?)。這里的方向直接選擇了梯度方向&…

ubuntu 啟動不起來,光標閃爍 解決方法

ubuntu 啟動不起來&#xff0c;光標閃爍 進不了系統&#xff0c;解決方法 按ctrl alt f2&#xff0c;進入終端&#xff0c;登錄。 jounal -b 查看啟動日志。 發現是找不到顯卡驅動程序。 解決方法&#xff1a; 卸載nvidia程序。 sudo systemctl stop gdm # 適用于GNOME…

CSS - 妙用Sass

官方文檔&#xff1a;https://www.sass.hk/docs/ 1.例1&#xff1a; each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…

chromadb向量數據庫使用 (2)

目錄 代碼代碼解釋**1. 導入 chatGLM 嵌入函數****2. 創建 ChromaDB 客戶端和集合****3. 查詢集合中的數據數量****4. 添加數據到集合****5. 獲取已存儲的文檔****6. 更新文檔****7. 再次獲取數據&#xff0c;驗證更新結果****8. 刪除某個文檔****9. 獲取已刪除的文檔****總結*…

我的世界1.20.1forge模組開發進階物品(7)——具有動畫、3D立體效果的物品

基礎的物品大家都會做了對吧?包括武器的釋放技能,這次來點難度,讓物品的貼圖呈現動畫效果和扔出后顯示3D立體效果,這個3D立體效果需要先學習blockbench,學習如何制作貼圖。 Blockbench Blockbench是一個用于創建和編輯三維模型的免費軟件,特別適用于Minecraft模型的設計…

大模型在敗血癥預測及圍手術期管理中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、敗血癥概述 2.1 定義與流行病學 2.2 病因與發病機制 2.3 臨床表現與診斷標準 2.4 并發癥與危害 三、大模型技術原理及在醫療領域的應用 3.1 大模型技術概述 3.2 大模型在醫療領…

SpringBoot接口自動化測試實戰:從OpenAPI到壓力測試全解析

引言&#xff1a;接口測試的必要性 在微服務架構盛行的今天&#xff0c;SpringBoot項目的接口質量直接影響著系統穩定性。本文將分享如何通過自動化工具鏈實現接口的功能驗證與性能壓測&#xff0c;使用OpenAPI規范打通測試全流程&#xff0c;讓您的接口質量保障體系更加完備。…

微軟具身智能感知交互多面手!Magma:基于基礎模型的多模態AI智能體

作者&#xff1a; Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 單位&#xff1a;微軟研究院&#xff0c;馬里蘭大學&#xff0c;威斯康星大學麥迪遜分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是適用于 64 位 Linux 系統的 Java 開發工具包&#xff08;JDK&#xff09;8 更新 291 版本。這是 JDK 的一個特定版本&#xff0c;用于開發 Java 應用程序和小程序。 jdk-8u291-linux-x64 網盤下載鏈接&#xff1a;夸克網盤分享

Baklib云內容中臺的核心架構是什么?

云內容中臺分層架構解析 現代企業內容管理系統的核心在于構建動態聚合與智能分發的云端中樞。以Baklib為代表的云內容中臺采用三層架構設計&#xff0c;其基礎層為數據匯聚工具集&#xff0c;通過標準化接口實現多源異構數據的實時采集與清洗&#xff0c;支持從CRM、ERP等業務…

17.3 LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系

LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系 關鍵詞:模型評估體系、自動化測試框架、業務指標對齊、A/B測試集成、生產級質量監控 1. Evaluation 核心功能全景 1.1 評估維度矩陣 維度評估指標示例采集方式質量評估準確率、相關性評分、事實性檢查人工標注+A…

華為 VRP 系統簡介配置SSH,TELNET遠程登錄

華為 VRP 系統簡介&配置TELNET遠程登錄 1.華為 VRP 系統概述 1.1 什么是 VRP VRP&#xff08;Versatile Routing Platform 華為數通設備操作系統&#xff09;是華為公司數據通信產品的通用操作系統平臺&#xff0c;從低端到核心的全系列路由器、以太網交換機、業務網關等…

算法基礎 -- 字符串哈希的基本概念和數學原理分析

字符串哈希的基本概念和數學原理分析 1. 字符串哈希的定義和基本概念 哈希函數的定義 哈希函數&#xff08;Hash Function&#xff09;是一種將任意長度的輸入映射為固定長度輸出的函數。對于字符串而言&#xff0c;哈希函數通過某種算法將字符串轉換成一個整數&#xff0c;…

從新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防護框架構建

從新加坡《AI系統安全指南配套手冊》看可信AI全生命周期防護框架構建 一、引言 1.1 研究背景與意義 近年來,人工智能(AI)技術以前所未有的速度蓬勃發展,已然成為推動各行業變革與創新的核心驅動力。從醫療領域輔助疾病診斷,到金融行業的風險預測與智能投顧,再到交通領…

C++學習之C++初識、C++對C語言增強、對C語言擴展

一.C初識 1.C簡介 2.第一個C程序 //#include <iostream> //iostream 相當于 C語言下的 stdio.h i - input 輸入 o -output 輸出 //using namespace std; //using 使用 namespace 命名空間 std 標準 &#xff0c;理解為打開一個房間&#xff0c;房間里有我們所需…

HTMLS基本結構及標簽

HTML5是目前制作網頁的核心技術&#xff0c;有叫超文本標記語言。 基本結構 聲明部分位于文檔的最前面&#xff0c;用于向瀏覽器說明當前文檔使用HTML標準規范。 根部標簽位于聲明部分后&#xff0c;用于告知瀏覽器這是一個HTML文檔。< html>表示文檔開始&#xff0c;&l…

eMMC存儲器詳解(存儲區域結構、EXT_CSD[179]、各分區介紹、主要引腳、命令格式與類型等)

讀本篇博文所需要的先行知識 關于芯片內部的ROM的作用、工作原理的介紹&#xff0c;鏈接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145969584 eMMC的物理結構、特點、用途 這個標題的相關內容見我的另一篇博文&#xff0c;博文鏈接如下&#xff1a…

分布式鎖—2.Redisson的可重入鎖一

大綱 1.Redisson可重入鎖RedissonLock概述 2.可重入鎖源碼之創建RedissonClient實例 3.可重入鎖源碼之lua腳本加鎖邏輯 4.可重入鎖源碼之WatchDog維持加鎖邏輯 5.可重入鎖源碼之可重入加鎖邏輯 6.可重入鎖源碼之鎖的互斥阻塞邏輯 7.可重入鎖源碼之釋放鎖邏輯 8.可重入鎖…

iOS實現一個強大的本地狀態記錄容器

我們開發中經常會遇到這樣的場景&#xff0c;就是我們客戶端用戶進行了某個操作&#xff0c;這個操作影響了數據的狀態&#xff0c;但是我們又不方便重新請求一次數據&#xff0c; 這個時候&#xff0c;就需要我們記錄一下本地狀態在內存中&#xff0c;隨著業務越來越復雜&…

vue中帶$的是什么

在Vue.js中&#xff0c;帶的 $ 符號用于表示 Vue實例的屬性和方法。 這些屬性和方法是Vue框架內部定義的&#xff0c;主要用于方便開發者在組件內部訪問和使用。 常見的帶$的屬性和方法: ?$data?&#xff1a;用于訪問組件的內部數據對象&#xff0c;包含組件內定義的所有響…