我正在尝试发送一个x.509客户端证书,其中包含zuul forwardproxy的传出请求。证书包含在我加载的密钥库中 loadKeyMaterial()
在sslcontext上。
代码如下:
@Bean
public CloseableHttpClient httpClient() throws Throwable {
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(new File(keyStorePath), keyStorePass, keyStorePass, new PrivateKeyStrategy() {
@Override
public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) {
return alias;
}
})
.loadTrustMaterial(new File(keyStorePath), keyStorePass, new TrustSelfSignedStrategy())
.build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1.3" },
new String[] { "TLS_DHE_RSAWITH_AES_256_GCM_SHA384" },
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
return HttpClients.custom().setSSLSocketFactory(sslsf)
.build();
}
当我提出测试请求时 Received fatal alert: handshake_failure
在详细的日志上我看到了这个消息 No X.509 certificate for client authentication, use empty Certificate message instead
. 如何使httpclient将证书作为x.509客户端证书发送?
1条答案
按热度按时间chhkpiq41#
我遇到了类似的问题,在我的情况下,这是两部分的解决方案。
导入正确的证书,
我错误地创建了密钥库:
帮助我的是:
我在这里找到这个:https://blogs.oracle.com/jtc/installing-trusted-certificates-into-a-java-keystore
springcloudstarterzuul1.1.5.release有问题。zuul没有使用我的定制closeablehttpclient,这个问题在中得到了解决https://github.com/spring-cloud/spring-cloud-netflix/issues/2026 升级到1.4.2.release后,这个问题得到了解决。