繁体   English   中英

将 .p12 文件用于 SSL - 使用 Spring Boot

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM