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

找不到请求的目标PKIX路径的有效证书路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException

汪才
2023-03-14

我已经创建了一个自定义密钥库文件xyz。jsk,当我试图使用这个文件时,我遇到了异常

org.springframework.web.client.资源访问异常: I/O错误的POST请求:sun.security.validator.Validator异常: PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderExc0019:无法找到有效的认证路径请求的目标;嵌套异常是javax.net.ssl.SSLHandshakeExc0019:<--PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderExc0019:无法找到有效的认证路径到请求的目标

   String keyStorePassword = "NEWPASSWORD";
     KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
     ClassLoader classLoader = getClass().getClassLoader();
    //  File file = new 
   File(classLoader.getResource(keyStoreFile).getFile());

     File file = new File(dir, "xyz.jks");;


    keyStore.load(new FileInputStream(file), 
    keyStorePassword.toCharArray());

    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
            new SSLContextBuilder()
                    .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                    .loadKeyMaterial(keyStore, keyStorePassword.toCharArray())
                    .build(),
            NoopHostnameVerifier.INSTANCE);

    HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();

        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        restTemplate.setRequestFactory(httpRequestFactory);

    ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory())
            .setConnectTimeout(Integer.parseInt(strTimeOut));
    ResponseEntity<String> responseEntity = restTemplate.exchange(urlPath, HttpMethod.POST, entity, clazz);

共有1个答案

林念
2023-03-14

证书解决方案的编程解决方案
请查看以下导入:-

import java.security.SecureRandom;
import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

现在是函数

ClientConfig clientConfig = getClientConfig();

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
    return null;
}

public void checkClientTrusted(X509Certificate[] certs, String authType) {
}

public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
SSLContext sc = null;
try {
    sc = SSLContext.getInstance("TLS");
    sc.init(null, trustAllCerts, new SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
    // do nothing
    }

    Client client = ClientBuilder.newBuilder().withConfig(clientConfig).sslContext(sc).hostnameVerifier((s1, s2) -> true)
    .build();
 类似资料:
  • 我正在使用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

  • 我正在尝试使用twitter4j库为我的Java项目获取tweets,该项目使用(可以在stack trace中看到)。在第一次运行时,我收到一个关于证书和的错误。然后我通过以下方式添加了twitter证书: 但没有成功。下面是获取Tweets的程序: 这里有一个错误:

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

  • 问题内容: 我正在尝试为我的Java项目使用twitter4j库获取推文。在我的第一次运行中,我得到了关于证书和的错误。然后我通过以下方式添加了Twitter证书: 但是没有成功。这是获取推文的过程: 这是错误: 问题答案: 在你的firefox浏览器中转到URL,单击HTTPS证书链(URL地址旁边的锁定图标)。点击。提取名称,然后选择文件类型。现在,你有了带有密钥库的文件,并且必须将其添加到J

  • 在将java版本从1.8.0_231更新到1.8.0_241之后,我得到了与证书配置相关的错误。 在spring启动期间,我正在设置keystore和keystorepass,并在spring框架提供的RestTemplate的帮助下进行rest调用。 调用rest服务后,我得到了sun。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。