Перейти к основному содержимому

Настройка Java Web Client для HTTPS Requests

Profile picture
Автор
Harpal Singh
Software Engineer
Profile picture
Автор
Namastecode
Оглавление

1. Введение

В этом кратком руководстве мы настроим Spring WebClient для HTTPS-запросов.

Когда мы защищаем HTTP‑связь с помощью шифрования, злоумышленникам становится сложнее изменять данные пользователей. Сегодня это по умолчанию для большинства современных приложений, интегрирующихся с другими сервисами.

В этом руководстве мы начнём с проверки certificate и key file, а затем перейдём к настройке Spring WebClient.

2. Проверка Certificate and Key Files

Сначала мы проверим, что наш certificate и key file имеют одинаковый MD5. Это гарантирует, что certificate и key не были изменены.

Мы можем использовать openssl для отображения MD5 hash:

openssl x509 -noout -modulus -in yourCertificate.crt | openssl md5

Аналогично, мы можем проделать то же самое для key file:

openssl rsa -noout -modulus -in yourPrivateKey.key | openssl md5

Совпадающие результаты обеих команд подтверждают, что наши certificate и key соответствуют друг другу.

Мы можем протестировать certificate и key с помощью CURL:

curl -v --cert yourCertificate.crt --key yourPrivateKey.key https://yourEndpoint.com

Теперь мы можем перейти к конвертации certificate и key в формат PKCS12.

3. Преобразование сертификата и ключа в формат PKCS12

Чтобы настроить Spring WebClient, нам нужно конвертировать сертификат в формат PKCS12.

Снова давайте воспользуемся openssl, чтобы получить файл в формате PKCS12:

openssl pkcs12 -export -in yourCertificate.crt -inkey yourPrivateKey.key -out certificate.p12

При выполнении приведённой выше команды нам будет предложено создать пароль. Введите любой понравившийся пароль и сохраните его в надёжном месте — мы снова будем использовать его при настройке SslContext для WebClient.

Теперь у нас есть файл certificate.p12, который мы можем использовать для настройки нашего приложения.

4. Настройка SSLContext

Наконец, мы можем создать SslContext, который читает ранее созданный файл и использует password, который мы задали.

Мы будем использовать SslContextBuilder для создания SslContext:

SslContext sslContext = SslContextBuilder.forClient().keyManager(
    new FileInputStream("pathToP12CertificateFile"),
    "password".toCharArray()).build();

Теперь sslContext можно использовать для создания WebClient bean, который позволит нам выполнять безопасные HTTPS-вызовы:

@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-запросов так же просто, как внедрить bean WebClient в наш сервис:

@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-запросов в нашем сервисе.

Related

Как выполнять повторные попытки с помощью Restclient
Давайте узнаем, как реализовать retryable calls с помощью RestClient при поддержке spring-retry. Систематически обрабатываем временные сбои при выполнении HTTP-запросов.
Запуск PostgreSQL в Docker Container
Давайте узнаем, как запустить PostgreSQL в Docker container с помощью этого пошагового руководства. Используя Docker, мы сможем легко настроить и обеспечить portability нашей PostgreSQL database.