Kal*_*ghe 3 java ssl jks pkcs#12 spring-boot
我想连接到安全的服务器端点。服务提供商为我提供了一个 .p12 文件和密码。在设置-> 证书--> 客户端证书下添加证书后,我尝试了对邮递员的 API 调用,结果成功。
现在我想将它集成到我的 Java 代码中。我正在使用 Spring Boot 开发此应用程序,并且为此遵循了一些指南。我使用此命令将 .p12 文件添加到我的密钥库中。
keytool -importkeystore -srckeystore uat_client.p12 -destkeystore store.keys -srcstoretype pkcs12 -alias myownkeyname
Run Code Online (Sandbox Code Playgroud)
但是每次我收到“未提供 SSL 客户端证书”时,这与我没有在邮递员中添加证书时得到的响应相同。
我知道这不是寻求帮助的理想方式,因为我没有太多代码要展示。而且我对 Java 的这个领域很陌生。我只是要求一些指导。如果我有一个 .p12 文件,我需要遵循哪些步骤才能成功连接到服务。
public void someMethod()
{
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
String uri = "https://xx.net/api/v2/somemethod";
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
String result = restTemplate.getForObject(uri, String.class);
System.out.println("Result " + result);
}
Run Code Online (Sandbox Code Playgroud)
To configure Spring RestTemplate to use a client certification in a HTTPS connection, use following steps:
@Bean
public RestTemplate restTemplate() {
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream("certfile-path"), "certificate-password".toCharArray());
SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
sslContextBuilder.useProtocol("TLS");
sslContextBuilder.loadKeyMaterial(clientStore, "certificate-password".toCharArray());
sslContextBuilder.loadTrustMaterial(new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build());
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory)
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(requestFactory);
}
Run Code Online (Sandbox Code Playgroud)
and Inject restTemplate for using:
@Autowired
RestTemplate restTemplate;
public void someMethod() {
HttpHeaders httpHeaders = new HttpHeaders();
String uri = "https://xx.net/api/v2/somemethod";
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
String result = restTemplate.getForObject(uri, String.class);
System.out.println("Result " + result);
}
Run Code Online (Sandbox Code Playgroud)
That's it. Hope it is solved.
| 归档时间: |
|
| 查看次数: |
3601 次 |
| 最近记录: |