【问题标题】:Why does SSLSocketFactory lack setEnabledCipherSuites?为什么 SSLSocketFactory 缺少 setEnabledCipherSuites?
【发布时间】: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 也可以这样说,因为它具有getDefaultSSLParametersgetSupportedSSLParameters 之类的方法。

我正在尝试为(不)能力提出合理的安全工程原因,但我做不到。也许这个决定有软件工程的原因。 (我怀疑这是有充分理由的,但我目前缺乏洞察力)。

为什么Java 缺乏配置SSLSocketFactory 的能力?这显然是一个设计决定,我试图理解为什么它是以牺牲图书馆相关部分的安全为代价的。

【问题讨论】:

  • 纯粹基于意见,除非您在这里找到 JSSE 设计师,这不太可能。如果它仍然有效,请尝试 JSSE 邮件列表。
  • @EJP - 我不确定我是否同意。声称它的纯粹观点就像说它不是按原样设计的(好像是随机效应引起的)。这是软件工程和 OOP 领域的设计决策,我有兴趣了解该决策背后的基本原理。

标签: java ssl encryption sslsocketfactory


【解决方案1】:

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

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

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

这显然是一个设计决定,

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2014-04-29
      • 1970-01-01
      • 2012-07-26
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多