Java HttpsURLConnection和TLS 1.2

Mar*_*ann 25 java ssl httpsurlconnection

我在一篇文章中读到了HttpsURLConnection 透明地协商SSL连接的文章.

官方文件说:

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

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

httpsCon = (HttpsURLConnection) url.openConnection();
Run Code Online (Sandbox Code Playgroud)

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

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

参考

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

小智 29

您必须创建一个SSLContext

Java 1.8中设置Protocoll :

 SSLContext sc = SSLContext.getInstance("TLSv1.2");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new java.security.SecureRandom()); 
Run Code Online (Sandbox Code Playgroud)

Java 1.7中:

 SSLContext sc = SSLContext.getInstance("TLSv1");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new java.security.SecureRandom());
Run Code Online (Sandbox Code Playgroud)

那么你只需要将SSLContext设置为HttpsURLConnection:

httpsCon.setSSLSocketFactory(sc.getSocketFactory());
Run Code Online (Sandbox Code Playgroud)

这应该够了吧.

  • 什么是**trustCerts**,你如何创建/获得一个? (12认同)
  • 如果有人想知道 init() 参数,这里是文档所说的:“前两个参数中的任何一个都可能为空,在这种情况下,将搜索已安装的安全提供程序以寻找适当工厂的最高优先级实现。同样,安全随机参数可能为空,在这种情况下将使用默认实现。” (2认同)
  • 请参阅/sf/ask/84073391/,以获得** trustCerts的简单,不安全,全信任的实现 (2认同)

Kon*_*aka 10

您还可以使用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());
Run Code Online (Sandbox Code Playgroud)