发现需要灵感的错误:Payara上的certificate_unknown和SSLHandshakeException

时间:2017-12-05 22:11:00

标签: java ssl openssl payara

我正在敲打错误的地方,所以我需要一点跟踪灵感的错误。

我尝试从我的dockerized Payara 4.1上运行的Java Web应用程序调用远程服务器上的Web服务。 Docker镜像使用的是带有Java 8的Alpine Linux。

当我尝试拨打该服务时,我得到了

SSLHandshakeException抛出的Certificate_unknown

我知道这意味着信任链不完整并且缺少证书(root / intermed)。

当我通过openssl与

检查ssl连接时
openssl s_client -connect server:port -CAfile certificate_exported_from_remote_server.per

工作正常('验证返回代码:0(ok)'。

openssl s_client -connect server:port -CAfile path_to_payara/config/cacerts.jks

不起作用(Verify return code: 20 (unable to get local issuer certificate)),但我还没有发现我是否可以将openssl与密钥库一起使用。

无论如何,我已经导入了我可以从远程网络服务中下载的所有证书(根/中介)'服务器并通过keytool安装它们

keytool -import -v -trustcacerts -alias cert -file downloadedcertificate.cer -keystore payara_path/config/cacerts.jks --storepass pwd -noprompt

当我使用keytool -list -keystore列出时,它显示证书已导入。

domain.xml jvm-option -Djavax.ssl.trustStore指向cacerts.jks。

我认为这是正确的方法,但我仍然遇到这个错误而且我太盲目无法看到我做错了什么。

因此,我要求一些灵感来发现错误。

1 个答案:

答案 0 :(得分:0)

如果需要使用本地生成的证书,则需要将其导入远程服务器。你做的是你将远程证书导入到本地信任商店,如果OpenSSL从信任商店中选择了一个确切的信任商店,那么它可能会有效,但我认为loca ltrust商店中有更多的证书,它会选择一个证书。不在远程服务器的信任库上。

规则很简单:客户端使用的证书必须存在于远程服务器的信任库