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 (2011). класса javax.чистая.протокол SSL.HttpsURLConnection. (У javadoc)
3 ответов
вам придется создать SSLContext
установить протокол:
в 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());
это должно сделать трюк.
вы также можете установить протокол 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());
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