Я пытаюсь отправить клиентский сертификат 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?