SpringBoot开启HTTPS
申请证书
信任证书
一般由云厂商或一些机构颁发一般是搭配自己的域名申请申请方式比较麻烦证书时间有限
自签名证书
一般是自己通过工具生成的证书比如openssl,Java的keytool。缺点是不受信任,比较明显的标识为浏览器弹出标识提示证书不安全
keytool生成
- keytool -genkeypair 生成密钥对
- -alias application 别名
- -keyalg RSA 加密算法
- -keysize 2048 密钥长度
- -keypass 123456 密钥密码
- -storetype JKS 证书类型
- -keystore server.jks 密钥名称可指定位置
- -storepass 123456 获取keystore信息的密码
- -validity 365 有效时间
bash
# JKS
keytool -genkeypair -alias application -keyalg RSA -keysize 2048 -keypass 123456 -storetype JKS -keystore server.jks -storepass 123456 -validity 365
# PKCS12
keytool -genkey -alias client -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype PKCS12 -keystore client.p12 -storepass 123456
openssl 生成
bash
openssl genrsa -out server-key.pem 2048
openssl req -new -out server.csr -key server-key.pem
openssl x509 -req -in server.csr -out server-cert.pem -signkey server-key.pem -days 3650
openssl pkcs12 -export -clcerts -in sercer-cert.pem -inkey server-key.pem -out server.p12
SpringBoot 配置
早期版本
yaml
server:
ssl:
enabled: true # 开启
key-store-type: JKS #证书类型
key-store: classpath:server.jks #证书位置classpath,file
key-store-password: 123456 #证书密码
SpringBoot3.4最新版本可以使用绑定包的方式支持动态刷新证书
同时支持老版本的证书指定方式
yaml
spring:
application:
name: bootssl
ssl:
bundle:
watch:
file:
quiet-period: 10s #设置证书监听间隔
jks: #jks配置
mybundle: #自定义名称 mybundle
key:
alias: application #别名
password: 123456 #密码
keystore:
password: 123456 #密码
location: classpath:server.jks #证书位置
type: jks #证书类型
reload-on-update: true #是否监听证书变化
client: #之定义名称
key:
alias: client
password: 123456
keystore:
password: 123456
location: classpath:client.p12
type: PKCS12
file: #自定义名称
key:
alias: client
password: 123456
keystore:
password: 123456
location: file:E:/develop/bootssl/client.p12
type: PKCS12
reload-on-update: true
server:
port: 8080
ssl:
enabled: true #开启https
bundle: file #指定证书的绑定包
http2:
enabled: true #开启http2 在https的基础上才能开启