在zuul的定制closablehttpclient上发送客户端证书

htrmnn0y  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(461)

我正在尝试发送一个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客户端证书发送?

chhkpiq4

chhkpiq41#

我遇到了类似的问题,在我的情况下,这是两部分的解决方案。
导入正确的证书,
我错误地创建了密钥库:

keytool -importcert -keystore keystore.jks -alias client-cert -file client-cert.pem  -storepass password

帮助我的是:

openssl pkcs12 -export -chain -in client-cert.pem  -inkey client-key.pem  -out keystore.p12 -name client-cert -CAfile ca-cert.pem
keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -alias client-cert

我在这里找到这个: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后,这个问题得到了解决。

相关问题