6

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?这显然是一个设计决定,我试图理解为什么它是以牺牲图书馆相关部分的安全为代价的。

4

2 回答 2

1

为什么 Java 缺乏配置 SSLSocketFactory 的能力?

允许应用程序更改启用的密码套件可能被认为是一个坏主意。您可能会争辩说这是一个平台安全问题,而不是应用程序的责任,并且对于某些应用程序能够启用(或禁用)系统管理员已禁用/启用的套件是一件坏事。

但我不知道,而且我怀疑一小部分真正了解的人都不会定期阅读 StackOverflow。

它显然是一个设计决定,

从某种意义上说,是的。但这可能只是偶然或默认发生的设计决策之一。或者可能是“他们”认为不会使用此功能。或者这样做可能有充分的安全理由。

无论哪种方式,如果您对此有强烈的感觉,您可以建议将其作为 Java 增强功能(例如,此处),或者制作一个实现您的增强功能的补丁并将其提交给 OpenJDK 团队。

而且,如果您没有动力提出/实施增强功能,那么获得“他们为什么这样做”的答案的最佳方法是自己询问“他们”。(请分享答案...)

于 2014-12-31T10:00:44.127 回答
1

JSSE 允许通过安全属性自定义密码和其他实现细节。请参阅自定义 JSSE

于 2019-11-17T20:38:37.317 回答