You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot 2.5.0 SSL配置应用Jar运行正常,Docker Compose启动失败

问题原因及解决思路

可能的原因

  1. YAML空值解析差异:EC2的Linux环境中,Spring解析key-store-password:(无值行)时会识别为“无密码”,但Windows本地Docker环境下,可能将其解析为空字符串而非真正的无密码,导致Tomcat加载PKCS12密钥库时验证失败。
  2. JVM对PKCS12空密码的处理严格性不同:你使用的adoptopenjdk11镜像,默认安全配置可能比EC2上的JVM更严格,不允许直接加载无密码的PKCS12密钥库;而EC2的JVM可能默认开启了允许空密码的参数。
  3. 证书空密码的跨环境兼容性问题:openssl生成的无密码PKCS12,在不同JVM实现中对“空密码”的识别逻辑存在差异,导致Docker环境下无法正常加载。

解决思路

1. 为PFX证书设置实际密码(推荐)

重新生成带密码的PFX证书,彻底避免空密码带来的兼容性问题:

# 替换yourpassword为自定义密码,重新导出PFX
openssl pkcs12 -export -in 你的证书文件.pem -inkey 你的私钥文件.pem -out certificate-prod.pfx -password pass:yourpassword

同步更新application.yml配置:

server:
  port: 9090
  ssl:
    key-store: classpath:certificate-prod.pfx
    key-store-password: yourpassword
    key-store-type: PKCS12

2. 明确配置空密码的正确格式

修改application.yml,将空密码用双引号括起来,确保Spring解析为合法的空值:

server:
  port: 9090
  ssl:
    key-store: classpath:certificate-prod.pfx
    key-store-password: ""
    key-store-type: PKCS12

或者在Docker启动命令中直接传递空密码参数:

ENTRYPOINT ["sh", "-c","java -jar -Dspring.profiles.active=prod -Dserver.ssl.key-store-password='' analytics-api.jar"]

3. 开启JVM允许空密码加载PKCS12的参数

在Docker启动命令中添加JVM参数,强制允许加载无密码的PKCS12密钥库:

ENTRYPOINT ["sh", "-c","java -jar -Dspring.profiles.active=prod -Dsun.security.pkcs12.allowEmptyPassword=true analytics-api.jar"]

内容的提问来源于stack exchange,提问作者Rahul Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:15:15