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因为它有类似getDefaultSSLParametersand的方法getSupportedSSLParameters。
我试图为(不)能力提出一个合理的安全工程原因,但我做不到。也许这个决定有软件工程的原因。(我怀疑有一个很好的理由,我目前缺乏洞察力)。
为什么Java缺乏配置的能力SSLSocketFactory?这显然是一个设计决定,我试图理解为什么它是以牺牲图书馆相关部分的安全为代价的。