Java【網絡原理】(5)深入淺出HTTPS:狀態碼與SSL/TLS加密全解析


目錄

1.前言

2.正文

2.1狀態碼

2.2HTTP與HTTPS的關系

2.3SSL協議

2.3.1對稱加密

2.3.2非對稱加密

2.3.3中間人攻擊

2.3.4校驗機制

2.3.4.1證書

2.3.4.2數字簽名

1. 數字簽名的生成過程

2. 數字簽名的驗證過程

2.4TLS協議(握手過程)

3.小結


1.前言

哈嘍大家好吖,今天繼續來給大家網絡原理相關方面的講解,主要內容包括狀態碼以及HTTPS中加密的全過程,讓我們開始吧。

2.正文

2.1狀態碼

想必大家都遇到過這個畫面:

這個耳熟能詳的“404”,就是狀態碼啦。

狀態碼(HTTP與HTTPS互通)是服務器與客戶端通信的“語言”,用3位數字直觀反饋請求結果。它不僅是開發調試的核心工具,也是優化用戶體驗和排查問題的關鍵線索。

HTTP狀態碼https://baike.baidu.com/item/http%e7%8a%b6%e6%80%81%e7%a0%81/5053660


HTTP狀態碼按首位數字分為5類:

類別范圍含義核心邏輯
1xx100-199信息性狀態請求已被接收,需客戶端繼續操作
2xx200-299成功響應請求被正確處理并返回預期結果
3xx300-399重定向資源位置變化,需客戶端跳轉
4xx400-499客戶端錯誤請求語法錯誤或權限不足
5xx500-599服務器錯誤服務器無法完成合法請求

在我前面SpringMVC的博文中,狀態碼為我們的調試工作發揮了舉足輕重的作用,下面我們介紹幾個比較重要的狀態碼。

?2xx:成功響應:

  • 200 OK
    默認成功狀態,適用于GET、POST等請求。
    常見誤區:

    • POST請求成功后,部分開發者誤用200而非201(資源已創建)。

    • 刪除操作成功后,建議返回204(無內容)而非200。

  • 201 Created
    場景:資源創建成功(如提交表單生成新訂單)。
    響應頭要求:必須包含?Location?字段指向新資源地址。

  • 204 No Content
    場景:請求成功但無需返回內容(如刪除資源、提交無返回的表單)。
    技術細節:響應體必須為空,瀏覽器不會刷新頁面。


4xx:客戶端錯誤:

  • 400 Bad Request
    通用錯誤:請求語法錯誤(如JSON格式錯誤、缺少必填參數)。
    開發技巧:后端應返回具體錯誤信息(如?{ "error": "Invalid email format" })。

  • 401 Unauthorized
    未認證:需身份驗證(如未登錄用戶訪問個人中心)。
    響應頭要求:必須包含?WWW-Authenticate?字段定義認證方式。

  • 403 Forbidden
    無權限:身份已認證,但無權訪問資源(如普通用戶訪問管理員頁面)。
    與401的區別:401是“未證明身份”,403是“身份已知但權限不足”。

  • 404 Not Found
    資源不存在:URL路徑錯誤或資源已被刪除。
    SEO影響:過多404錯誤會降低網站排名,建議配置自定義404頁面引導用戶。

  • 429 Too Many Requests
    限流防護:客戶端請求頻率過高(如API防刷機制)。
    響應頭要求:應包含?Retry-After?告知重試時間。


5xx:服務器錯誤:

  • 500 Internal Server Error
    通用服務端錯誤:代碼異常(如未捕獲的Exception、數據庫連接失敗)。
    開發建議:記錄詳細日志(如錯誤堆棧、請求參數),避免直接返回原始錯誤給客戶端。

  • 502 Bad Gateway
    網關錯誤:代理服務器(如Nginx)無法從上游服務器(如Node.js)獲取響應。
    常見原因:上游服務崩潰、防火墻攔截、請求超時。

  • 503 Service Unavailable
    服務不可用:服務器臨時過載或維護(如電商大促時流量激增)。
    優化方案:返回?Retry-After?頭,配合負載均衡和熔斷機制。

  • 504 Gateway Timeout
    網關超時:代理服務器等待上游響應超時。
    排查方向:檢查后端服務性能、數據庫查詢效率、網絡延遲。


?2.2HTTP與HTTPS的關系

通俗理解:

HTTP(HyperText Transfer Protocol):

一種明文傳輸協議,數據在客戶端與服務器之間以未加密形式傳輸,如同寄送明信片,內容對所有人可見

HTTPS(HTTP Secure):

HTTP的安全升級版,通過?SSL/TLS協議?對傳輸內容加密,如同將明信片裝入防拆封的保險箱


橫向對比HTTP與HTTPS協議:

1)數據傳輸安全性:

  • HTTP:數據以明文傳輸,容易被竊聽、篡改。
  • HTTPS:通過 SSL/TLS 協議對數據進行加密傳輸,提供數據機密性和完整性保障。

2)端口號:

  • HTTP:默認使用端口 80。
  • HTTPS:默認使用端口 443。

3)性能:

  • HTTP:無加密過程,連接建立速度稍快。
  • HTTPS:基于 HTTP上又加了SSL(Secure Sockets Layer)或TLS(Transport Layer Security)協議來實現的加密傳輸,加解密過程增加了計算開銷,握手時間較長,但現代硬件和協議優化已使性能差距減小。?

下文我們就要展開本文的重中之重,加密的全過程了。?


2.3SSL協議

2.3.1對稱加密

定義:

對稱加密是一種加密方式,加密和解密使用同一個密鑰。就像用同一把鑰匙鎖門和開門,只有持有鑰匙的人才能操作。

具體步驟

  • 客戶端與服務器通過TLS握手協商出一個會話密鑰(Session Key)。
  • 雙方使用該密鑰對HTTP報文進行對稱加密傳輸。
  • 會話結束后密鑰銷毀,下次連接生成新密鑰。

?對稱加密效率較高,但相反的安全性不足:


2.3.2非對稱加密

定義

非對稱加密使用一對數學關聯的密鑰

  • 公鑰(Public Key):公開給所有人,用于加密數據(如同信箱的投遞口)

  • 私鑰(Private Key):嚴格保密,用于解密數據(如同信箱的專屬鑰匙)

核心特性

  1. 公鑰加密 → 私鑰解密:任何人都能用公鑰加密數據,但只有私鑰持有者能解密。

  2. 私鑰簽名 → 公鑰驗簽:私鑰可生成數字簽名,公鑰可驗證簽名真實性。

對稱加密,成本是比較高的,不適合加密大量的數據。大量的業務數據仍然通過對稱密鑰來加密
對稱密鑰,如果數據量小則通過非對稱加密的方式來傳輸?。

當前的場景有三個密鑰:

  1. 客戶端生成的對稱密鑰。
  2. 服務器生成的公鑰,可以給所有設備告知。
  3. 服務器生成的私鑰,只有自己知道?。

上述這樣的流程存在重大安全隱患,黑客可以通過特殊手段,來獲取到對稱密鑰~~ 破壞后續傳輸的安全性~那就是中間人攻擊?。


2.3.3中間人攻擊

定義

中間人攻擊(Man-in-the-Middle Attack, MITM)指攻擊者秘密介入通信雙方之間,竊聽、攔截甚至篡改數據,而通信雙方對此毫無察覺。

核心原理

  1. 偽裝身份:攻擊者偽造通信一方的身份(如偽裝成服務器或路由器)。

  2. 劫持通信:將雙方的流量引導至攻擊者控制的節點。

  3. 操縱數據:解密、查看或修改數據后轉發給真實接收方。

通俗理解

  • 正常通信:A → 快遞員 → B

  • 中間人攻擊:A → 偽裝成快遞員的黑客 → B

雖然服務器私鑰并沒有被黑客獲取,但請求與相應都被黑客一覽無余,所以為了安全,引入了一些校驗機制,其中包括證書與數字簽名。?


2.3.4校驗機制

在HTTPS通信中,校驗機制需解決兩個核心問題:

  1. 身份真實性:確保通信的服務器是合法的(防止中間人偽造)。

  2. 數據完整性:確保傳輸的證書和數據未被篡改。

解決方案

  • 證書?→ 證明服務器身份

  • 數字簽名?→ 驗證證書的合法性

2.3.4.1證書

一個標準的證書包含以下關鍵信息:

字段作用
Subject(主體)證書持有者的信息(如域名、組織名稱)
Public Key服務器的公鑰(用于加密數據或驗證簽名)
Issuer(頒發者)簽發證書的權威機構(CA,如Let's Encrypt、DigiCert)
有效期證書的有效起止時間

證書頒發流程:

  1. 生成密鑰對:服務器生成公鑰和私鑰。

  2. CSR(證書簽名請求):服務器向CA提交包含公鑰、域名等信息的CSR文件。

  3. CA驗證身份:CA通過DNS記錄、文件驗證或郵件驗證確認申請者對域名的控制權。

  4. 簽發證書:CA用私鑰對證書內容簽名,生成最終證書。

先講解完證書的概念,到下文數字簽名介紹完后會講解客戶端拿到證書和數字簽名會做些什么?


2.3.4.2數字簽名

數字簽名,本質上是一個校驗和。

1. 數字簽名的生成過程

  • 計算哈希值:對證書內容(除簽名外)使用哈希算法生成摘要。

  • 私鑰加密哈希值:CA用私鑰對哈希值加密,生成數字簽名。

2. 數字簽名的驗證過程

  • 解密簽名:瀏覽器用CA的公鑰解密簽名,得到哈希值H1。

  • 重新計算哈希值:對收到的證書內容計算哈希值H2。

  • 比對哈希值:若H1=H2,則證書未被篡改;否則判定為偽造證書。

如果校驗和一樣,則說明收到的數據是原始數據。

驗證邏輯

  • 只有CA的私鑰能生成合法簽名 → 簽名合法則證書可信。

  • 哈希值匹配 → 證書內容未被篡改。

客戶端如何確保拿到的 pub2是公證機構的 pub2,而不是黑客偽造的 pub2 呢??
pub2就不是通過網絡傳輸的,而是操作系統中內置的~(安裝好系統,系統就內置了一系列知名公正機構的公鑰)只要安裝正版系統,不是黑客搞的盜版系統就可以信任 pub2 是正確合法的~

如果黑客想要直接修改證書中的公鑰為自己的公鑰,此時就會導致客戶端計算的校驗和和解密出來的原始校驗和就對不上。
此時客戶端就會報錯,瀏覽器就會彈出一個紅色的頁面,告訴你該網站不安全,是否要繼續訪問。


2.4TLS協議(握手過程)

概念

TLS(Transport Layer Security)是SSL的繼任者,用于在互聯網上建立加密通信通道,解決三大核心問題:

  1. 保密性:數據加密傳輸(防竊聽)。

  2. 完整性:數據未被篡改(防篡改)。

  3. 真實性:驗證通信方身份(防偽裝)。

握手流程解析:

  1. 客戶端發送 ClientHello 消息給服務器,包含客戶端支持的 SSL/TLS 版本、加密套件列表以及一個隨機數(Client Random)
  2. 服務器響應 ServerHello 消息,包含服務器選定的 SSL/TLS 版本、加密套件以及另一個隨機數(Server Random)
  3. 服務器發送證書(Certificate)給客戶端,證書包含服務器的公鑰以及由受信任的證書頒發機構(CA)簽名的數字證書。
  4. 如果服務器需要客戶端認證,則請求客戶端證書(Client Certificate Request)。
  5. 服務器發送 ServerHelloDone 消息,表示握手的初步消息已經發完。
  6. 客戶端驗證服務器證書,如果證書有效,它會生成一個預主密鑰(Pre-Master Secret),并使用服務器的公鑰加密這個預主密鑰,把它發送給服務器。
  7. 服務器使用私鑰解密預主密鑰,客戶端和服務器使用約定好的算法計算出主密鑰(MasterSecret)。
  8. 客戶端發送 ChangeCipherSpec 消息,表示后續的通信將使用協商好的密鑰和加密算法。
  9. 客戶端發送 Finished 消息,包含使用主密鑰計算的握手消息摘要,以確認握手的完整性。
  10. 服務器發送 ChangeCipherSpec 消息,也表示后續通信將使用協商好的密鑰和加密算法.。
  11. 服務器發送 Finished 消息,包含使用主密鑰計算的握手消息摘要,雙方握手完成,后續通信開始使用對稱加密進行。

(部分內容參考面試鴨)

握手過程中的安全機制

1. 防中間人攻擊

  • 證書驗證:確保服務器公鑰未被偽造。

  • 簽名驗證:Server Key Exchange消息中的參數由服務器私鑰簽名。

2. 前向保密(Perfect Forward Secrecy, PFS)

  • 原理:每次會話使用臨時密鑰(如ECDHE),即使長期私鑰泄露,歷史通信仍安全。

  • 啟用條件:使用ECDHE密鑰交換算法。

3. 防重放攻擊

  • 隨機數(Client/Server Random):確保每次會話密鑰唯一。

  • Finished消息:驗證握手過程完整性。

3.小結

今天的分享到這里就結束了,喜歡的小伙伴點點贊點點關注,你的支持就是對我最大的鼓勵,大家加油!

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

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

相關文章

代碼隨想錄算法訓練營第三十七天

LeetCode題目: 300. 最長遞增子序列674. 最長連續遞增序列718. 最長重復子數組2918. 數組的最小相等和(每日一題) 其他: 今日總結 往期打卡 300. 最長遞增子序列 跳轉: 300. 最長遞增子序列 學習: 代碼隨想錄公開講解 問題: 給你一個整數數組 nums ,找到其中最長…

【Java ee初階】網絡原理

TCP協議 1.確認應答 實現可靠傳輸的核心機制 2.超時重傳 實現可靠傳輸的核心機制 3.連接管理 網絡部分最高頻的面試題 4.滑動窗口 提高傳輸效率的機制 5.流量控制 依據接收方的處理能力,限制發送方的發送速度。 6.擁塞控制 依據傳輸鏈路的處理能力&#xff0c…

B站取關腳本

個人的賬號可能被盜了,發現關注數量蹦到3000多,然后b站沒有一鍵取關的按鈕,并且對api的訪問有速度限制,然后網上的腳本很多都已經失效了,所以自己稍微寫個簡陋的 測試時間: 2025.05.11 使用步驟: 進入b站的關注頁面…

PyGame游戲開發(含源碼+演示視頻+開結題報告+設計文檔)

前言: 大二小學期python課上基于pygame做的一個游戲小demo,當時老師花了一天講解了下python基礎語法后(也是整個大學四年唯一學習python的時間),便讓我們自學網課一周然后交項目,所以做的非常倉促&#xff…

使用 React 實現語音識別并轉換功能

在現代 Web 開發中,語音識別技術的應用越來越廣泛。它為用戶提供了更加便捷、自然的交互方式,例如語音輸入、語音指令等。本文將介紹如何使用 React 實現一個簡單的語音識別并轉換的功能。 功能概述 我們要實現的功能是一個語音識別測試頁面&#xff0…

C++ 雙峰高斯函數擬合

C 雙峰高斯函數擬合 一維高斯函數二維高斯函數多維高斯函數一維雙峰高斯函數代碼實現 二維雙峰高斯函數代碼實現 多維多峰高斯函數 在數據分析與清洗中經常遇到這樣的數據:數據不僅僅向單個中心靠攏,而是類似分段的向兩個甚至多個中心靠攏。數據向單個中…

【RP2350】香瓜樹莓派RP2350之LED

本文最后修改時間:2025年05月10日 01:57 一、本節簡介 本節以樹莓派pico2開發板為例,舉例如何寫一個LED驅動加進工程里。 二、實驗平臺 1、硬件平臺 1)樹莓派pico2開發板 ①樹莓派pico2開發板(作為仿真器) ②micr…

機器人運動控制原理淺析-UC Berkeley超視覺模態模型

加州伯克利發布的超視覺多感知模態融合(FuSe, Fuse Heterogeneous Sensory Data)模型,基于視覺、觸覺、聽覺、本體及語言等模態,利用自然語言跨模態對齊(Cross-Modal Grounding)優調視覺語言動作等通用模型,提高模型任務成功率。 總體框架 …

【Bootstrap V4系列】學習入門教程之 組件-媒體對象(Media object)

Bootstrap V4系列 學習入門教程之 組件-媒體對象(Media object) 媒體對象(Media object)一、Example二、Nesting 嵌套三、Alignment 對齊四、Order 順序五、Media list 媒體列表 媒體對象(Media object) B…

解決VirtualBox中虛擬機(ubuntu)與主機(windows)之間互相復制粘貼(文本)

一.開始的設置 1.在VirtualBox中打開設置,常規中修改主機與虛擬機交互設置 2.虛擬機關閉狀態下,存儲中選中控制器SATA,勾選‘使用主機輸入輸出’ 3.選中操作系統對應的虛擬文件,.vdi文件,勾選右邊的固態驅動器。 4.啟…

java 多核,多線程,分布式 并發編程的現狀 :從本身的jdk ,到 spring ,到其它第三方。

Java 在多核、多線程和高性能編程領域提供了豐富的現成框架和工具,既有標準庫中的并發組件,也有第三方框架。以下是一些關鍵框架及其應用場景的總結:便于后面我們站在巨人的肩膀上,繼續前行 一、Java 標準庫中的多線程框架 Execut…

Nodejs核心機制

文章目錄 前言 前言 結合 Node.js 的核心機制進行說明: 解釋事件循環的各個階段。 答案 Node.js 事件循環分為 6 個階段,按順序執行: Timers:執行 setTimeout 和 setInterval 的回調。 Pending I/O Callbacks:處理系…

C++筆記6:數字字面量后綴和前綴總結

在C中,可以在數字字面量后面添加字母后綴(或前綴)來表示特定的數據類型。這些后綴能夠明確指定字面量的類型,避免類型轉換帶來的潛在問題。以下是常見的幾種類型后綴及其含義: 1. 整數后綴 u 或 U:表示 u…

50.輻射抗擾RS和傳導抗擾CS測試環境和干擾特征分析

輻射抗擾RS和傳到抗擾CS測試環境和干擾特征分析 1. 輻射抗擾RS2. 傳導抗擾CS 1. 輻射抗擾RS 輻射抗擾RS考察對外界電磁場干擾得抗擾能力,測試頻段為80MHz~2000MHz,用1KHz得正弦波進行調幅,在電波暗室內進行。測試標準:IEC 61000-…

Java多態詳解

Java多態詳解 什么是多態? 比如我們說:“駕駛一輛車”,有人開的是自行車,有人開的是摩托車,有人開的是汽車。雖然我們都說“開車”,但“怎么開”是由具體的車類型決定的:“開”是統一的動作&a…

問題及解決01-面板無法隨著窗口的放大而放大

在MATLAB的App Designer中,默認情況下,組件的位置是固定的,不會隨著父容器的大小變化而改變。問題圖如下圖所示。 解決: 為了讓Panel面板能夠隨著UIFigure父容器一起縮放,需要使用布局管理器,我利用 MATLA…

【GESP真題解析】第 20 集 GESP 二級 2025 年 3 月編程題 2:時間跨越

大家好,我是莫小特。 這篇文章給大家分享 GESP 二級 2025 年 3 月編程題第 2 題:時間跨越。 題目鏈接 洛谷鏈接:B4260 時間跨越 一、完成輸入 根據題意,輸入包含五行,每行一個正整數,分別代表 y,m,d,h,k。 注意到數據范圍:對于全部數據,保證有 2000≤y≤3000,1≤m≤…

GTS-400 系列運動控制器板卡介紹(二十一)---電子齒輪跟隨

運動控制器函數庫的使用 運動控制器驅動程序、dll 文件、例程、Demo 等相關文件請通過固高科技官網下載,網 址為:www.googoltech.com.cn/pro_view-3.html 1 Windows 系統下動態鏈接庫的使用 在 Windows 系統下使用運動控制器,首先要安裝驅動程序。在安裝前需要提前下載運動…

軟件工程之需求分析涉及的圖與工具

需求分析與規格說明書是一項十分艱巨復雜的工作。用戶與分析員之間需要溝通的內容非常的多,在雙方交流信息的過程中很容易出現誤解或遺漏,也可能存在二義性。如何才能更加準確的表達雙方的意思,且清楚明了,繪制各類圖形就顯得非常…

藍橋杯14屆 數三角

問題描述 小明在二維坐標系中放置了 n 個點,他想在其中選出一個包含三個點的子集,這三個點能組成三角形。然而這樣的方案太多了,他決定只選擇那些可以組成等腰三角形的方案。請幫他計算出一共有多少種選法可以組成等腰三角形? 輸…