当前位置: 首页 > 知识库问答 >
问题:

SSLHandshakeException:PKIX路径生成失败[重复]

汪正雅
2023-03-14

我一直在尝试调试这个错误,但没有成功。

本质上,我是通过我的应用程序联系外部应用程序的。连接建立良好,应用程序通过回调URL联系回我的应用程序,然后我需要向外部应用程序发送最终验证。最后一步由于SSLhandshajee异常而失败。

javax。网ssl。例外:太阳。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径

我已经看了一下可能的原因,并创建了一个信任存储,其中包含外部应用程序证书,遵循以下步骤:

  • 从浏览器下载证书链
  • 创建信任存储

keyool-导入-v-信任Cacerts-别名mycert-文件x_my_cert_location_x-keystore信任库

  • 将上述信任添加到我的setenv文件中
  • 重新启动我的tomcat实例

这并没有解决问题。

我还将cert添加到cacert文件中,并将其添加到服务器中的连接器中。xml文件如下所示:

<Connector port="${catalina.port.https}" server="Apache" protocol="HTTP/1.1"
           SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS"
           clientAuth="false"
           connectionTimeout="20000"
           compression="on"
           compressionMinSize="200"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml"
           enableLookups="false"
           URIEncoding="UTF-8"
           keystoreFile="my_store_location" keystorePass="myPwd"/>

在SSL中调试,我可以看到:

> %% Invalidated: [Session-15, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
> http-nio-8080-exec-9, SEND TLSv1.2 ALERT: fatal, description =
> certificate_unknown http-nio-8080-exec-9, WRITE: TLSv1.2 Alert, length
> = 2 [Raw write]: length = 7 0000: 15 03 03 00 02 02 2E ....... http-nio-8080-exec-9, called closeSocket() http-nio-8080-exec-9,
> handling exception: javax.net.ssl.SSLHandshakeException:
> sun.security.validator.ValidatorException: PKIX path building failed:
> sun.security.provider.certpath.SunCertPathBuilderException: unable to
> find valid certification path to requested target

这对我来说毫无意义。我的应用程序在java 1.8.242上。有什么建议吗?

共有1个答案

梁丘琛
2023-03-14

该错误表明您缺少试图访问的站点的证书。所以

>

  • -Djavax启动java/tomcat。网调试=全部。在日志中,你应该看到这样的行(我去掉了时间戳等):

     trustStore is: {your-cacerts-file} trustStore
     type is: pkcs12
     trustStore provider is: the last modified time is: Tue Feb 02 18:29:33 GMT 2021 
     Reload the trust store
     Reload trust
     Reloaded {x} trust certs adding as trusted certificates
     ( {then you get a big dump of all {x} certs.}
    

    这样你就可以确定你的cacerts是否真的被阅读。

    如果您的文件确实被Tomcat读取,那么编写您自己的小Java程序,该程序使用您的cacerts文件(使用-Djavax.net.ssl.trustStore={路径到我的文件})和上面使用的相同调试参数。您应该会在添加的证书中看到它的读取。然后从那里进行调试,也许会重新发布这个较小的案例。这不是总的答案,但至少您已经在某种程度上隔离了问题。

  •  类似资料:
    • 我正在获取javax.net.ssl.sslHandShakeException:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效认证路径异常,如何解决?这是我的密钥库

    • 我正在使用eclipse,在尝试执行此函数时,出现了以下错误。 我想发送一个GET请求以及证书和密钥。我可以下载任何格式的证书,所以这不是问题。我知道我需要将此添加到java keystone中,但在尝试了各种建议后,我仍然无法修复此问题。 下面是错误-

    • 我有一个包含各种Go服务和库的monorepo。目录结构如下所示: 这<代码>开始。mod文件位于monorepo目录的根目录中,服务使用该文件中声明的依赖项。 我使用以下命令构建Docker图像: 当我尝试使用上述Docker命令从monorepo目录的根构建Docker图像时,我得到以下错误: 复制失败:生成上下文之外的禁止路径:/去mod() 下面是我的Dockerfile 我需要做些什么才

    • 我正在使用WSO2 API管理器和Keyclope服务器进行API网关和用户身份验证。两者都在Openshift 3.11上运行。在浏览器上,尝试重定向到wso2 apim上的存储页面时出现以下错误。此外,我正在为这两个服务器使用一个使用keytool生成的自签名证书,它还分别导入到JVM cacerts中。Open JDK版本为1.8。 我在使用javax时遇到了致命的问题。网ssl。SSLEx

    • 我在Glassfish上有一个使用GoDaddy SSL证书的JAVA EE webapp。HTTP侦听器重定向到HTTPS侦听器。 我正在尝试让从Googlebot爬虫的网络应用程序中获取页面。该代码在未启用SSL的暂存服务器上按预期工作。但是,在具有GoDaddy SSL证书的实时服务器上,当尝试获取网页时,我会收到以下错误。 我已经尝试了这里指定的解决方法(http://www.mkyong