1. 介绍
在这个简短的教程中,我们将设置一个用于HTTPS请求的Spring WebClient
。
通过加密保护HTTP通信,使攻击者难以篡改用户数据。如今,对于大多数与其他服务集成的现代应用程序来说,这已经是默认设置。
在本指南中,我们将从证书和密钥文件验证开始,然后继续配置Spring WebClient。
2. 验证证书和密钥文件
首先,我们将验证证书和密钥文件是否具有相同的MD5。这么做可以确保证书和密钥没有被修改。
我们可以使用 openssl
来显示 MD5 哈希值:
openssl x509 -noout -modulus -in yourCertificate.crt | openssl md5
同样地,我们也可以对密钥文件进行相同的操作:
openssl rsa -noout -modulus -in yourPrivateKey.key | openssl md5
两个命令的输出匹配,确认您的证书和密钥是一致的。
我们可以使用 CURL 来测试证书和密钥:
curl -v --cert yourCertificate.crt --key yourPrivateKey.key https://yourEndpoint.com
现在,我们可以继续将证书和密钥转换为PKCS12格式。
3. 将证书和密钥转换为PKCS12格式
要配置 Spring WebClient
,我们需要将证书转换为 PKCS12 格式。
我们再次使用 openssl
来获取 PKCS12 格式的文件:
openssl pkcs12 -export -in yourCertificate.crt -inkey yourPrivateKey.key -out certificate.p12
运行上述命令会提示我们创建一个密码。输入您选择的密码并保存下来,因为我们在为WebClient
配置SslContext
时会再次使用它。
现在,我们有一个可以用来配置我们应用程序的 certificate.p12
文件。
4. 配置 SSLContext
最后,我们可以创建一个 SslContext
,它读取我们之前创建的文件,以及我们设置的密码。
我们将使用 SslContextBuilder
来创建 SslContext
:
SslContext sslContext = SslContextBuilder.forClient().keyManager(
new FileInputStream("pathToP12CertificateFile"),
"password".toCharArray()).build();
现在,sslContext
可以用于创建一个能够进行安全 HTTPS 调用的 WebClient
bean:
@Bean
private WebClient getSecureWebClient() {
HttpClient httpClient = HttpClient.create().secure(sslSpec -> sslSpec.sslContext(getSSLContext()));
ClientHttpConnector clientHttpConnector = new ReactorClientHttpConnector(httpClient);
return WebClient.builder()
.clientConnector(clientHttpConnector)
.build();
}
使用这个 WebClient
来发起安全的 HTTPS 请求非常简单,只需将 WebClient
bean 注入到我们的服务中:
@Service
public class MyService {
private final WebClient webClient;
public MyService(WebClient webClient) {
this.webClient = webClient;
}
public Mono<String> getSecureData() {
return webClient.get()
.uri("https://yourEndpoint.com")
.retrieve()
.bodyToMono(String.class);
}
}
事实上,我们不需要在服务中做任何特别的事情来发起安全的HTTPS请求。我们创建的WebClient
bean将为我们处理所有这些。
5. 结论
在本教程中,我们将证书和密钥文件转换为PKCS12格式,并配置了一个WebClient
以进行安全的HTTPS请求。最后,我们展示了如何在我们的服务中使用WebClient
来进行安全的HTTPS请求。