
本文详解在升级 zulu jdk 8 后,使用 apache cxf 的 cxf-codegen-plugin 执行 wsdl2java 时因 ssl 证书链不可信导致的 `pkix path building failed` 错误,并提供安全、可复现的证书导入解决方案。
该错误本质上是 JDK 的信任库(cacerts)中缺少目标 HTTPS WSDL 端点所用服务器证书的可信根证书或中间证书。当 cxf-codegen-plugin 在解析 WSDL 文件过程中,遇到
✅ 解决方案:将目标站点证书导入 JDK 的 cacerts 信任库
步骤 1:导出服务器证书
打开浏览器(推荐 Chrome 或 Firefox),访问:
https://siemops-test.siemens-energy.com/SDPService_DEV/SDPSiemopsService.svc?wsdl
点击地址栏锁形图标 → “连接是安全的” → “证书” → 切换到“详细信息”选项卡 → 点击“复制到文件…” → 选择“Base-64 编码的 X.509 (.CER)”格式 → 保存为 siemops-test.cer(例如:C:\certs\siemops-test.cer)。
? 提示:若无法直接访问 WSDL,也可用 OpenSSL 命令导出: openssl s_client -connect siemops-test.siemens-energy.com:443 -showcerts /dev/null | openssl x509 -outform PEM > siemops-test.cer
步骤 2:定位 JDK 的 cacerts 文件
Zulu JDK 的信任库路径通常为:
立即学习“Java免费学习笔记(深入)”;
{JAVA_HOME}\jre\lib\security\cacerts例如:
C:\Program Files\Zulu\zulu-8\jre\lib\security\cacerts
⚠️ 注意:务必确认你构建项目时实际使用的 JAVA_HOME(可通过 mvn -version 验证),而非系统默认 JDK。
步骤 3:使用 keytool 导入证书
以管理员权限打开命令行(Windows)或终端(macOS/Linux),执行:
"%JAVA_HOME%\bin\keytool" -import -trustcacerts -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -alias siemops-test -file "C:\certs\siemops-test.cer"
- -storepass changeit:JDK 默认 cacerts 密码为 changeit;若已修改,请替换为实际密码。
- -alias siemops-test:建议使用有意义的别名便于后续管理。
- 执行后会提示 “是否信任此证书?[否/是]”,输入 yes 确认。
✅ 导入成功后,将显示:
证书已添加到密钥库中
步骤 4:验证并重试构建
运行以下命令验证证书是否已存在:
"%JAVA_HOME%\bin\keytool" -list -v -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit | findstr "siemops-test"
确认输出中包含该别名后,重新执行 Maven 构建:
mvn clean generate-sources
此时 cxf-codegen-plugin:wsdl2java 应能成功下载并解析远程 XSD,不再报 PKIX path building failed。
⚠️ 注意事项与最佳实践
- 不要禁用 SSL 验证(如通过 JVM 参数 -Djavax.net.ssl.trustStore=... 指向空信任库或自定义不安全配置),这会严重削弱安全性,且不符合企业合规要求。
- 若服务使用私有 CA(如 Siemens 内部根证书),应优先获取其根证书(.pem 或 .crt)并统一导入所有开发/构建环境的 JDK cacerts,而非仅导入终端站点证书。
- 升级 CXF 版本(如至 3.4.5+)虽可能改善部分 SSL 兼容性,但无法绕过证书信任链校验;根本解法仍是确保 JDK 信任目标站点的证书链。
- CI/CD 流水线(如 Jenkins、GitLab CI)中需同步更新构建节点的 JDK cacerts,否则构建仍会失败。
通过以上标准化操作,即可安全、稳定地解决 JDK 升级引发的 CXF WSDL 解析 SSL 信任问题,保障契约优先(Contract-First)开发流程的可靠性。











