glassfish SSLHandshakeException:收到致命警报:unknown_ca

glassfish SSLHandshakeException: Received fatal alert: unknown_ca

我必须通过 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' 值等)中调用网络服务时,出现异常 'com.sun.xml.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: Received fatal alert: unknown_ca' .

我在两种情况下都使用相同的 java、相同的密钥库、相同的 trustStore。没有 glassfish 的第一个版本有效,所以证书似乎没问题。带有 glassfish 的第二个版本没有。

glassfish-4 有什么具体的作用吗? 这可能是其他(第三方)图书馆的问题吗? 是否有任何其他 HTTP/SSL 设置可供我尝试? 还能是什么?

有什么想法吗? 感谢您的帮助。

我找到问题了。

Glassfish 需要额外的 VM 属性 'com.sun.enterprise.security.httpsOutboundKeyAlias'。 这必须设置为客户端证书的别名。

对于标准,这是在 java-config 区域的 domain.xml 中设置的。 对于标准设置为 -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as.

将值 s1as 更改为证书的别名。