簡體   English   中英

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

[英]Java 8 SSLContext.getInstance("TLSv1.2") what does it mean?

我正在嘗試為某個端點 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 代表傳輸層安全性,它是取代安全套接字層 (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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM