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

Java 8访问开启SSL的AWS ALB服务JVM验证SSL证书失败如何调试

SSL握手报错调试步骤

1. 开启SSL调试日志定位异常细节

启动应用时添加JVM参数输出完整SSL握手日志:

java -Djavax.net.debug=ssl,handshake -jar your-application.jar

查看日志输出中的证书链信息,确认JVM获取到的服务端证书和预期是否一致。
注:Chrome默认使用Windows系统证书库验证证书,而JDK 1.8默认使用独立的cacerts信任库,这就是浏览器访问正常、JVM报错的核心差异

2. 验证VPN是否存在SSL中间人拦截

该问题仅在安装VPN的设备上复现,优先排查VPN的SSL拦截行为:

  • 在无VPN的正常设备上执行命令获取ALB返回的证书链:
    openssl s_client -connect <你的ALB域名>:443 -showcerts
  • 在安装VPN的故障设备上执行相同命令,对比两份输出的证书链:如果故障设备返回的证书多了一层自定义根证书,说明VPN做了SSL流量拦截,注入了自签根证书。

3. 检查JDK信任库是否包含对应根证书

JDK 1.8默认信任库路径为%JAVA_HOME%\jre\lib\security\cacerts,默认访问密码为changeit,执行以下命令查询信任库中是否包含证书链中的根证书:

keytool -list -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit | findstr "<根证书的CN名称>"

如果无匹配结果,说明JDK不信任当前返回的根证书,是报错的直接原因。

对应解决方案

场景1:VPN做SSL拦截

  • 从Chrome地址栏的证书信息中导出VPN注入的自签根证书,格式选择Base64编码的X.509(.CER)
  • 将根证书导入JDK全局信任库:
keytool -import -alias vpn-custom-root -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -file <导出的根证书本地路径.cer>

导入时输入y确认信任即可。

  • 无需修改全局配置的可选方案:启动应用时指定自定义信任库
java -Djavax.net.ssl.trustStore=<自定义信任库路径> -Djavax.net.ssl.trustStorePassword=<信任库密码> -jar your-application.jar

场景2:ALB证书链配置缺失

如果排除VPN拦截的情况,检查ALB绑定的证书是否配置了完整的中间证书链:如果是自定义上传的证书,需要补全对应CA的中间证书,确保JDK可以通过信任的根证书逐级完成证书校验。

内容的提问来源于stack exchange,提问作者Aswath Murugan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:01