Spring http 客户端:httpclient 上的 pkcs12 密钥库和 trustsrtore

Posted

技术标签:

【中文标题】Spring http 客户端:httpclient 上的 pkcs12 密钥库和 trustsrtore【英文标题】:Spring http client: pkcs12 keystore and trustsrtore on httpclient 【发布时间】:2020-01-18 02:40:28 【问题描述】:

在我的应用程序中,我正在使用 HttpClient 设置 ssl 上下文:

@Bean
public HttpClient httpClient() throws Exception 
    SSLContext sslContext = SSLContextBuilder.create()
        .loadKeyMaterial(
            new URL(schedulerConfiguration.getKeyStore()),
            schedulerConfiguration.getKeyStorePassword().toCharArray(),
            schedulerConfiguration.getKeyPassword().toCharArray()
        )
        .loadTrustMaterial(
            new URL(schedulerConfiguration.getTrustStore()),
            schedulerConfiguration.getTrustStorePassword().toCharArray()
        )
        .build();

    return HttpClients.custom().setSSLContext(sslContext).build();      

如您所见,我正在加载密钥库和信任库。

keystore 包含私钥,truststore 包含所有链证书。

我正在针对无法启动客户端连接运行,原因是:

原因:org.springframework.web.client.ResourceAccessException:“https://balancer:8080/token”的 GET 请求出现 I/O 错误:sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径;嵌套异常是 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

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

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

原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

我已经从这样的.p12 文件构建了我的 jks。

为了构建 trsutstore:

$ openssl pkcs12 -in fitxers.p12 -nokeys -out cacerts-nokeys.crt
$ keytool -importcert -file cacerts-nokeys.crt -keystore cacerts-pre-splitted.jks

为了创建我的密钥库:

$ keytool -importkeystore -srckeystore fitxers.p12 -srcstoretype pkcs12 -destkeystore auth-backoffice-pre.jks -deststoretype jks

有什么想法吗?

【问题讨论】:

【参考方案1】:

我记得在不正确使用别名时遇到了类似的问题。您是否在原始 p12 文件中使用别名?如果是这样,我建议使用其他方法使用自定义 PrivateKeyStrategy 加载密钥材料。

在尝试使用 vm 选项连接客户端时也请查看:

-Djavax.net.debug=all

您将能够看到更多信息。希望这可以指导您找到解决方案!

【讨论】:

以上是关于Spring http 客户端:httpclient 上的 pkcs12 密钥库和 trustsrtore的主要内容,如果未能解决你的问题,请参考以下文章

HttpClien高并发请求连接池 - PoolingHttpClientConnectionManager

Vert.x WebClient WebClientOptions

HttpClient请求URL

浅谈httpClient使用总结

使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务