Java 8 SSLContext.getInstance( "TLSv1.2" ) 这是什么意思?



我正在尝试为某个端点 URL 调用 REST API,它对于 java.net 的 URL 运行良好,并且在执行相同的 URL 后运行良好。但是在某些机器上,它在某些SSLException上失败了,因此代码被修改为:

HttpsURLConnection connection = (HttpsURLConnection) new URL( url ).openConnection()
SSLContext sc = SSLContext.getInstance("TLSv1.2")
sc.init(null, null, new SecureRandom())
connection.setSSLSocketFactory(sc.getSocketFactory())
connection.setRequestProperty("charset", "utf-8")
InputStream input = connection.getInputStream()
InputStreamReader reader = new InputStreamReader(input, "utf-8")
BufferedReader buffer = new BufferedReader(reader)
buffer.lines().collect(Collectors.joining("n"))

现在它再次工作正常,如果我没记错的话,它是为了安全通信,但是为什么 SSL 例外在 Linux env 上而不是在 Windows 上,SSLContext.getInstance("TLSv1.2")适用于所有环境,为什么不是 TLSV1.1 默认情况下所有环境都有 1.2 或最新版本,我如何确保它将在所有环境中运行?

TLS 代表传输层安全性,它是标准的取代安全套接字层 (SSL(。很少有 TLS 版本,其中 v1.1 和 v1.2 被认为是安全的(目前 v1.3 正在起草中(。如果您不想使用最新的可用TLS版本深入研究技术细节是最好的主意。

Java 中的 TLSv1.2 在这里得到了很好的解释:JDK 8 将使用 TLS 1.2 作为默认值。由于 TLSv1.2 是在 JDK 内部实现的,因此它应该适用于所有操作系统。由于有多个JDK供应商(Oracle,OpenJDK,Azul等(,因此您希望使用JDK进行测试。问题是旧版本(例如Oracle HotSpot Java 6仅支持SSL(,除非您拥有高级Oracle维护版本或自定义库,否则您将无法获得TLS。

最新更新