我正在敲打错误的地方,所以我需要一点跟踪灵感的错误。
我尝试从我的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。
我认为这是正确的方法,但我仍然遇到这个错误而且我太盲目无法看到我做错了什么。
因此,我要求一些灵感来发现错误。
答案 0 :(得分:0)
如果需要使用本地生成的证书,则需要将其导入远程服务器。你做的是你将远程证书导入到本地信任商店,如果OpenSSL从信任商店中选择了一个确切的信任商店,那么它可能会有效,但我认为loca ltrust商店中有更多的证书,它会选择一个证书。不在远程服务器的信任库上。
规则很简单:客户端使用的证书必须存在于远程服务器的信任库
中