Java HttpsURLConnection и TLS 1.2
Я прочитал в статье, что HttpsURLConnection
будет прозрачно обсуждать SSL-соединение.
В официальном документе говорится:
Этот класс использует HostnameVerifier и SSLSocketFactory. Существуют стандартные реализации, определенные для обоих классов. [ 1 ]
Означает ли это, когда вы открываете соединение с
httpsCon = (HttpsURLConnection) url.openConnection();
Это уже SSL/TLS зашифровано без лишних хлопот?
Как я могу просмотреть и установить версию TLS для стандартной реализации? (Должен быть TLS 1.2 для Java 8 и TLS 1.0 для Java 7)
Рекомендации
- Oracle Corp. (2011). javax.net.ssl.HttpsURLConnection. (JavaDoc)
Ответы
Ответ 1
Вам нужно будет создать SSLContext
для установки Protocoll:
в 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());
в Java 1.7:
SSLContext sc = SSLContext.getInstance("TLSv1");
// Init the SSLContext with a TrustManager[] and SecureRandom()
sc.init(null, trustCerts, new java.security.SecureRandom());
то вам просто нужно установить SSLContext в HttpsURLConnection:
httpsCon.setSSLSocketFactory(sc.getSocketFactory());
Это должно делать свое дело.
Ответ 2
Вы также можете установить протокол TLS 1.2 с помощью JDK 1.7. По умолчанию JDK 1.7 установит значение 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());
Ответ 3
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);
Вышеприведенный код может использоваться для включения tls 1.1 или tls 1.2 в java 1.7