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