HTTPS加密通信详解及在Spring Boot中的实现
HTTPS(Hyper Text Transfer Protocol Secure)是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护。
一、HTTPS核心原理
1.加密流程概述
- 客户端发起HTTPS请求(连接到服务器443端口)
- 服务器返回数字证书(包含公钥)
- 客户端验证证书(检查颁发机构、有效期等)
- 密钥交换(对过非对称加密协商对称密钥)
- 加密通信(使用对称密钥加密数据传输)
2.加密技术组合
技术类型 | 作用 | 典型算法 |
---|---|---|
非对称加密 | 身份验证和密钥交换 | RSA、ECC、DH |
对称加密 | 加密实际传输数据 | AES、3DES、ChaCha20 |
哈希算法 | 保证数据完整性 | SHA-256、SHA-3 |
数字证书 | 验证服务器身份 | X.509标准 |
二、证书体系详解
1、证书类型对比
类型 | 验证级别 | 颁发速度 | 价格 | 适用场景 |
---|---|---|---|---|
DV证书 | 域名验证 | 分钟级 | 免费-低价 | 个人网站、测试环境 |
OV证书 | 组织验证 | 1-3天 | 中档 | 企业官网 |
EV证书 | 扩展验证 | 3-7天 | 高价 | 金融、电商等高安全需求 |
自签名证书 | 无第三方验证 | 即时 | 免费 | 内网、开发环境 |
2. 证书获取方式
- 购买商业证书(推荐生产环境使用)
- 主流CA机构:DigiCert、Sectigo、GlobalSign
- 云服务商提供:AWS ACM、阿里云SSL证书
- 免费证书(适合中小项目)
- Let’s Encrypt(90天有效期,需自动续期)
- Cloudflare提供的边缘证书
- 自签名证书(开发测试用)
# 使用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
六、安全加固建议
-
禁用弱协议和算法
server:ssl:enabled-protocols: TLSv1.2,TLSv1.3ciphers: "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK"
-
启用证书透明度(CT)
@Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> ctEnforcer() {return factory -> factory.addContextCustomizers(context -> {context.addParameter("certificateTransparency", "true");}); }
-
定期轮换密钥
# 生成新密钥对 openssl ecparam -genkey -name prime256v1 -out newkey.pem
相关文章:
HTTPS加密通信详解及在Spring Boot中的实现
HTTPS(Hyper Text Transfer Protocol Secure)是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护。 一、HTTPS核心原理 1.加密流程概述 客户端发起HTTPS请求(连接到服务器443端口)服务器返…...
如何让 Git 停止跟踪文件?停止后又如何恢复跟踪?
在使用 Git 管理代码时,有时我们希望某些文件不再被 Git 跟踪(比如本地配置文件、临时文件等),但保留这些文件在本地;过了一段时间,可能又需要恢复跟踪这些文件。本文将用通俗易懂的语言,教你如…...

【第16届蓝桥杯 | 软件赛】CB组省赛第二场
个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 密密摆放(5分填空题)B. 脉冲强度之和(5分填空题)C. 25 之和D. 旗帜E. 数列差分F. 树上寻宝G. 翻转硬币H. 破解信息 正文 总共8道题。 A. 密密摆放࿰…...
SQL进阶之旅 Day 10:执行计划解读与优化
【SQL进阶之旅 Day 10】执行计划解读与优化 开篇 今天是我们的"SQL进阶之旅"系列的第10天,我们将深入探讨SQL执行计划的解读与优化技巧。随着数据库规模的增长和业务复杂度的提升,理解SQL语句在数据库引擎中的执行过程变得至关重要。 执行计…...

AR/MR实时光照阴影开发教程
一、效果演示 1、PICO4 Ultra MR 发光的球 2、AR实时光照 二、实现原理 PICO4 Ultra MR开发时,通过空间网格能力扫描周围环境,然后将扫描到的环境网格材质替换为一个透明材质并停止扫描;基于Google ARCore XR Plugin和ARFoundation进行安卓手…...
Visual studio 中.sln/.vcxproj/.vcxproj.filters和.vcxproj.user文件的作用
在 Visual Studio (尤其是 C 项目) 中,.sln、.vcxproj、.vcxproj.filters 和 .vcxproj.user 文件各自承担着不同的关键角色。理解它们的作用对于项目管理和协作至关重要。 核心原则: .vcxproj 和 .sln 是项目/解决方案的核心定义文件,必须纳…...

【汽车电子入门】一文了解LIN总线
前言:LIN(Local Interconnect Network)总线,也就是局域互联网的意思,它的出现晚于CAN总线,于20世纪90年代末被摩托罗拉、宝马、奥迪、戴姆勒、大众以及沃尔沃等多家公司联合开发,其目的是提供一…...
JVM学习(七)--JVM性能监控
目录 一、JVM性能监控 1、JVM监控及诊断工具-命令行篇 2、JVM监控及诊断工具-GUI篇 3、JVM运行时参数 一、JVM性能监控 1、JVM监控及诊断工具-命令行篇 面试题: 1、你使用过Java虚拟机性能监控和故障处理工具吗? 2、怎么打出线程栈信息。 3、怎么获取 Jav…...
关于 java:5. Java IO 与文件操作
一、File 类(读取文件属性) 1.1 java.io.File 类概述 File 是 Java IO 中的核心类,用于表示文件或目录的路径名。 它是一个抽象路径名,可以表示实际存在或不存在的文件/文件夹。 File 类提供了创建、删除、重命名、判断属性、获…...

【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
📝 为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境) 🎯 安装目的说明 本次安装是为了在 MSYS2 的 MINGW64 工具链环境中,搭建一个完整的 Python 图像处理和科学计算开发环境。 主要目的是支持以下类型的 Pyth…...
【笔记】MLA矩阵吸收分析
文章目录 一、张量运算的计算量1. FLOPs定义2. 张量计算顺序对计算量的影响 二、MLA第一次矩阵吸收的计算量分析1. 原始注意力计算2. MLA源代码中的吸收方式3. 提前吸收4. 比较分析4.1 比较顺序1和顺序24.2 比较顺序2和顺序3 三、MLA第二次矩阵吸收的计算量分析1. 原始输出计算…...
600+纯CSS加载动画一键获取指南
CSS-Loaders.com 完整使用指南:600纯CSS加载动画库 🎯 什么是 CSS-Loaders.com? CSS-Loaders.com 是一个专门提供纯CSS加载动画的资源网站,拥有超过600个精美的单元素加载器。这个网站的最大特色是所有动画都只需要一个HTML元素…...
开源的JT1078转GB28181服务器
JT1078转GB28181流程 项目地址: JT1078转GB28181的流媒体服务器: https://github.com/lkmio/lkm JT1078转GB28181的信令服务器: https://github.com/lkmio/gb-cms 1. 创建GB28181 UA 调用接口: http://localhost:9000/api/v1/jt/device/add 请求体如下…...

智能守护电网安全:探秘输电线路测温装置的科技力量
在现代电力网络的庞大版图中,输电线路如同一条条 “电力血管”,日夜不息地输送着能量。然而,随着电网负荷不断增加,长期暴露在户外的线路,其线夹与导线在电流热效应影响下,极易出现温度异常。每年因线路过热…...
Java垃圾回收算法及GC触发条件
一、引言 在Java编程语言的发展历程中,内存管理一直是其核心特性之一。与C/C等需要手动管理内存的语言不同,Java通过自动垃圾回收(Garbage Collection,简称GC)机制,极大地减轻了开发人员的负担,…...

【Hot 100】118. 杨辉三角
目录 引言杨辉三角我的解题代码优化优化说明 🙋♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】118. 杨辉三角❣️ 寄语:书到用时方恨少,事非经过不知难! 引言 …...

useMemo useCallback 自定义hook
useMemo & useCallback & 自定义hook useMemo 仅当依赖项发生变化的时候,才去重新计算;其他状态变化时则不去做不必要的计算。 useCallback 缓存函数。但是使用注意📢 ,useCallback没有特别明显的优化。 *合适的场景——父…...

ffmpeg 的视频格式转换 c# win10
1,下载ffmpeg ,并设置环境变量。 ffmpeghttps://www.gyan.dev/ffmpeg/builds/ 2.新建.net 9.0 winform using System; using System.Diagnostics; using System.Text; using System.Windows.Forms;namespace WinFormsApp11 {public partial class Fo…...

【irregular swap】An Examination of Fairness of AI Models for Deepfake Detection
文章目录 An Examination of Fairness of AI Models for Deepfake Detection背景points贡献深伪检测深伪检测审计评估检测器主要发现评估方法审计结果训练分布和方法偏差An Examination of Fairness of AI Models for Deepfake Detection 会议/期刊:IJCAI 2021 作者: 背景…...

【JAVA】注解+元注解+自定义注解(万字详解)
📚博客主页:代码探秘者 ✨专栏:《JavaSe》 其他更新ing… ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏作者水平有限,欢迎各位大佬指点&…...

【Doris基础】Apache Doris中的Version概念解析:深入理解数据版本管理机制
目录 引言 1 Version概念基础 1.1 什么是Version 1.2 Version的核心作用 1.3 Version相关核心概念 2 Version工作机制详解 2.1 Version在数据写入流程中的作用 2.2 Version在数据查询流程中的作用 2.3 Version的存储结构 3 Version的进阶特性 3.1 Version的合并与压…...
【Linux 基础知识系列】第一篇-Linux 简介与历史
一、什么是 Linux? Linux 是一种类 Unix 操作系统,它是由 Linus Torvalds 于 1991 年首次发布的。作为一个开源操作系统,Linux 的源代码可以被任何人自由使用、修改和分发。在现代计算环境中,Linux 凭借其强大的性能、高稳定性、…...

【图像处理基石】如何进行图像畸变校正?
图像畸变校正常用于计算机视觉、摄影测量学和机器人导航等领域,能够修正因镜头光学特性或传感器排列问题导致的图像失真。下面我将介绍几种常用的图像畸变校正算法,并提供Python实现和测试用例。 常用算法及Python实现 1. 径向畸变校正 径向畸变是最常…...
软件开发项目管理工具选型及禅道开源版安装
软件开发项目管理工具选型及禅道开源版安装 为啥选禅道 你以为我选禅道之前没有对比吗? 作为Java码农,首先想到的就是Jira,然而它太重了。。 我们用企微作为沟通工具,腾讯的TAPD的确好用,但是它不开源啊,…...
【架构艺术】平衡技术架构设计和预期的产品形态
近期笔者因为工作原因,开始启动team内部部分技术项目的重构。在事情启动的过程中,内部对于这件事情的定性和投入有一些争论,但最终还是敲定了下来。其中部分争论点主要在于产品形态,因为事情涉及到跨部门合作,所以产品…...

电力系统时间同步系统
电力系统中,电压、电流、功率变化等特征量测量都是时间相关函数[1],统一精准的时间源对于电网安全稳定运行至关重要,因此,电力系统运行规程[2]中明确要求继电保护装置、自动化装置、安全稳定控制系统、能量管理系统和生产信息管理…...

Vue使用toFixed保留两位小数的三种写法
第一种:直接写在js里面,这是最简单的 val.toFixed(2)第二种:在ElementUi表格中使用 第三种:在取值符号中使用 {{}} 定义一个方法 towNumber(val) { return val.toFixed(2) } 使用 {{ towNumber(row.equiV…...
华为云【Astro zero】如何做“设备编辑”页面
目录 一、整体原理概述(逻辑图+原理) 1. 页面组件组装(用户交互界面) 2. 数据模型(数据临时存储) 3. 页面事件(逻辑交互) 二、详细操作步骤(按功能模块分) ✅【1】页面创建与结构组装 ✅【2】定义自定义模型与字段(临时数据绑定) ✅【3】定义服务模型(与后…...

Arch安装botw-save-state
devkitPro https://blog.csdn.net/qq_39942341/article/details/148387077?spm1001.2014.3001.5501 cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 megaton https://blog.csdn.net/qq_39942341/article/details/148388164?spm…...

电脑为什么换个ip就上不了网了
在日常使用电脑上网时,很多人可能遇到过这样的问题:当IP地址发生变化后,突然就无法连接网络了。当电脑更换IP地址后无法上网,这一现象可能由多种因素导致,涉及网络配置、硬件限制或运营商策略等层面。以下是系统性分析…...