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)

ссылки

  1. Корпорация 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