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

Sun.Security.Validator.ValidatorException:PKIX路径构建失败

缪茂勋
2023-03-14

我使用以下命令创建了CSR请求:

openssl请求-out CertificateCsr.csr-new-newkey rsa:2048-keyout CertificateKey.key

之后,CA将与我共享证书(.cer)文件。

在此之后,我使用key将.cer文件转换为.p12。

使用CA发送的cer和私钥创建.p12证书

C:\Java\jdk1.6.0_38\jre\bin>openssl pkcs12-export-in C:\users\asharma1\cert.cer-inkey certificatekey.key-out

证书P12

正在创建JKS密钥库:

keytool-genkey-alias quid-keystore quid.jks

将.p12证书导入jks密钥库

C:\Java\jdk1.6.0_38\jre\bin>keytool-v-importkeystore-srckeystore C:\openssl-win64\bin\certi.p12-srcstoreType PKCS12

-destKeystore quid.JKS-destStoreType JKS

但是当我引用Java代码中的JK时,我得到了这个错误:

Sun.Security.Validator.ValidatorException:PKIX路径生成失败:

Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径

我还将cer文件添加到cacerts.,但仍然得到相同的错误。

就Java代码而言,我引用这个链接是为了引用我自己创建的密钥库:

http://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-Java-信托-商店/

public SSLContext getSSLContext(String tspath) 
        throws Exception {

      TrustManager[] trustManagers = new TrustManager[] { 

        new ReloadableX509TrustManager(tspath) 
      };
      SSLContext sslContext = SSLContext.getInstance("TLS");

      sslContext.init(null, trustManagers, null);

      return sslContext;

    }

SSLContext sslContext=getSSLContext("C:\\Java\\jdk1.6.0_38\\jre\\bin\\quid.jks");
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
URL pickUrl = new URL(pickupLocation);
URLConnection urlConn = pickUrl.openConnection();
HttpsURLConnection httpsURLConn = (HttpsURLConnection)urlConn;
httpsURLConn.setSSLSocketFactory(socketFactory);
String encoding = urlConn.getContentEncoding();   
InputStream is = urlConn.getInputStream();    
InputStreamReader streamReader = new InputStreamReader(is, encoding != null
? encoding : "UTF-8");

请注意我没有使用任何服务器。我正在尝试运行上面写的代码只有主方法。

请告诉我需要做什么。为什么我需要将我的.cer文件转换为.p12文件?

共有1个答案

司徒河
2023-03-14

我建议您将CA证书(或整个CA链和中间CA)导入到密钥库。

我想p12是进口的。我所建议的是将链导入密钥存储库。至少错误消息是这样说的。

我推测:

  • 链中的根CA不受信任,因此链构建失败或
  • 链中的证书中没有AIA部分,因此无法获取到可信根CA的证书,因此链构建失败,或者
  • 由于AIA没有在Java实现(我不是Java程序员),因此无法根据AIA获取证书,因此链构建失败

您可以使用portecle导入丢失的受信任CA证书(而不是结束您在.p12或从颁发CA接收的单独的.cer文件中的实体cartificate)。它比KeyTool对用户更友好。只要按照这个指南操作就可以了。

 类似资料:
  • 我已经研究了可能的原因,并按照以下步骤创建了一个包含外部应用程序证书的truststore: 从浏览器下载证书链 使用创建truststore keytool-import-v-trustcacerts-alias mycert-file x_my_cert_location_x-keystore truststore null 在SSL调试中,我可以看到: 对我来说毫无意义。我的应用程序在Jav

  • Sun.Security.Validator.ValidatorException:PKIX路径生成失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径;嵌套异常为javax.net.ssl.sslHandShakeException:Sun.Security.Validator.Validator

  • 我刚刚为我们的域名购买了一个新的通配符ssl证书,因为我们的旧证书即将到期。我已经将它安装在我们的cas服务器和应用服务器上,但是我在我们的应用服务器上得到以下堆栈跟踪: 两个服务器上的证书是相同的。

  • 问题内容: 我收到此错误: 我正在使用Tomcat 6作为Web服务器。我有两个HTTPS Web应用程序安装在不同端口上但在同一台机器上的不同Tomcat上。说App1(port 8443)和 App2(port 443)。App1连接到App2。当App1连接到App2我得到以上错误。我知道这是一个非常常见的错误,因此在不同的论坛和站点上遇到了许多解决方案。我在server.xml两个Tomc

  • 我正在使用一个自定义的工件库来部署我的项目。当我在本地机器上工作时,这很好,但我已经启用了Gitlab的AutoDevOps功能,并将我的项目与Kubernetes集群集成。 kubernetes集群由rancher管理。 问题是在Gitlab上运行的构建失败并出现以下错误: 插件org.apache.maven。插件:maven resources插件:2.6或其一个依赖项无法解析:无法读取or

  • 问题内容: 我正在与一个名为CommWeb的商户帐户集成,并向其URL(https://migs.mastercard.com.au/vpcdps)发送一个SSL帖子。当我尝试发送帖子时,出现以下异常: 执行该帖子的代码(我没有写过,并且已经存在于我们的代码库中)是: 商户帐户集成的文档对证书一无所知。他们确实提供了一些似乎盲目接受证书的示例JSP代码: 我们的Web应用程序有一个密钥库,我尝试使