2014-04-27 159 views
6

SSLSocketFactory提供getDefaultCipherSuites(在套接字上默認啓用的密碼)和getSupportedCipherSuites(如果需要,可以啓用密碼)。爲什麼SSLSocketFactory缺少setEnabledCipherSuites?

但是,SSLSocketFactory不會提供setEnabledCipherSuites來配置密碼列表一次以提供後續套接字上的首選項。

事實上,我認爲製作setEnabledCipherSuitesSSLSocket的一部分確實使炒鍋流程複雜化。例如,HttpsURLConnection不提供getSocket,它確實打破了這個流程:

... 
SSLContext context = SSLContext.getInstance("TLS"); 
context.init(null, trustManager.getTrustManagers(), null); 

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
connection.setSSLSocketFactory(context.getSocketFactory()); 

我想的一樣,可SSLContext說,因爲它有一個像getDefaultSSLParametersgetSupportedSSLParameters方法。

我試圖想出一個完善的安全工程原因(中)的能力,但我不能。也許這個決定有一個軟件工程原因。 (我懷疑有一個很好的理由,而我目前缺乏見識)。

爲什麼Java缺乏配置SSLSocketFactory的能力?這顯然是一個設計決策,我試圖理解爲什麼它是以犧牲圖書館相關部分的安全爲代價的。

+0

純粹是基於意見的,除非你在這裏得到一個JSSE設計師,這是不可能的。如果仍然有效,請嘗試使用JSSE郵件列表。 – EJP

+0

@EJP - 我不確定我是否同意。聲稱其純粹的觀點就像說它沒有按照它的方式設計(就像隨機效應造成的那樣)。這是一個軟件工程和麪向對象領域的設計決策,我有興趣知道決策背後的基本原理。 – jww

回答

0

爲什麼Java缺乏配置SSLSocketFactory的能力?

可能是因爲允許應用程序更改啓用的密碼套件被認爲是一個壞主意。您可能會爭辯說這是一個平臺安全問題,而不是應用程序責任,並且某些應用程序能夠啓用(或禁用)系統管理員已禁用/啓用的套件將是一件壞事。

但我不知道,並且我懷疑那些確實會真的知道定期讀取StackOverflow的小組人員。

它顯然是一個設計決策,

從某種意義上說,是的。但它可能只是那些意外或默認發生的設計決策之一。或者可能是「他們」不認爲這個功能會被使用。或者這樣做可能有一個合理的安全原因。

無論哪種方式,如果你強烈地感受到這一點,你可以建議這是一個Java增強(例如here),或者工作起來實現你的增強補丁,並提交給OpenJDK的團隊。

如果您不覺得提出/實施增強的動機,獲得「他們爲什麼要這樣做」的最佳方法是自己問「他們」。 (請分享答案...)