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

标签 java ssl ssl-certificate

我正在尝试为某个端点 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"))

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

最佳答案

TLS 代表 Transport Layer Security这是取代安全套接字层 (SSL) 的标准。有几个版本的 TLS,其中 v1.1 和 v1.2 被认为是安全的(目前正在起草 v1.3)。如果您不想深入研究技术细节,最好使用最新的可用 TLS 版本。

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

关于Java 8 SSLContext.getInstance ("TLSv1.2")是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274172/

相关文章:

ssl - 托管在 HTTPS 站点上的 SSRS 报告查看器页面,无需 SSL 即可访问 SSRS 报告服务器

ssl - 如何删除或禁用 WebSphere 中的默认 SSL 设置?

ssl - https协议(protocol)和SSL证书的区别

java - 如何使用暴力java移动数组中的元素

java - 通过 Eclipse JPA 到 MS SQL Server : Ping Failed

java - HQL加入: Retrieve Object based on 2 joins (Path expected for join!)

java - Java 中列表框和组合框的事件处理

Python SSL wrap_socket 失败,出现 SSLError,Errno 336265218

ssl - 从 curl 获取 (58) 无法使用客户端证书(未找到 key 或密码短语错误?)

ios - Apple Push Notification Service 和多个服务器的问题