Spring Boot 配置 HTTPS 的本质是让内嵌 Tomcat 加载 SSL 证书并启用加密连接,分三步:生成或获取证书、放入项目资源目录、修改 application.yml 启用 HTTPS;需注意密钥库类型、别名、密码一致性,开发可用 keytool 生成自签名证书,生产应使用真实证书并配置自动续期。

生成自签名证书(开发/测试用)
适合本地调试,不用花钱,但浏览器会提示“不安全”。用 JDK 自带的 keytool 一行命令搞定:
keytool -genkeypair -alias myssl -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore src/main/resources/keystore.p12 -validity 3650 -storepass 123456 -keypass 123456
执行时会提示输入组织信息,CN(Common Name)建议填实际访问域名,比如 localhost 或正式域名(如 api.example.com),否则浏览器可能报“证书不匹配”。
生成后,keystore.p12 文件自动落在 resources 目录下,可直接被 Spring Boot 加载。
立即学习“Java免费学习笔记(深入)”;
配置 application.yml 启用 HTTPS
在 application.yml 中添加以下配置(注意缩进和空格):
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
server:
port: 8443
ssl:
key-store: classpath:keystore.p12
key-store-password: 123456
key-store-type: PKCS12
key-alias: myssl
key-password: 123456
关键点:
• key-alias 必须与生成证书时 -alias 参数值完全一致
• 若 key-password 与 key-store-password 相同,可省略 key-password 行
• 开发阶段推荐端口 8443(设 443 需管理员权限)
生产环境用真实证书(如阿里云/Let’s Encrypt)
云厂商或 Certbot 下发的证书通常是 PEM 格式(.crt + .key),需先转成 PKCS12:
openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out keystore.p12 -name myssl -CAfile chain.pem -caname root
转换时会要求设置导出密码(即 key-store-password)。完成后仍按上一步方式配置 yml,确保:
• key-alias 与 -name 一致
• 证书绑定的域名必须与用户实际访问域名完全匹配
• 注意有效期,生产环境建议搭配自动续期脚本(如 Certbot renew)
可选:强制 HTTP 重定向到 HTTPS
若希望用户访问 http:// 时自动跳转 https://,需额外定义一个 HTTP 连接器并做重定向:
在主启动类中添加如下 Bean:
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(8080);
connector.setRedirectPort(8443);
return connector;
}
同时在 TomcatServletWebServerFactory 中注册该 connector,即可实现 http → https 自动跳转。

















