当前位置: 首页 > 面试题库 >

建立SSL连接时PKIX路径构建失败

狄鹏
2023-03-14
问题内容

我正在与一个名为CommWeb的商户帐户集成,并向其URL(https://migs.mastercard.com.au/vpcdps)发送一个SSL帖子。当我尝试发送帖子时,出现以下异常:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

执行该帖子的代码(我没有写过,并且已经存在于我们的代码库中)是:

public static HttpResponse sendHttpPostSSL(String url, Map<String, String> params) throws IOException {
    PostMethod postMethod = new PostMethod(url);
    for (Map.Entry<String, String> entry : params.entrySet()) {
        postMethod.addParameter(entry.getKey(), StringUtils.Nz(entry.getValue()));
    }

    HttpClient client = new HttpClient();
    int status = client.executeMethod(postMethod);
    if (status == 200) {
        StringBuilder resultBuffer = new StringBuilder();
        resultBuffer.append(postMethod.getResponseBodyAsString());
        return new HttpResponse(resultBuffer.toString(), "");
    } else {
        throw new IOException("Invalid response code: " + status);
    }
}

商户帐户集成的文档对证书一无所知。他们确实提供了一些似乎盲目接受证书的示例JSP代码:

<%! // Define Static Constants
    // ***********************
public static X509TrustManager s_x509TrustManager = null;
public static SSLSocketFactory s_sslSocketFactory = null;

static {
        s_x509TrustManager = new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[] {}; } 
        public boolean isClientTrusted(X509Certificate[] chain) { return true; } 
        public boolean isServerTrusted(X509Certificate[] chain) { return true; } 
    };

    java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    try {
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, new X509TrustManager[] { s_x509TrustManager }, null);
        s_sslSocketFactory = context.getSocketFactory();
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e.getMessage());
    }
}

...
...
           // write output to VPC
            SSLSocket ssl = (SSLSocket)s_sslSocketFactory.createSocket(s, vpc_Host, vpc_Port, true);
            ssl.startHandshake();
            os = ssl.getOutputStream();
            // get response data from VPC
            is = ssl.getInputStream();
...
...
%>

我们的Web应用程序有一个密钥库,我尝试使用keytool命令添加证书(从firefox导出),但这没有用,并且出现了相同的错误。我已经在网络上尝试了解决方案(导入密钥并使用System.setProperty),但这似乎有些笨拙,并且没有用(给我一个NoSuchAlgorithmError)。任何帮助表示赞赏!


问题答案:

显然,valicert 3类CA证书不在您的默认信任库中(它可能是JRE lib /
security目录中的cacerts文件,但请参阅JSSE文档以获取全文)。

您可以将此证书添加到cacerts文件中,但我不建议这样做。相反,我认为您应该创建自己的信任库文件(可以是cacerts文件的副本),并在其中添加valicert根ca。然后使用javax.net.ssl.trustStore系统属性指向该文件。



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

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

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

  • 当我使用带SSL的apache camel连接到Kafka集群时,我面临以下问题,请任何人帮助解决这个问题 javax . net . SSL . SSL handshake异常:sun . security . validator . validator异常:PKIX路径构建失败:sun . security . provider . certpath . suncertpathbuildere

  • 当我从Java中的Windows(JDBC)连接Linux Oracle服务器时遇到以下错误,请问如何解决这个错误。 java.sql.SqlRecoverableException:Io异常:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderE

  • 我有一个问题,也是在这里描述的。我创建了一个证书并将其添加到tomcat的密钥库中,然后将其复制到信任库中。然而,不知何故,我还是得到了这个错误。 我所做的: 1)keytool-genkey-alias cas-keyalg RSA-keystore cas.keystore-storePass changeit keytool-list-v-keystore“C:\程序文件\java\jdk1