clase - httpurlconnection java https example
Java HttpsURLConnection y TLS 1.2 (3)
Deberá crear un SSLContext
para configurar el Protocoll:
en Java 1.8 :
SSLContext sc = SSLContext.getInstance("TLSv1.2");
// Init the SSLContext with a TrustManager[] and SecureRandom()
sc.init(null, trustCerts, new java.security.SecureRandom());
en Java 1.7 :
SSLContext sc = SSLContext.getInstance("TLSv1");
// Init the SSLContext with a TrustManager[] and SecureRandom()
sc.init(null, trustCerts, new java.security.SecureRandom());
entonces solo tiene que establecer el SSLContext en HttpsURLConnection :
httpsCon.setSSLSocketFactory(sc.getSocketFactory());
Eso debería hacer el truco.
Leí en un artículo que HttpsURLConnection
negociará de forma transparente la conexión SSL.
El documento oficial dice:
Esta clase utiliza HostnameVerifier y SSLSocketFactory. Hay implementaciones por defecto definidas para ambas clases. [ 1 ]
¿Significa eso una vez que abres una conexión con
httpsCon = (HttpsURLConnection) url.openConnection();
¿Ya está cifrado SSL / TLS sin más problemas?
¿Cómo puedo ver y configurar la versión TLS para la implementación estándar? (Debería ser TLS 1.2 para Java 8 y TLS 1.0 para Java 7)
Referencias
- Oracle Corp. (2011). 1 . (JavaDoc)
También puede establecer el protocolo TLS 1.2 con el JDK 1.7. Por defecto, JDK 1.7 lo configurará a 1.0.
SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$
sc.init(null, null, new java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) httpsURL.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
private static javax.net.ssl.SSLSocketFactory getFactorySimple()
throws Exception {
SSLContext context = SSLContext.getInstance("TLSv1.2");`
context.init(null, null, null);
return context.getSocketFactory();
}
String loginurl ="some url";
HttpsURLConnection connection = null;
URL url = new URL(loginURL);
connection = (HttpsURLConnection) url.openConnection();
javax.net.ssl.SSLSocketFactory sslSocketFactory =getFactorySimple();
connection.setSSLSocketFactory(sslSocketFactory);
El código anterior se puede usar para habilitar tls 1.1 o tls 1.2 en java 1.7