Zum Hauptinhalt springen

Konfigurieren eines Java Web Clients für HTTPS-Anfragen

WebClient HTTPS Spring
Autor
Harpal Singh
Software Engineer
Übersetzt von
Namastecode
Inhaltsverzeichnis

1. Einführung

In diesem kurzen Tutorial richten wir einen Spring WebClient für HTTPS-Anfragen ein.

Die Sicherung der HTTP-Kommunikation durch Verschlüsselung erschwert es Angreifern, Benutzerdaten zu manipulieren. Heutzutage ist dies der Standard für die meisten modernen Anwendungen, die mit anderen Diensten integriert sind.

In diesem Leitfaden beginnen wir mit der Überprüfung von Zertifikats- und Schlüsseldateien und gehen dann dazu über, den Spring WebClient zu konfigurieren.

2. Überprüfung der Zertifikats- und Schlüsseldateien

Zuerst überprüfen wir, ob unser Zertifikat und die Schlüsseldatei denselben MD5-Wert haben. Auf diese Weise stellen wir sicher, dass das Zertifikat und der Schlüssel nicht verändert wurden.

Wir können openssl verwenden, um den MD5-Hash anzuzeigen:

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

Ähnlich können wir dasselbe für die Schlüsseldatei tun:

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

Die übereinstimmenden Ausgaben beider Befehle bestätigen, dass Ihr Zertifikat und Ihr Schlüssel aufeinander abgestimmt sind.

Wir können das Zertifikat und den Schlüssel mit CURL testen:

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

Nun können wir fortfahren, das Zertifikat und den Schlüssel in das PKCS12-Format zu konvertieren.

3. Konvertierung des Zertifikats und Schlüssels in das PKCS12-Format

Um Spring WebClient zu konfigurieren, müssen wir das Zertifikat in das PKCS12-Format konvertieren.

Erneut verwenden wir openssl, um die PKCS12-formatierte Datei zu erhalten:

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

Das Ausführen des obigen Befehls wird uns dazu auffordern, ein Passwort zu erstellen. Geben Sie ein Passwort Ihrer Wahl ein und speichern Sie es an einem sicheren Ort, da wir es beim Konfigurieren des SslContext für den WebClient wiederverwenden werden.

Nun haben wir eine certificate.p12-Datei, die wir zur Konfiguration unserer Anwendung verwenden können.

4. Konfigurieren des SSLContext

Schließlich können wir ein SslContext erstellen, das die Datei liest, die wir zuvor erstellt haben, zusammen mit dem Passwort, das wir festgelegt haben.

Wir werden den SslContextBuilder verwenden, um den SslContext zu erstellen:

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

Nun kann der sslContext verwendet werden, um eine WebClient-Bean zu erstellen, die sichere HTTPS-Anrufe durchführen kann:

@Bean
private WebClient getSecureWebClient() {
    HttpClient httpClient = HttpClient.create().secure(sslSpec -> sslSpec.sslContext(getSSLContext()));
    ClientHttpConnector clientHttpConnector = new ReactorClientHttpConnector(httpClient);
    return WebClient.builder()
            .clientConnector(clientHttpConnector)
            .build();
}

Die Verwendung dieses WebClient, um sichere HTTPS-Anfragen zu stellen, ist so einfach wie das Injizieren des WebClient-Beans in unseren Service:

@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);
    }
}

Tatsächlich müssen wir in unserem Service nichts Besonderes tun, um sichere HTTPS-Anfragen zu stellen. Der von uns erstellte WebClient-Bean übernimmt alles für uns.

5. Fazit

In diesem Tutorial haben wir eine Zertifikats- und Schlüsseldatei in das PKCS12-Format konvertiert und einen WebClient konfiguriert, um sichere HTTPS-Anfragen zu stellen. Schließlich haben wir gezeigt, wie wir den WebClient verwenden können, um sichere HTTPS-Anfragen in unserem Service zu stellen.

Verwandte Artikel

Wie man mit Restclient einen Retry durchführt
Spring-Boot Restclient
# Ausführen von PostgreSQL in einem Docker-Container
DevOps Postgres Docker Database