繁体   English   中英

Java HttpsURLConnection和TLS 1.2

[英]Java HttpsURLConnection and TLS 1.2

我在一篇文章中读到HttpsURLConnection将透明地协商SSL连接。

官方文件说:

该类使用HostnameVerifier和SSLSocketFactory。 为这两个类定义了默认实现。 [ 1 ]

这是否意味着一旦你打开一个连接

httpsCon = (HttpsURLConnection) url.openConnection();

它已经加密了SSL / TLS而没有任何麻烦吗?

如何查看和设置标准实现的TLS版本? (应该是Java 8的TLS 1.2和Java 7的TLS 1.0)

参考

  1. 甲骨文公司(2011年)。 javax.net.ssl.HttpsURLConnection (JavaDoc的)

您必须创建一个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());

这应该够了吧。

您还可以使用JDK 1.7设置TLS 1.2协议。 默认情况下,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);

上面的代码可用于在java 1.7中启用tls 1.1或tls 1.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM