gpt4 book ai didi

java - 使用 .p12 文件进行 SSL - 使用 Spring Boot

转载 作者:行者123 更新时间:2023-12-01 18:02:08 27 4
gpt4 key购买 nike

我想连接到安全服务器端点。服务提供商向我提供了 .p12 文件和密码。在设置 --> 证书--> 客户端证书下添加证书后,我尝试对 postman 进行 API 调用,结果成功。

现在我想将其集成到我的 java 代码中。我正在使用 Spring boot 开发此应用程序,并且为此遵循了几个指南。我使用此命令将 .p12 文件添加到我的 keystore 中。

keytool -importkeystore -srckeystore uat_client.p12 -destkeystore store.keys -srcstoretype pkcs12 -alias myownkeyname 

但是每次我收到“未提供 SSL 客户端证书”时,这与我未在 postman 中添加证书时得到的响应相同。

我知道这不是寻求帮助的理想方式,因为我没有太多代码可以展示。而且我对 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);
}

最佳答案

您必须将 RestTemplate 配置为在 HTTPS 连接中使用客户端证书,如下所示。

@Bean
public RestTemplate restTemplate() throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException {
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream("certfile-path"), "certificate-password".toCharArray());

SSLContext sslContext = SSLContextBuilder.create()
.setProtocol("TLS")
.loadKeyMaterial(clientStore, "certificate-password".toCharArray())
.loadTrustMaterial(new TrustSelfSignedStrategy())
.build();

SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory)
.build();

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);

return new RestTemplate(requestFactory);
}

并注入(inject)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);
}

关于java - 使用 .p12 文件进行 SSL - 使用 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60611646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com