Maven执行WSDL代码生成遇SSL证书路径问题,部署jssecacerts仍未解决
解决CXF Codegen插件SSL证书信任问题(避免全局证书冲突)
你遇到的是Maven插件拉取HTTPS WSDL时的SSL证书信任问题,而且担心导入新证书会影响已有的办公证书配置,下面几个方案可以帮你解决这个问题:
方案1:给CXF插件单独指定信任库(推荐)
这个方法不用修改全局JDK证书库,直接让CXF插件在生成代码时使用你自定义的信任库,完美避开和办公证书的冲突。修改你的cxf-codegen-plugin配置,给对应wsdlOption添加extraargs参数:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>2.7.0</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>https://wd2-impl-services5.workday.com/ccx/service/fietu1/Human_Resources/v34.0?wsdl</wsdl> <!-- 添加以下参数指定自定义信任库 --> <extraargs> <extraarg>-Djavax.net.ssl.trustStore=/absolute/path/to/your/jssecacerts</extraarg> <extraarg>-Djavax.net.ssl.trustStorePassword=changeit</extraarg> <!-- 如果你生成jssecacerts时修改了默认密码,替换成你的密码 --> </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
配置完后重新执行mvn generate-sources,插件就会用你指定的信任库去验证Workday的SSL证书了。
方案2:确认Maven实际使用的JVM路径
有时候你复制jssecacerts的JDK/JRE并不是Maven实际调用的那个,导致证书没生效。先执行以下命令查看Maven使用的Java Home:
mvn -version
找到输出里的Java home字段,比如:
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home/jre
把你的jssecacerts复制到这个路径下的lib/security目录里,然后再重新执行插件命令。
方案3:临时通过Maven命令参数指定信任库
如果你不想修改pom.xml,可以在执行Maven命令时直接传入系统参数:
mvn generate-sources -Djavax.net.ssl.trustStore=/path/to/your/jssecacerts -Djavax.net.ssl.trustStorePassword=changeit
这个方法适合临时测试,不用改动项目配置。
额外注意点
- 确保你的
jssecacerts确实包含了Workday服务器的根证书,生成时要正确导出服务器证书并导入到这个信任库中。 - 如果修改过信任库密码,一定要保证配置里的密码和实际密码一致,默认密码是
changeit。
内容的提问来源于stack exchange,提问作者fatherazrael
相关产品推荐
相关产品推荐

