【发布时间】:2020-10-12 17:57:40
【问题描述】:
有人可以帮我解决以下问题吗:
我有一个启用了 SSL 的 REST 服务器和一个位于 2 台不同计算机上的 REST 客户端。两者都是用 Spring Boot 构建的。服务器将具有 .p12 或 .pfx 证书。
如果 REST 客户端想要向服务器发出请求,它是否需要提供证书,或者即使服务器是安全的,它也可以使用简单的 RestTemplate 发出请求?相同的规则是否适用于 Postman,或者 Postman 也可以在没有证书的情况下发送请求?
我尝试使用带有证书的 REST 模板从 REST 客户端创建请求。但我不确定,我应该提供哪个证书。它应该是服务器上的相同证书还是另一个证书?并且来自服务器的证书是否需要对 REST 客户端的 ip 有一个规则以允许请求?
ssl服务器配置:
ssl:
key-store-type: PKCS12
key-store: ${MY_DIR}/config/ssl/myCert.pfx
key-store-password: 123456
来自客户端的其余模板:
RestTemplate restTemplate = null;
try {
SSLContext sslContext = SSLContextBuilder
.create()
.loadTrustMaterial(ResourceUtils.getFile("classpath:config/ssl/myCert.pfx"), password.toCharArray())
.build();
HttpClient client = HttpClients.custom()
.setSSLContext(sslContext)
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(client);
restTemplate = new RestTemplate(requestFactory);
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | KeyManagementException ex) {
LOGGER.error("Error getting the RestTemplate with ssl certificate", ex);
}
【问题讨论】:
标签: spring-boot ssl https resttemplate