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