我正在尝试为某个端点 URL 调用 REST API,它对于 java.net 的 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 环境上而不是在 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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)