SSLSocketFactory
提供getDefaultCipherSuites
(在套接字上默認啓用的密碼)和getSupportedCipherSuites
(如果需要,可以啓用密碼)。爲什麼SSLSocketFactory缺少setEnabledCipherSuites?
但是,SSLSocketFactory
不會提供setEnabledCipherSuites
來配置密碼列表一次以提供後續套接字上的首選項。
事實上,我認爲製作setEnabledCipherSuites
SSLSocket
的一部分確實使炒鍋流程複雜化。例如,HttpsURLConnection
不提供getSocket
,它確實打破了這個流程:
...
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, trustManager.getTrustManagers(), null);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(context.getSocketFactory());
我想的一樣,可SSLContext
說,因爲它有一個像getDefaultSSLParameters
和getSupportedSSLParameters
方法。
我試圖想出一個完善的安全工程原因(中)的能力,但我不能。也許這個決定有一個軟件工程原因。 (我懷疑有一個很好的理由,而我目前缺乏見識)。
爲什麼Java缺乏配置SSLSocketFactory
的能力?這顯然是一個設計決策,我試圖理解爲什麼它是以犧牲圖書館相關部分的安全爲代價的。
純粹是基於意見的,除非你在這裏得到一個JSSE設計師,這是不可能的。如果仍然有效,請嘗試使用JSSE郵件列表。 – EJP
@EJP - 我不確定我是否同意。聲稱其純粹的觀點就像說它沒有按照它的方式設計(就像隨機效應造成的那樣)。這是一個軟件工程和麪向對象領域的設計決策,我有興趣知道決策背後的基本原理。 – jww