调用备用服务时与SSL证书相关的问题

时间:2018-09-14 22:11:03

标签: rest ssl

我们从客户端(例如:https://localhost:8080/)传递与证书相关的值,并调用其余服务(托管在不同的端口-https://localhost:446/serviceName上)。

问题就像,当我们尝试通过证书时,SSL握手正确发生(调试时没有错误),但是证书值未传递给另一个端口上托管的服务。通过参考(X509Certificate)httpReq.getAttribute(“ javax.servlet.request.X509Certificate”)在服务器代码中访问证书值;

注意:我们使用的Spring Boot应用程序通常运行在tomcat服务器上,并且所需的CA授权证书,密钥库和信任库都存在于两个项目(托管的客户端和服务)的资源路径中。在rest service项目配置文件中,client-auth设置为false。

用于调用休息服务的示例代码段:

SSLContext sslContext = SSLContexts.custom()。loadTrustMaterial(restserviceTruststore)                     .loadKeyMaterial(restserviceKeyStore,password).build();

        HttpClient client = HttpClients.custom()                    .setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
                .setSslcontext(sslContext).build();

        RestTemplate restTemplate = new RestTemplate();

        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(client));
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);

        HttpEntity<String> request = new HttpEntity<>(XML, headers);
    response = restTemplate.postForObject(endpointURL, request, String.class);

问题:

1)我们需要从客户端将什么密钥库和信任区传递给SSLContext?是服务器的密钥库/ truststore还是客户端?

2)要解决此问题应遵循哪些确切步骤。

0 个答案:

没有答案