Trying to hit an external API which require certificate but getting the following error:
javax.net.ssl|WARNING|52|http-nio-8080-exec-2|2024-06-19 20:19:22.887 IST|CertificateRequest.java:767|Unsupported authentication scheme: dsa_sha256
javax.net.ssl|ALL|52|http-nio-8080-exec-2|2024-06-19 20:19:22.887 IST|X509Authentication.java:223|No X.509 cert selected for [EC, EdDSA, RSASSA-PSS, RSA, DSA]
javax.net.ssl|WARNING|52|http-nio-8080-exec-2|2024-06-19 20:19:22.887 IST|CertificateRequest.java:817|No available authentication scheme
javax.net.ssl|DEBUG|52|http-nio-8080-exec-2|2024-06-19 20:19:22.887 IST|ServerHelloDone.java:151|Consuming ServerHelloDone handshake message (
<empty>
)
javax.net.ssl|DEBUG|52|http-nio-8080-exec-2|2024-06-19 20:19:22.888 IST|CertificateMessage.java:299|No X.509 certificate for client authentication, use empty Certificate message instead
javax.net.ssl|DEBUG|52|http-nio-8080-exec-2|2024-06-19 20:19:22.888 IST|CertificateMessage.java:330|Produced client Certificate handshake message (
"Certificates": <empty list>
)
javax.net.ssl|DEBUG|52|http-nio-8080-exec-2|2024-06-19 20:19:22.896 IST|ECDHClientKeyExchange.java:407|Produced ECDHE ClientKeyExchange handshake message (
"ECDH ClientKeyExchange": {
"ecdh public": {
Definition of RestTemplate
looks like this:
@Configuration
public class SSLRestTemplate {
@Value("${trust.store.path}")
private Resource trustStore;
@Value("${trust.store.password}")
private String trustStorePassword;
@Bean(name = "sslRestTemplate")
public RestTemplate restTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException, MalformedURLException, IOException, UnrecoverableKeyException {
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray()).build();
SSLConnectionSocketFactory sslConFactory = new SSLConnectionSocketFactory(sslContext);
HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
.setSSLSocketFactory(sslConFactory)
.build();
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(requestFactory);
}
}
application.yml
is as follows:
....
trust:
store:
path: "classpath:keystore/cert.jks"
password: "password"
....
cert.jks
is stored in resources/keystore
directory.
I created cert.jks
from crt
file and key
file using open openssl.
What am I doing wrong?