我正在尝试调用一些终端点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"))
现在它再次正常工作,如果我没有理解错的话,这是为了安全通信,但是为什么在Linux环境中会出现SSL异常而不是Windows呢?
SSLContext.getInstance(“ TLSv1.2”)
,这在所有环境中都有效吗?为什么不是TLSV1.1?所有环境默认都有1.2或更高版本吗?如何确保它将在所有环境中运行?
TLSv1
(即没有.0),但1.0容易受到BEAST在2011年推广的可预测IV攻击,现在经常被用作禁止1.0的理由(例如PCI),尽管它实际上已经通过记录分割得到了很好的缓解(包括6u29)。 - dave_thompson_085