Hemos estado recabando en todo el mundo online para así tenerte la respuesta a tu duda, en caso de alguna inquietud puedes dejar tu comentario y te responderemos con gusto.
Solución:
Desde javax.net.debug
log Puedo ver que está utilizando Java 7 y el cliente se resuelve en TLSv1. Desde openssl
salida que su servidor no es compatible con TLSv1.
Versión TLS. 1.1 y 1.2 están deshabilitados en Java 7 de forma predeterminada.
Aunque SunJSSE en la versión Java SE 7 es compatible con TLS 1.1 y TLS 1.2, ninguna de las versiones está habilitada de forma predeterminada para las conexiones de clientes. Algunos servidores no implementan correctamente la compatibilidad con versiones anteriores y se niegan a hablar con clientes TLS 1.1 o TLS 1.2. Para la interoperabilidad, SunJSSE no habilita TLS 1.1 o TLS 1.2 de manera predeterminada para las conexiones de clientes.
Habilite TLSv1.1 y TLSv1.2 ya sea por:
-
Argumento JVM:
-Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1
-
O establezca la misma propiedad desde el código Java:
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,TLSv1");
-
O instale los archivos de política JCE Unlimited Strength para Java 7. No estoy 100 % seguro de si este único paso resolvería el problema, aunque siempre vale la pena instalar JCE mientras permite que JVM use versiones más fuertes de los algoritmos existentes.
ACTUALIZACIÓN 29/Sep/2016:
El orden de los protocolos cambió de mejor a peor (TLS ver. 1.2 a 1) en las opciones 1 y 2.
Si está utilizando Java 7, debe indicarle explícitamente a Java que utilice el protocolo TLSv1.2. Aquí hay un ejemplo usando la configuración Spring XML.
***In any Spring bean (i.e. a controller)***
import org.apache.http.client.HttpClient;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import javax.net.ssl.SSLContext;
@Bean(name="client")
public HttpClient make() throws NoSuchAlgorithmException, KeyManagementException
SSLContext sslContext = SSLContexts.custom().build();
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
new String[]"TLSv1.2", "TLSv1.1", null, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
return HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory)
.build();
***In XML configuration files***
Podrías hacer lo mismo sin XML con algo como esto:
RestTemplate restTemplate;
public HttpClient getHttpClient() throws NoSuchAlgorithmException, KeyManagementException
SSLContext sslContext = SSLContexts.custom().build();
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
new String[]"TLSv1.2", "TLSv1.1", null, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
return HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory)
.build();
public void setUp() throws Exception
restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory(
getHttpClient()));
...