SSLSocketFactory
提供getDefaultCipherSuites
(默认情况下在套接字上启用的密码)和getSupportedCipherSuites
(可以启用的密码,如果需要)。
但是,SSLSocketFactory
不提供setEnabledCipherSuites
一次配置密码列表以提供对后续套接字的偏好。
事实上,我认为制作真正复杂的炒锅流程setEnabledCipherSuites
的一部分。SSLSocket
例如,HttpsURLConnection
不提供 a getSocket
,它确实打破了这个流程:
...
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, trustManager.getTrustManagers(), null);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(context.getSocketFactory());
我认为也可以这样说,SSLContext
因为它有类似getDefaultSSLParameters
and的方法getSupportedSSLParameters
。
我试图为(不)能力提出一个合理的安全工程原因,但我做不到。也许这个决定有软件工程的原因。(我怀疑有一个很好的理由,我目前缺乏洞察力)。
为什么Java缺乏配置的能力SSLSocketFactory
?这显然是一个设计决定,我试图理解为什么它是以牺牲图书馆相关部分的安全为代价的。