Skip to content

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的基础上才能开启

最后就可以通过https协议通讯啦