![](/img/trans.png)
[英]Java SSL - Connect to secure Rest Service using pkcs12 (.p12) file
[英]Using .p12 file for SSL - Using Spring Boot
我想连接到安全的服务器端点。 服务提供商为我提供了一个 .p12 文件和密码。 在设置-> 证书--> 客户端证书下添加证书后,我尝试了对邮递员的 API 调用,结果成功。
现在我想将它集成到我的 Java 代码中。 我正在使用 Spring Boot 开发此应用程序,并且为此遵循了一些指南。我使用此命令将 .p12 文件添加到我的密钥库中。
keytool -importkeystore -srckeystore uat_client.p12 -destkeystore store.keys -srcstoretype pkcs12 -alias myownkeyname
但是每次我收到“未提供 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);
}
要将 Spring RestTemplate
配置为在HTTPS
连接中使用客户端认证,请使用以下步骤:
@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);
}
并注入restTemplate
以使用:
@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);
}
就是这样。 希望它得到解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.