Spring Boot配置HTTPS的核心是内嵌Tomcat使用SSL证书启动服务,分三步:生成自签名证书(keytool命令)、将keystore.p12放入resources目录、在application.yml中配置server.ssl相关参数(含端口8443、密钥库路径、密码、别名等),生产环境需用CA签发证书并转换为PKCS12格式。

Spring Boot 配置 HTTPS 的核心是让内嵌 Tomcat 使用 SSL 证书启动 HTTPS 服务,整个过程分三步:生成或获取证书、把证书放进项目、修改配置启用 HTTPS。不复杂但容易忽略细节,比如密钥库类型、别名、密码一致性。
生成自签名证书(适合本地开发和测试)
用 JDK 自带的 keytool 工具快速生成 PKCS12 格式证书,命令如下:
keytool -genkeypair -alias myssl -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore src/main/resources/keystore.p12 -validity 3650 -storepass 123456 -keypass 123456
执行时会提示输入组织信息(如 CN=yourdomain.com),建议 CN 填写实际访问域名(如 localhost 或正式域名),否则浏览器可能报“证书不匹配”。生成后,keystore.p12 文件会自动存入 resources 目录,可直接被 Spring Boot 加载。
配置 application.yml 启用 HTTPS
在 application.yml 中添加以下配置(注意缩进和空格):
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;
• 端口默认不能设为 80 或 443(需管理员权限),开发阶段推荐 8443。
生产环境用真实证书(如 Let’s Encrypt 或云厂商免费证书)
从阿里云、腾讯云或 Certbot 获取的证书通常是 PEM 格式(.crt + .key),需先转成 PKCS12 才能被 Spring Boot 直接使用:
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 一致。注意:生产证书必须绑定正确域名,且有效期需定期更新。
可选:强制 HTTP 重定向到 HTTPS
若希望用户访问 http:// 时自动跳转 https://,需额外定义一个 HTTP 连接器并做重定向:
在主启动类中添加配置 Bean:
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
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(8443);
return connector;
}
这样,访问 8080 端口的 HTTP 请求会自动 301 跳转到 8443 的 HTTPS。


















