为另一个“找不到证书”问题道歉。
我正在 Windows 7 机器上开发。我正在使用多个 Java 版本,因此对使用的 Java 版本(此处为 Java6)的路径是明确的。我通过以下两行来实现这一点:
set path=c:\Program Files\Java\jdk1.6.0_45\bin;%path%
set java_home=c:\Program Files\Java\jdk1.6.0_45
我需要使用提供 certificate.PFX 证书的第 3 方 Web 服务https://service.gov/Service.svc?wsdl(服务 URI 和证书文件都被重命名为保护第 3 方利益的一种方式)。我确保在 Windows 中导入证书文件后,我可以在浏览器中打开 WSDL 文件。
我首先在我的密钥库中导入证书(使用管理员命令提示符获取写入系统文件夹的权限):
keytool -importkeystore -srckeystore certificate.pfx -srcstoretype pkcs12 -keystore "c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts"
我收到成功通知。不过,我确保新证书出现在以下输出中:
keytool -list -keystore "c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts"
然后我创建一个新文件夹,其中包含名为 src 和 classes 的空白子文件夹。完成此操作后,我从该新文件夹运行 wsimport(使用 Java 类而不是二进制文件以确保我明确说明正在使用的信任库):
java -classpath "c:\Program Files\Java\jdk1.6.0_45\lib\tools.jar" -Djavax.net.ssl.trustStore="c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=changeit com.sun.tools.internal.ws.WsImport https://service.gov/Service.svc?wsdl -s src -d classes
输出如下:
parsing WSDL...
[ERROR] sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Failed to read the WSDL document: https://service.gov/Service.svc?wsdl, because 1) could not find the document; /2) the document could not be read; 3) the root element of the document is not <wsdl:definitions>.
[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s):
At least one WSDL with at least one service definition needs to be provided.
Failed to parse the WSDL.
WSDL 文件包含其他组织并被其他组织使用,因此问题肯定不在第 3 方一方。
我错过了什么吗?对我来说,现在这一切似乎都很明显,但它仍然不起作用。我也用Java8试过这个,结果几乎一样。唯一的区别是在 Java8 中,WsImport 类不再存在,所以我使用的是 wsimport.exe 二进制文件。
提前感谢您的任何想法或提示。