Hoy vamos a ver un breve ejemplo de como configurar nuestro cliente de Apache HttpClient, básicamente veremos como crear correctamente el cliente para evitar diferentes problemas de conexión.
- Ignorar certificado SSL
Es normal cuando hagamos clientes de servicios web que nos conectemos con servidores que aunque tengan certificados SSL estos no esten firmados por una entidad certificadora de confianza. Para ello podemos usar TrustSelfSignedStrategy.
- Ignorar verificación de Hostname
También es posible que el certificado no este correctamente generado y no se encuentre el hostname del servidor dentro de su propio certificado. Para ello podemos usar SSLConnectionSocketFactory ALLOW_ALL_HOSTNAME_VERIFIER.
- Redirección
En otros servicios es posible que cuando los vayamos a invocar, nos redirigan hacia otro servidor. Normalmente podemos identificarlos a través del código HTTP de estado 302. Para ello podemos usar LaxRedirectStrategy.
Si hablamos de Apache HttpClient debemos conocer que hay un antes y despues de la versión 4.3 y que en función de la misma, dicho cliente lo crearemos de una forma u otra.
- <= 4.3
SSLContextBuilder builder = new SSLContextBuilder(); builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.setRedirectStrategy(new LaxRedirectStrategy()) .build();
- > 4.3
TrustStrategy acceptingTrustStrategy = (cert, authType) -> true; SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(acceptingTrustStrategy).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, org.apache.http.conn.ssl.NoopHostnameVerifier.INSTANCE); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder .<ConnectionSocketFactory> create().register("https", sslsf) .register("http", new PlainConnectionSocketFactory()).build(); BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager( socketFactoryRegistry); CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(sslsf)
.setConnectionManager(connectionManager) .setRedirectStrategy(new LaxRedirectStrategy()).build();
No hay comentarios:
Publicar un comentario