跳过正文

配置 Java Web 客户端以进行 HTTPS 请求

WebClient HTTPS Spring
作者
Harpal Singh
Software Engineer
翻译者
Namastecode
目录

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请求。

相关文章

如何使用Restclient重试
Spring-Boot Restclient
在 Docker 容器中运行 PostgreSQL
DevOps Postgres Docker Database