Saltar al contenido

¿Cómo deshabilitar la comprobación de certificados SSL con Spring RestTemplate?

Sé libre de divulgar nuestro espacio y códigos con tus amigos, necesitamos tu ayuda para hacer crecer nuestra comunidad.

Solución:

Ojalá todavía tuviera un enlace a la fuente que me guiara en esta dirección, pero este es el código que terminó funcionando para mí. Al revisar el JavaDoc para X509TrustManager, parece la forma en que TrustManagerEl trabajo de s es no devolver nada en la validación exitosa, de lo contrario, lanzar una excepción. Así, con un null implementación, se trata como una validación exitosa. Luego elimina todas las demás implementaciones.

import javax.net.ssl.*;
import java.security.*;
import java.security.cert.X509Certificate;

public final class SSLUtil

    private static final TrustManager[] UNQUESTIONING_TRUST_MANAGER = new TrustManager[]
            new X509TrustManager() 
                public java.security.cert.X509Certificate[] getAcceptedIssuers()
                    return null;
                
                public void checkClientTrusted( X509Certificate[] certs, String authType )
                public void checkServerTrusted( X509Certificate[] certs, String authType )
            
        ;

    public  static void turnOffSslChecking() throws NoSuchAlgorithmException, KeyManagementException 
        // Install the all-trusting trust manager
        final SSLContext sc = SSLContext.getInstance("SSL");
        sc.init( null, UNQUESTIONING_TRUST_MANAGER, null );
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    

    public static void turnOnSslChecking() throws KeyManagementException, NoSuchAlgorithmException 
        // Return it to the initial state (discovered by reflection, now hardcoded)
        SSLContext.getInstance("SSL").init( null, null, null );
    

    private SSLUtil()
        throw new UnsupportedOperationException( "Do not instantiate libraries.");
    

Por el bien de otros desarrolladores que encuentran esta pregunta y necesitan otra solución que se ajuste no solo a las pruebas unitarias:

Encontré esto en un blog (¡no es mi solución! Crédito al propietario del blog).

TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;

SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
        .loadTrustMaterial(null, acceptingTrustStrategy)
        .build();

SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);

CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLSocketFactory(csf)
        .build();

HttpComponentsClientHttpRequestFactory requestFactory =
        new HttpComponentsClientHttpRequestFactory();

requestFactory.setHttpClient(httpClient);

RestTemplate restTemplate = new RestTemplate(requestFactory);

También puede registrar su almacén de claves:

private void registerKeyStore(String keyStoreName)  GeneralSecurityException e) 
        throw new RuntimeException(e);
    

Recuerda que tienes la opción de aclarar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *