java - 发现需要灵感时出错 : certificate_unknown and SSLHandshakeException on Payara

标签 java ssl openssl payara

我正在努力寻找错误所在,所以我需要一些错误跟踪灵感。

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

当我尝试调用该服务时,我得到一个

Certificate_unknown 由 SSLHandshakeException 抛出

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

当我通过 openssl 检查 ssl 连接时

openssl s_client -connect server:port -CAfile certificate_exported_from_remote_server.per

它工作正常(“验证返回码:0(确定)”。

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

不起作用(验证返回码:20(无法获取本地颁发者证书)),但我还没有发现是否可以将 openssl 与 keystore 一起使用。

无论如何,我已经导入了所有证书(根/中介),我可以从远程 web 服务的服务器下载并通过 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。

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

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

最佳答案

如果需要使用本地生成的证书,需要将其导入到远程服务器。您所做的是将远程证书导入本地信任库,如果 OpenSSL 从信任库中选择了那个确切的证书,这可能会起作用,但我假设本地 ltrust 库中有更多证书,并且它选择了一个不在远程的证书服务器的信任库。

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

关于java - 发现需要灵感时出错 : certificate_unknown and SSLHandshakeException on Payara,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47663500/

相关文章:

java - 贾斯珀报告 6.3。 queryString 中使用的 plsql 语言出现 'Class com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory not found' 错误

java - JDK 1.6 和 SSL 连接

c - 使用openssl(C语言)去除解密结果中的污垢

macos - 有人曾成功将 MAC 连接到 Azure P2S 网络网关吗?没有一个文档对我有用

java - 使用 Spring Boot 动态更改静态内容

java - Java 中的名称编辑器

Java计算器

c# - 具有使用 SSL 的上下文的 UserPrincipal

apache - 如何强制 Apache 2.2 发送完整的证书链?

c++ - 由于 SSL3_GET_CLIENT_CERTIFICATE :no certificate returned,验证 SSL 客户端真实性失败