Java 使用不同的用户证书进行休息

Java Rest call with different user certs

我有一组用户证书,我想使用各自的用户证书来验证用户。

我将服务器配置为启用用户身份验证。它在浏览器中运行良好。如果有多个用户证书,它会提示我 select 需要使用证书。 我的问题是,我怎样才能从 java 做到这一点?我正在使用 RestTemplate 与服务器通信。

如果是单用户证书,我可以将其添加到 java 密钥库并使用它。如何将特定用户证书用于特定休息呼叫?

此处使用的标准术语是 "client certificates",因此您可能会更幸运地使用谷歌搜索,例如"RestTemplate client certificate".

这是来自 Stack Overflow 答案的一些 copy/pasted 代码:

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(new FileInputStream(new File("keystore.jks")),
        "secret".toCharArray());
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
        new SSLContextBuilder()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .loadKeyMaterial(keyStore, "password".toCharArray()).build());
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(
        httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
ResponseEntity<String> response = restTemplate.getForEntity(
        "https://localhost:8443", String.class);