1. Introduzione
In questo breve tutorial, configureremo un WebClient Spring per richieste HTTPS.
Crittografare la comunicazione HTTP rende difficile per gli attaccanti manomettere i dati degli utenti. Al giorno d’oggi, è il default per la maggior parte delle applicazioni moderne che si integrano con altri servizi.
In questa guida, inizieremo con la verifica del certificato e del file della chiave, per poi passare alla configurazione di Spring WebClient.
2. Verifica dei file di certificato e chiave
Per prima cosa, verifichiamo che il nostro certificato e il file della chiave abbiano lo stesso MD5. In questo modo ci assicuriamo che il certificato e la chiave non siano stati modificati.
Possiamo usare openssl per visualizzare l’hash MD5:
openssl x509 -noout -modulus -in yourCertificate.crt | openssl md5
Allo stesso modo, possiamo fare lo stesso per il file chiave:
openssl rsa -noout -modulus -in yourPrivateKey.key | openssl md5
Gli output corrispondenti di entrambi i comandi confermano che il tuo certificato e la tua chiave sono allineati.
Possiamo testare il certificato e la chiave con un CURL:
curl -v --cert yourCertificate.crt --key yourPrivateKey.key https://yourEndpoint.com
Ora possiamo procedere a convertire il certificato e la chiave nel formato PKCS12.
3. Conversione del Certificato e della Chiave in Formato PKCS12
Per configurare Spring WebClient, dobbiamo convertire il certificato in formato PKCS12.
Ancora una volta, utilizziamo openssl per ottenere il file formato PKCS12:
openssl pkcs12 -export -in yourCertificate.crt -inkey yourPrivateKey.key -out certificate.p12
Eseguendo il comando sopra, ci verrà chiesto di creare una password. Inseriamo una a nostra scelta e salviamola da qualche parte, poiché la riutilizzeremo quando configureremo il SslContext per il WebClient.
Ora, abbiamo un file certificate.p12 che possiamo utilizzare per configurare la nostra applicazione.
4. Configurazione dell’SSLContext
Infine, possiamo creare un SslContext che legge il file che abbiamo creato in precedenza, insieme alla password che abbiamo impostato.
Utilizzeremo SslContextBuilder per creare SslContext:
SslContext sslContext = SslContextBuilder.forClient().keyManager(
new FileInputStream("pathToP12CertificateFile"),
"password".toCharArray()).build();
Ora, il sslContext può essere utilizzato per creare un bean WebClient in grado di effettuare chiamate HTTPS sicure:
@Bean
private WebClient getSecureWebClient() {
HttpClient httpClient = HttpClient.create().secure(sslSpec -> sslSpec.sslContext(getSSLContext()));
ClientHttpConnector clientHttpConnector = new ReactorClientHttpConnector(httpClient);
return WebClient.builder()
.clientConnector(clientHttpConnector)
.build();
}
Utilizzare questo WebClient per effettuare richieste HTTPS sicure è semplice come iniettare il bean WebClient nel nostro servizio:
@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);
}
}
In effetti, non dobbiamo fare nulla di speciale nel nostro servizio per effettuare richieste HTTPS sicure. Il bean WebClient che abbiamo creato si occuperà di tutto per noi.
5. Conclusione
In questo tutorial, abbiamo convertito un certificato e un file di chiave nel formato PKCS12 e configurato un WebClient per effettuare richieste HTTPS sicure. Infine, abbiamo mostrato come possiamo utilizzare il WebClient per effettuare richieste HTTPS sicure nel nostro servizio.


