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.