【发布时间】:2017-06-20 15:45:02
【问题描述】:
我正在使用我的应用程序中的外部 Web 服务。目前只有选定的 IP 地址被列入白名单。现在 web 服务建议在调用 web 服务时使用 jks 密钥传递自签名证书,以避免将 ip 列入白名单的过程。
webservice 客户端当前使用的是axis 1.3 api。经过探索,我找出了生成 jks 文件的 keytool 命令,并在调用服务之前使用下面的代码设置 jvm 参数
System.setProperty("javax.net.ssl.keyStore", "C:/migration/temp/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:/migration/temp/cacerts.jks");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
但它不起作用,而是我得到了以下异常
Thread-1,调用 closeSocket() 线程 1,处理异常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效 请求目标的认证路径
我的问题是有没有其他方法可以实现这一点。
【问题讨论】:
-
该服务是否需要 1-way SSL 或 2-way SSL 身份验证?
-
该错误是由于您必须信任服务器证书。在
C:/migration/temp/cacerts.jks中包含服务器证书的根CA。在执行证书认证之前发生错误 -
它的单向 SSL。此外,在从 SOAPUI 或 URLConnection 调用时,我得到了正确的响应,而没有从未列入白名单的同一 IP 地址配置任何证书
-
@pedrofb 我在 cacerts 中添加了证书,但仍然出现以下异常。 AxisFault faultCode:{schemas.xmlsoap.org/soap/envelope}客户端 faultSubcode:faultString:IP 10.16.18.141 不在允许的 IP 列表中。 (来自客户)
-
似乎是从服务器收到一个Fault,所以这意味着在SSL握手期间,客户端已经成功验证了服务器证书。写信给您的服务器提供商,将您的 IP 添加到白名单中
标签: authentication certificate axis keystore