Certbot独立模式生成的SSL密钥库无法在Spring Boot中正常使用
问题解决方案
报错java.lang.IllegalArgumentException: Private key must be accompanied by certificate chain的常见诱因有三个:
- PKCS12证书打包时未完整包含证书链
- Spring Boot SSL配置缺失
key-store-password参数 - 启动用户无PKCS12文件读取权限
步骤1:重新生成并校验PKCS12证书
进入Certbot生成的证书对应域名目录,执行生成命令覆盖原有文件:
cd /etc/letsencrypt/live/api.example.ovh openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out pkcs.p12 -name tomcat -passout pass:aaaaaa
校验证书完整性,正常输出应包含1个私钥、2个证书(域名证书+Let's Encrypt中间证书):
openssl pkcs12 -in pkcs.p12 -info -noout -passin pass:aaaaaa
步骤2:修正Spring Boot配置
你的配置中缺少key-store-password参数,即使密钥密码和密钥库密码一致也需要单独配置,修改后的SSL配置如下:
server: port: 12345 ssl: enabled: true key-alias: tomcat key-store-type: PKCS12 key-password: aaaaaa key-store-password: aaaaaa # 新增配置项,值与密钥密码相同 key-store: /etc/letsencrypt/live/api.example.ovh/pkcs.p12
额外说明:你之前执行的keytool生成JKS密钥库的步骤是多余的,如果你要使用JKS格式,只需将配置中的key-store指向生成的.keystore文件路径,key-store-type改为JKS即可,两种格式二选一使用。
步骤3:校验文件权限
确保Spring Boot应用的启动用户对/etc/letsencrypt/archive和/etc/letsencrypt/live目录有读取权限,如果你使用非root用户启动应用,可执行以下命令开放读取权限:
chmod -R o+r /etc/letsencrypt/archive /etc/letsencrypt/live
完成以上三步后重新启动应用即可正常加载SSL证书。
内容的提问来源于stack exchange,提问作者Michael Vouriz
相关产品推荐
相关产品推荐

