【发布时间】:2014-06-12 19:13:42
【问题描述】:
SSLSocketFactory 提供getDefaultCipherSuites(默认情况下在套接字上启用的密码)和getSupportedCipherSuites(可以根据需要启用的密码)。
但是,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 - 我不确定我是否同意。声称它的纯粹观点就像说它不是按原样设计的(好像是随机效应引起的)。这是软件工程和 OOP 领域的设计决策,我有兴趣了解该决策背后的基本原理。
标签: java ssl encryption sslsocketfactory