SSLHandshakeException - PKIX - 将 Glassfish 2 迁移到 5 后

问题描述 投票:0回答:1

我有一个在 Glassfish 2.1 上运行的应用程序。迁移到使用 Glassfish 5.1 后,我遇到了一个问题。例如,每次我的应用程序向外部 API 或 Amazon SQS 发出任何请求时,我都会收到以下错误:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

迁移之前,所有请求均成功运行。

我已经尝试设置此属性:

System.setProperty("com.sun.net.ssl.checkReplication", "false"); System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key"); System.setProperty("javax.net.ssl.trustStorePassword","qwerty");

并添加到domain.xml中

-Djava.net.preferIPv4Stack=true

而且,我已经尝试创建一个自定义类来实现

X509TrustManager

谁能帮我解决这个问题吗?

已尝试上述所有解决方案,错误仍然相同。

java-8 migration glassfish glassfish-5
1个回答
0
投票

这是因为您通过 HTTPS 调用外部 API,如果外部服务提供 GlassFish 可以信任的证书,GlassFish 仅允许此类连接。

GlassFish 仅信任 GlassFish 域中信任存储文件

cacerts.jks
中的证书。 GlassFish 2 可能没有此要求,它允许连接到任何外部服务。

GlassFish 问题跟踪器上有关于此问题的讨论:https://github.com/eclipse-ee4j/glassfish/issues/24523#issuecomment-1657651280

解决方案是下载外部API提供的证书并将其安装到

cacerts.jks
文件中,该文件位于GlassFish域的
config
目录中。您可以使用 JDK 中提供的 keytool 命令行工具。

或者,您可以将 JDK 中的所有证书导入到

cacerts.jks
文件中。如果外部服务提供由受信任的公共机构签署的证书,那么可能就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.