<p>Spring Boot 启用 HTTPS 的本质是让内嵌 Tomcat 加载 SSL/TLS 证书并监听 HTTPS 端口;需三步:本地用 keytool 生成 PKCS12 自签名证书、放入 resources 目录、在 application.yml 中严格匹配配置 server.ssl.* 参数(含端口、路径、密码、别名),生产环境需将 PEM 证书转为 PKCS12 并确保域名一致,还可配置 HTTP 重定向至 HTTPS。</p>

Spring Boot 启用 HTTPS 的本质,是让内嵌 Tomcat(或其他 Web 容器)加载有效的 SSL/TLS 证书,并监听 HTTPS 端口。整个过程不依赖外部服务器,纯 Java 配置即可完成,关键在证书准备、格式匹配和配置项对齐。
本地开发:用 keytool 快速生成自签名证书
无需购买或申请,JDK 自带的 keytool 即可生成 PKCS12 格式证书,适合测试与内网环境:
- 执行命令(推荐使用 PKCS12 格式,兼容性更好):
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或dev.example.com;否则浏览器会报“证书域名不匹配” - 生成的
keystore.p12文件直接放在src/main/resources/目录下,Spring Boot 可通过classpath:加载
application.yml 中启用 HTTPS
配置必须与证书参数严格一致,否则启动失败。以下为最小可用配置(端口设为 8443,避开需 root 权限的 443):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
server.port: 8443server.ssl.key-store: classpath:keystore.p12server.ssl.key-store-password: 123456server.ssl.key-store-type: PKCS12-
server.ssl.key-alias: myssl(必须与-alias值完全相同) -
server.ssl.key-password: 123456(若与密钥库密码相同,此项可省略)
生产环境:接入正规 CA 证书(如 Let’s Encrypt)
云厂商或 Certbot 下载的证书通常是 PEM 格式(cert.pem + privkey.pem),需转为 Spring Boot 支持的 PKCS12:
- 执行转换命令:
openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out keystore.p12 -name myssl -CAfile chain.pem -caname root - 过程中设置的导出密码,就是配置里的
key-store-password -
-name myssl必须与配置中key-alias保持一致 - 证书绑定的域名(Subject Alternative Name)必须与用户实际访问地址完全一致,否则浏览器拒绝信任
可选:HTTP 自动跳转 HTTPS
若希望访问 http://localhost:8080 时自动跳转到 https://localhost:8443,需额外定义一个 HTTP 连接器:
- 在配置类中添加
@Bean方法,返回一个Connector,scheme 设为http,redirectPort指向 HTTPS 端口(如 8443) - 同时注册
TomcatServletWebServerFactory,将该 Connector 添加进去 - 注意:HTTP 和 HTTPS 端口不能相同,且 redirectPort 必须与 server.ssl.port 一致

















