Как добавить клиентские сертификаты в Spring WebClient? - PullRequest
1 голос
/ 02 октября 2019

Я создаю Spring WebClient, который внутренне вызывает API REST, которые размещены на другом сервере. Для этого мне нужно отправлять открытый ключ (.cert) и закрытый ключ (.key) для каждого запроса на рукопожатие. Я не уверен, как это сделать с помощью Spring WebClient.

Я попытался настроить WebClient, но попытался добавить это кодовое поле

WebClient Builder

this.webCLient = WebClient.builder()
                .baseUrl("https://some-rest-api.com")
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString())
                .build();

Фактический вызов

this.webClient.get()
                .uri("/getData")
                .exchange()
                .flatMap(clientResponse -> {
                    System.out.println(clientResponse);
                    return clientResponse.bodyToMono(MyClass.class);
                });

Так каксертификаты не были добавлены в запрос, я получаю ошибку квитирования в журнале

javax.net.ssl.SSLException: Received fatal alert: handshake_failure

Как добавить эти сертификаты в запросы WebClient, чтобы я не получил эту ошибку? У меня есть сертификаты, но я не уверен, как их добавить.

1 Ответ

0 голосов
/ 03 октября 2019

взято из документации Spring Webclient - Reactor Netty

Чтобы получить доступ к конфигурациям ssl, вам необходимо предоставить настраиваемый неттет HttpClient с настраиваемым sslContext.

SslContext sslContext = SslContextBuilder
        .forClient()
        // build your ssl context here
        .build();

HttpClient httpClient = HttpClient.create().secure(sslSpec -> sslSpec.sslContext(sslContext));

WebClient webClient = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(httpClient))
    .build();
...