Java HttpsURLConnection 和 TLS 1.2

2022-09-01 10:43:59

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

官方文件说:

此类使用 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)

答案 1

您必须创建一个来设置Papertl:

Java 1.8中:SSLContext

 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

您还可以使用 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());