HTTPS加密通信詳解及在Spring Boot中的實現

HTTPS(Hyper Text Transfer Protocol Secure)是HTTP的安全版本,通過SSL/TLS協議為通訊提供加密、身份驗證和數據完整性保護。

一、HTTPS核心原理

1.加密流程概述
  1. 客戶端發起HTTPS請求(連接到服務器443端口)
  2. 服務器返回數字證書(包含公鑰)
  3. 客戶端驗證證書(檢查頒發機構、有效期等)
  4. 密鑰交換(對過非對稱加密協商對稱密鑰)
  5. 加密通信(使用對稱密鑰加密數據傳輸)
2.加密技術組合
技術類型作用典型算法
非對稱加密身份驗證和密鑰交換RSA、ECC、DH
對稱加密加密實際傳輸數據AES、3DES、ChaCha20
哈希算法保證數據完整性SHA-256、SHA-3
數字證書驗證服務器身份X.509標準

二、證書體系詳解

1、證書類型對比
類型驗證級別頒發速度價格適用場景
DV證書域名驗證分鐘級免費-低價個人網站、測試環境
OV證書組織驗證1-3天中檔企業官網
EV證書擴展驗證3-7天高價金融、電商等高安全需求
自簽名證書無第三方驗證即時免費內網、開發環境
2. 證書獲取方式
  1. 購買商業證書(推薦生產環境使用)
    • 主流CA機構:DigiCert、Sectigo、GlobalSign
    • 云服務商提供:AWS ACM、阿里云SSL證書
  2. 免費證書(適合中小項目)
    • Let’s Encrypt(90天有效期,需自動續期)
    • Cloudflare提供的邊緣證書
  3. 自簽名證書(開發測試用)
# 使用OpenSSL生成
openssl req -x509 -newkey rsa:4096 -nodes \-keyout server.key -out server.crt \-days 365 -subj "/CN=yourdomain.com"

三、Spring Boot配置HTTPS

1. 基礎配置步驟
1.1 準備證書文件

將證書(.crt或.pem)和私鑰(.key)文件放入resources/ssl/目錄

1.2 配置application.yml
server:port: 443ssl:enabled: truekey-store: classpath:ssl/keystore.p12key-store-password: yourpasswordkey-store-type: PKCS12key-alias: tomcatprotocol: TLSenabled-protocols: TLSv1.2,TLSv1.3ciphers: TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256...
1.3 強制HTTP跳轉HTTPS(可選)
@Configuration
public class HttpsConfig {@Beanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);}};tomcat.addAdditionalTomcatConnectors(redirectConnector());return tomcat;}private Connector redirectConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(8080);connector.setSecure(false);connector.setRedirectPort(443);return connector;}
}
2. 高級安全配置
2.1 啟用HSTS
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.headers().httpStrictTransportSecurity().includeSubDomains(true).maxAgeInSeconds(31536000); // 1年}
}
2.2 證書自動續期(Let’s Encrypt)
@Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3點檢查
public void renewCertificate() {try {Process process = Runtime.getRuntime().exec("certbot renew --quiet");int exitCode = process.waitFor();if (exitCode == 0) {logger.info("證書續期成功");// 重新加載證書((TomcatWebServer) webServer).getTomcat().getConnector().reload();}} catch (Exception e) {logger.error("證書續期失敗", e);}
}

四、HTTPS性能優化

1. 協議與算法選擇
server:ssl:enabled-protocols: TLSv1.3 # 優先使用TLS 1.3ciphers: - TLS_AES_256_GCM_SHA384       # TLS 1.3- TLS_CHACHA20_POLY1305_SHA256 # 移動設備優化- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
2. 會話恢復技術
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {return factory -> factory.addConnectorCustomizers(connector -> {connector.setProperty("sslEnabledProtocols", "TLSv1.2,TLSv1.3");connector.setProperty("sslSessionTimeout", "3600"); // 1小時會話緩存connector.setProperty("sslSessionCacheSize", "20480"); // 緩存大小});
}
3. OCSP Stapling配置
# 生成OCSP響應文件
openssl ocsp -issuer chain.pem -cert server.crt \-url http://ocsp.digicert.com -respout ocsp.der# Nginx配置示例(Spring Boot需通過前置代理實現)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;

五、常見問題排查

1. 證書鏈不完整

癥狀:瀏覽器顯示"證書不受信任"
解決:確保包含中間證書

cat server.crt intermediate.crt > fullchain.crt
2. 混合內容警告

癥狀:HTTPS頁面加載HTTP資源
解決

  • 使用內容安全策略(CSP)
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
  • 或使用協議相對URL://example.com/resource.js
3. SSL握手失敗

診斷命令

openssl s_client -connect example.com:443 -servername example.com -tlsextdebug -showcerts

六、安全加固建議

  1. 禁用弱協議和算法

    server:ssl:enabled-protocols: TLSv1.2,TLSv1.3ciphers: "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK"
    
  2. 啟用證書透明度(CT)

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> ctEnforcer() {return factory -> factory.addContextCustomizers(context -> {context.addParameter("certificateTransparency", "true");});
    }
    
  3. 定期輪換密鑰

    # 生成新密鑰對
    openssl ecparam -genkey -name prime256v1 -out newkey.pem
    

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

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

相關文章

解決線程安全問題

前言 昨天學習了如何去解決線程不安全的問題。一般方法都是通過加鎖來處理&#xff0c;跟大家分享一波 。 解決線程安全問題 結語 希望可以幫助到大家~ byebye

網絡常識:網線和光纖的區別

網絡常識&#xff1a;網線和光纖的區別 一. 介紹二. 網線2.1 什么是網線&#xff1f;2.2 網線的主要類別2.3 網線的優勢2.4 網線的劣勢 三. 光纖3.1 什么是光纖&#xff1f;3.2 光纖的主要類別3.3 光纖的優勢3.4 光纖的劣勢 四. 網線 vs 光纖&#xff1a;誰更適合你&#xff1f…

win11 禁用/恢復 內置筆記本鍵盤(保證管用)

文章目錄 禁用啟用 禁用 1&#xff09;按下 win x&#xff0c;點擊 設備管理器 2&#xff09;拔掉所有筆記本外設&#xff08;一定要都拔掉&#xff0c;不然后面禁用設備會混淆&#xff09;&#xff0c;然后右鍵點擊 鍵盤 > HID Keyboard Device 2&#xff09;點擊 更新…

Three.js搭建小米SU7三維汽車實戰(5)su7登場

汽車模型加載 我們在sktechfab上下載的汽車是glb的文件格式&#xff0c;所以使用gltfLoader進行加載。這里將小車直接加載進來看看效果&#xff1b; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; ....其余代碼省略 const gltfLoader new GLT…

ETL怎么實現多流自定義合并?

隨著信息技術的迅猛發展以及數據生成環境的多樣化&#xff0c;互聯網、物聯網和社交媒體的廣泛應用導致各種設備和平臺不斷產生大量數據&#xff0c;需要整合這些數據&#xff0c;從而進行數據融合。數據集成和管理平臺ETLCloud&#xff0c;主要用于支持數據的抽取&#xff08;…

數據結構- 10種常見樹:二叉樹、平衡二叉樹、完全二叉樹

一、樹 樹型結構是一類重要的非線性數據結構。其中以樹和二叉樹最為常用&#xff0c;直觀看來&#xff0c;樹是以分支關系定義的層次結構。把它叫做“樹”是因為它常看起來像一棵倒掛的樹&#xff0c;也就是說它常是根朝上&#xff0c;而葉朝下的。 1.樹的定義&#xff1a; 樹…

Java常用加密方式

一&#xff0c;加密算法分類 對稱加密&#xff1a;指加密和解密的密鑰相同&#xff0c;優點就是加解密的效率高且易于實現。 非對稱加密&#xff1a;指加密和解密的密鑰不相同&#xff0c;也稱為公私要加密。 不可逆加密&#xff1a;特征就是加密過程不需要密鑰&#xff0c;…

SQLite軟件架構與實現源代碼淺析

概述 SQLite 是一個用 C 語言編寫的庫&#xff0c;它成功打造出了一款小型、快速、獨立、具備高可靠性且功能完備的 SQL 數據庫引擎。本文檔將為您簡要介紹其架構、關鍵組件及其協同運作模式。 SQLite 顯著特點之一是無服務器架構。不同于常規數據庫&#xff0c;它并非以單獨進…

讓 Deepseek GPS測速

下面是一個簡單的微信小程序GPS測速功能的實現代碼&#xff0c;包括前端頁面和后端邏輯。 1. 頁面結構 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是軟件的生命周期,以及常見的開發測試模型

目錄 一、軟件的生命周期 1、什么是生命周期&#xff1f; 2、每個階段都要做些什么&#xff1f; 二、常見的開發模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三個角色 五個會議 一、軟件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱簽名測試.【實現越權繞過.】

JWT安全&#xff1a;假密鑰【簽名隨便寫實現越權繞過.】 JSON Web 令牌 (JWT)是一種在系統之間發送加密簽名 JSON 數據的標準化格式。理論上&#xff0c;它們可以包含任何類型的數據&#xff0c;但最常用于在身份驗證、會話處理和訪問控制機制中發送有關用戶的信息(“聲明”)。…

數據分析與應用-----使用scikit-learn構建模型

目錄 一、使用sklearn轉換器處理數據 &#xff08;一&#xff09;、加載datasets模塊中的數據集 &#xff08;二&#xff09;、將數據集劃分為訓練集和測試集 ?編輯 train_test_spli &#xff08;三&#xff09;、使用sklearn轉換器進行數據預處理與降維 PCA 二、 構…

【Tomcat】Tomcat端口僅允許本地訪問設置方法

要設置Tomcat端口僅允許本地訪問&#xff0c;可以通過以下兩種主要方式實現&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推薦&#xff09; 修改 server.xml 文件 打開Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 標簽&#xff08;…

arcgis字段計算器中計算矢量面的每個點坐標

python腳本 函數 def ExportCoordinates(feat):coors = []partnum = 0partcount = feat.partCountwhile partnum < partcount:part = feat.getPart(partnum)pnt = part.next()while pnt:coors.append("({}, {})".format(pnt.X,pnt.Y))pnt = part.next()if not p…

企業級AI開啟落地戰,得場景者得天下

文&#xff5c;白 鴿 編&#xff5c;王一粟 這兩周&#xff0c;企業級智能體開發平臺頗有你方唱罷我方登臺的架勢。 微軟、騰訊、網易等國內外巨頭&#xff0c;近期都相繼宣布推出了新一代智能體開發平臺。相比于兩年前&#xff0c;智能體開發的產品邏輯已經有了翻天覆地的變…

探索C++標準模板庫(STL):String接口實踐+底層的模擬實現(中篇)

前引&#xff1a;上一篇文章小編已經整理出了String的常用接口&#xff0c;梳理了各個接口的功能、參數&#xff0c;如何使用等各種實例。本篇文章將帶大家看看String這些接口的實踐使用&#xff0c;探索這些接口的實用性&#xff0c;是如何增加代碼效率的。在本篇文章的末尾&a…

【模型顯著性分析】配對樣本 t 檢驗

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄 前言 t t t 檢驗配對樣本 t t t 檢驗&#xff08;適用于相關組&#xff09;代碼論文描…

商旅平臺排名:十大商旅服務平臺解析

商旅平臺排名&#xff1a;十大商旅服務平臺解析 在企業降本增效的關鍵轉型期&#xff0c;商旅管理正成為優化運營成本與提升管理效能的核心場景。如何在保障出行體驗的同時實現差旅成本精細化管控、管理流程智能化&#xff0c;成為越來越多企業的戰略焦點。隨著AI技術在數據洞…

題海拾貝:P1208 [USACO1.3] 混合牛奶 Mixing Milk

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 歡迎點贊&#xff0c;關注&am…

每天掌握一個Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南 一、工具概述 ab&#xff08;Apache Benchmark&#xff09; 是 Apache 官方提供的開源壓力測試工具&#xff0c;用于衡量 Web 服務器的性能。它通過模擬多并發請求&#xff0c;測試服務器在高負載下的響應速度、吞吐量和穩定性&#xff0c;常用于…