当前位置: 首页 > news >正文

SpringBoot 配置 HTTPS(自签名证书+正式证书)

做项目时,只要涉及“用户登录、支付、敏感数据传输”,就必须用 HTTPS——否则数据在网络上明文传输,很容易被劫持、篡改。

HTTPS 是不是只能买证书?自签名证书能不能用?SpringBoot 里怎么配?

今天就把 SpringBoot 配置 HTTPS 的全流程讲透:

  • 开发环境:生成自签名证书(免费,不用花钱);

  • 生产环境:配置正式 SSL 证书(阿里云/腾讯云免费申请);

  • 额外技巧:配置 HTTP 自动跳转 HTTPS(用户输 http 也能自动到 https)。

纯实操,跟着做就能搞定,再也不用怕“HTTPS 配置报错”。

先搞懂核心:HTTPS 证书的两种类型

证书类型

自签名证书(开发/测试用)

正式 SSL 证书(生产用)

核心特点

自己生成,免费,浏览器会提示“不安全”

权威机构签发,免费/付费,浏览器信任

适用场景

本地开发、测试环境

生产环境、对外提供服务的项目

获取方式

用 JDK 的 keytool 命令生成

阿里云/腾讯云/Let's Encrypt 申请

浏览器表现

标红、提示“证书不受信任”

显示绿色小锁,提示“安全”

一句话总结:开发用自签名(省钱、方便),生产用正式证书(安全、用户体验好)。

开发环境——生成自签名证书

JDK 自带keytool工具,不用装额外软件,一行命令就能生成证书。

第一步:生成自签名证书

打开命令行(Windows 用 cmd,Linux/Mac 用终端),执行以下命令:

1# 生成 JKS 格式证书(SpringBoot 推荐格式) 2keytool -genkeypair-alias springboot-https -keyalg RSA -keysize2048-storetype JKS -keystore springboot-https.jks -validity3650

命令参数解释(不用记,直接复制用):

  • -alias

    :证书别名(随便起,比如 springboot-https);

  • -keyalg

    :加密算法(RSA,通用);

  • -keysize

    :密钥长度(2048,足够安全);

  • -storetype

    :证书格式(JKS,SpringBoot 支持);

  • -keystore

    :证书文件名(springboot-https.jks);

  • -validity

    :有效期(3650 天,约10年)。

执行命令后,会提示输入信息,按提示填(开发环境随便填,不用真实信息):

输入密钥库口令: 123456 (设置证书密码,记下来,后面要用到) 再次输入新口令: 123456 您的名字与姓氏是什么? [Unknown]: localhost 您的组织单位名称是什么? [Unknown]: dev 您的组织名称是什么? [Unknown]: test 您所在的城市或区域名称是什么? [Unknown]: beijing 您所在的省/市/自治区名称是什么? [Unknown]: beijing 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=localhost, OU=dev, O=test, L=beijing, ST=beijing, C=CN 是否正确? [否]: y 输入的密钥口令: (直接回车,和密钥库口令一致)

执行完成后,当前目录会生成springboot-https.jks文件(这就是自签名证书)。

第二步:把证书放到项目里

把生成的springboot-https.jks复制到 SpringBoot 项目的src/main/resources目录下(方便读取)。

第三步:配置 application.yml 启用 HTTPS
1server: 2port:443# HTTPS 默认端口是 443(不用8080了) 3 ssl: 4# 证书路径(resources 下的 jks 文件) 5key-store: classpath:springboot-https.jks 6# 证书格式(JKS) 7key-store-type: JKS 8# 证书别名(和生成时的 -alias 一致) 9key-alias: springboot-https 10# 证书密码(生成时设置的 123456) 11key-store-password:123456
第四步:启动项目,测试 HTTPS
  1. 启动 SpringBoot 项目,日志里没有报错,说明配置成功;

  2. 打开浏览器,访问https://localhost(不用加端口,443 是默认端口);

  3. 浏览器会提示“您的连接不是私密连接”(自签名证书的正常现象),点击“高级”→“继续访问localhost(不安全)”;

  4. 能正常访问接口,说明 HTTPS 配置成功。

⚠️ 开发环境小技巧:如果想去掉浏览器的“不安全”提示,可以把自签名证书导入浏览器(具体步骤因浏览器而异,开发环境可忽略,不影响功能)。

生产环境——配置正式 SSL 证书

生产环境不能用自签名证书(用户看到“不安全”会不敢访问),需要用权威机构签发的正式证书。

第一步:申请正式 SSL 证书(以阿里云为例,免费)
  1. 登录阿里云官网 → 搜索“SSL 证书” → 进入证书管理控制台;

  2. 点击“购买证书” → 选择“免费版 DV SSL”(个人/小企业够用) → 提交订单(免费);

  3. 填写域名(比如www.xxx.com) → 验证域名(阿里云会自动验证,不用手动操作);

  4. 验证通过后,下载证书(选择“Tomcat”格式,下载后是 zip 包)。

第二步:处理正式证书(转换成 JKS 格式)

阿里云下载的证书包含xxx.pemxxx.key文件,需要转换成 SpringBoot 支持的 JKS 格式:

  1. 解压下载的 zip 包,得到两个文件:www.xxx.com.pem(公钥)、www.xxx.com.key(私钥);

  2. 用 OpenSSL 工具转换成 PKCS12 格式(先装 OpenSSL,Windows 可下载 OpenSSL 安装包):```bash openssl pkcs12 -export -in www.xxx.com.pem -inkey www.xxx.com.key -out www.xxx.com.p12 -name springboot-https ```

  3. 用 keytool 把 PKCS12 转换成 JKS 格式:```bash keytool -importkeystore -srckeystore www.xxx.com.p12 -srcstoretype PKCS12 -destkeystore www.xxx.com.jks -deststoretype JKS ```

  4. 输入密码(设置一个新密码,记下来),完成转换,得到www.xxx.com.jks文件。

第三步:配置生产环境 HTTPS
  1. www.xxx.com.jks复制到项目src/main/resources目录;

  2. 修改application.yml(生产环境配置):```yaml server: port: 443 # 生产环境 HTTPS 默认端口 ssl: key-store: classpath:www.xxx.com.jks # 正式证书文件名 key-store-type: JKS key-alias: springboot-https # 和转换时的 -name 一致 key-store-password: 你的证书密码 # 转换时设置的密码 # 可选:开启 HTTP2(提升性能) http2: enabled: true ```

  3. 打包部署项目,访问https://www.xxx.com,浏览器会显示绿色小锁,提示“安全”。

高级技巧——HTTP 自动跳转 HTTPS

用户可能会输入http://www.xxx.com(HTTP),需要自动跳转到https://www.xxx.com(HTTPS),配置如下:

第一步:配置 HTTP 端口(比如 80)
1server: 2port:443# HTTPS 端口 3 ssl: 4# 省略 HTTPS 证书配置... 5# 配置 HTTP 端口(80) 6 http: 7port:80
第二步:添加跳转配置类
1importorg.apache.catalina.Context; 2importorg.apache.catalina.connector.Connector; 3importorg.apache.tomcat.util.descriptor.web.SecurityCollection; 4importorg.apache.tomcat.util.descriptor.web.SecurityConstraint; 5importorg.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; 6importorg.springframework.boot.web.servlet.server.ServletWebServerFactory; 7importorg.springframework.context.annotation.Bean; 8importorg.springframework.context.annotation.Configuration; 9 10@Configuration 11publicclassHttpsConfig{ 12 13// 配置 HTTP 端口(80) 14@Value("${server.http.port:80}") 15privateint httpPort; 16 17// 配置 HTTPS 端口(443) 18@Value("${server.port:443}") 19privateint httpsPort; 20 21// 核心:创建 HTTP 连接器,自动跳转 HTTPS 22@Bean 23publicServletWebServerFactoryservletWebServerFactory(){ 24TomcatServletWebServerFactory tomcat =newTomcatServletWebServerFactory(){ 25@Override 26protectedvoidpostProcessContext(Context context){ 27SecurityConstraint securityConstraint =newSecurityConstraint(); 28 securityConstraint.setUserConstraint("CONFIDENTIAL");// 强制使用 HTTPS 29SecurityCollection collection =newSecurityCollection(); 30 collection.addPattern("/*");// 所有路径都跳转 31 securityConstraint.addCollection(collection); 32 context.addConstraint(securityConstraint); 33} 34}; 35// 添加 HTTP 连接器 36 tomcat.addAdditionalTomcatConnectors(createHttpConnector()); 37return tomcat; 38} 39 40// 创建 HTTP 连接器 41privateConnectorcreateHttpConnector(){ 42Connector connector =newConnector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL); 43 connector.setScheme("http"); 44 connector.setPort(httpPort);// HTTP 端口 45 connector.setSecure(false); 46 connector.setRedirectPort(httpsPort);// 跳转到 HTTPS 端口 47return connector; 48} 49}

配置完成后,访问http://www.xxx.com会自动跳转到https://www.xxx.com,用户体验更好。

必避的 4 个坑
  1. 证书密码错误


    启动报错java.io.IOException: Keystore was tampered with, or password was incorrect
    解决:核对key-store-password是否和生成/转换证书时的密码一致。

  2. 证书别名错误


    启动报错Alias name springboot-https does not exist
    解决:key-alias必须和生成证书时的-alias一致。

  3. 端口被占用


    443/80 端口被其他程序占用(比如 IIS、Nginx),启动报错Address already in use
    解决:要么杀掉占用端口的进程,要么临时改端口(比如 HTTPS 用 8443,HTTP 用 8080)。

  4. 正式证书域名不匹配


    访问https://xxx.com提示“证书域名不匹配”;
    解决:申请证书时的域名必须和访问的域名一致(比如申请www.xxx.com,就不能用xxx.com访问)。

生产环境额外建议
  1. 证书过期提醒

    :正式证书有有效期(免费版一般1年),记得提前续期;

  2. Nginx 反向代理 HTTPS

    :生产环境建议用 Nginx 配置 HTTPS(性能更好),SpringBoot 只处理业务逻辑;

  3. 禁用 HTTP 端口

    :如果不需要跳转,直接禁用 80 端口,只开放 443;

  4. 配置 SSL 协议

    :只启用 TLS 1.2/1.3(禁用老的 SSLv3/TLS 1.0),提升安全性:```yaml server: ssl: enabled-protocols: TLSv1.2,TLSv1.3 ciphers: ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256 ```

最后说两句

HTTPS 配置看似复杂,核心就三步:

  • 开发环境:用 keytool 生成自签名证书,配置 443 端口;

  • 生产环境:申请正式证书,转换成 JKS 格式,配置 HTTPS;

  • 可选:配置 HTTP 自动跳转 HTTPS,提升用户体验。

不管是自签名还是正式证书,配置逻辑都是一样的——只是证书的来源不同。做好 HTTPS 配置,是保障项目数据安全的基础,也是生产环境上线的必备条件。

下一期,咱们会讲:SpringBoot 集成 Spring Security 实现用户认证(登录、权限控制),结合 HTTPS 打造安全的用户体系。

如果这篇文章帮你搞定了 HTTPS 配置,麻烦点个赞、在看,关注我,后续还有更多 SpringBoot 安全实战技巧,从入门到精通~


http://www.jsqmd.com/news/526665/

相关文章:

  • 保姆级教程:用Ubuntu系统给BPI-R4开发板刷机的完整流程(含跳线设置图解)
  • Comsol锁相热成像模型:探索与实践
  • BC范式(BCNF)学习
  • 零代码玩转mPLUG视觉问答:本地图片分析工具部署
  • GEO 优化服务商 2026 新观察:TOP5 服务商创新方向与服务升级
  • 水墨江南模型C语言基础调用示例:轻量级嵌入式集成探索
  • 盛思锐SEN66 - 关于环境监测类传感器的久远回忆(跑题)
  • 一篇文章入门机器学习与PyTorch张量
  • 2026现浇楼板公司分析靠前推荐,品质有保障,现浇别墅搭建/阁楼现浇/现浇搭建/现浇二次结构,现浇楼板公司哪家好分析 - 品牌推荐师
  • 从夯到拉,锐评5大主流消息队列
  • 最近爆火的全中文LLM教程!!非常详细收藏我这一篇就够了+
  • CT1780 K型热电偶传感器:单总线高温测量方案
  • 告别默认页:在 Ubuntu 22.04 上用 Apache 快速部署你的第一个静态网站(从域名绑定到上线)
  • 突破30,000!信创模盒构建国产算力适配新极点,深度攻克大模型部署工程瓶颈
  • 海康VisionMaster实战解析:本地图像高效导入与关键参数调优指南
  • OWL ADVENTURE与ComfyUI工作流结合:构建可视化AI视觉创作平台
  • 广州HCIE线下培训班哪家靠谱?五家机构对比推荐,带你了解哪家好
  • EagleEye快速入门:DAMO-YOLO TinyNAS目标检测三步上手
  • 用蓝桥杯5G仿真平台复现一个微型5G SA网络:AMF、UPF、SMF网元配置全解析
  • DDColor黑白老照片修复实战:人物/建筑一键上色,效果自然真实
  • TRO案件组团和解中
  • 2026年质量好的金属撕碎机工厂推荐:小型撕碎机/大型撕碎机/双轴撕碎机制造厂家推荐 - 行业平台推荐
  • seo搜索引擎排名影响因素主要有
  • 盘点JDK19的新特性:虚拟线程领衔,Java并发编程与语法迎来重磅升级
  • 每日算法练习:LeetCode 135. 分发糖果 ✅
  • OpenClaw 中 web_search + web_fetch 最佳实践速查表
  • wwwww
  • OpenCore Legacy Patcher:老Mac设备的系统兼容解决方案
  • NFS共享那些坑:从‘insecure参数‘到‘nolock选项‘的避坑指南(附CentOS8实测)
  • 手把手教你用Chainlink喂价:从零搭建一个DeFi借贷协议的清算触发器