我必须调用通过HTTPS进行客户端身份验证的SOAP Web服务。
我已经通过keyStore文件导入了客户端证书(从托管服务器的公司获得)。我还将服务器证书(从服务器下载)导入到我的trustStore中。我已将'javax.net.ssl.keyStore'和'javax.net.ssl.keyStorePassword'设置为适当的值。
当我从一个简单的Java客户端(包括一些额外的jar)调用Web服务时,调用工作正常,我从服务器获得结果。
当我从glassfish-4(相同的java,相同的keyStore,相同的trustStore,相同的'javax.net.ssl.keyStore'值等)中调用web服务时,我得到一个异常'com.sun.xml。 ws.client.ClientTransportException:HTTP传输错误:javax.net.ssl.SSLHandshakeException:收到致命警报:unknown_ca'。
在这两种情况下,我使用相同的java,相同的密钥库,相同的trustStore。没有glassfish的第一个版本可以工作,所以证书似乎没问题。带有glassfish的第二个版本没有。
glassfish-4是否做了具体的事情? 它可能是其他(第三方)库的问题吗? 我可以尝试其他任何HTTP / SSL设置吗? 还有什么呢?
有人有想法吗? 谢谢你的帮助。
答案 0 :(得分:1)
我找到了问题。
Glassfish需要额外的VM属性' com.sun.enterprise.security.httpsOutboundKeyAlias'。 必须将其设置为客户端证书的别名。
对于标准,这是在java-config区域的domain.xml中设置的。 对于标准,这被设置为-Dcom.sun.enterprise.security.httpsOutboundKeyAlias = s1as。
将值s1as更改为证书的别名。