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
and getSupportedSSLParameters
.
我试图为这种能力找出一个合理的安全工程原因,但我不能。也许这个决定有软件工程方面的原因。 (我怀疑这是有充分理由的,但目前我缺乏洞察力来看到它)。
为什么Java缺乏配置的能力SSLSocketFactory
?这显然是一个设计决策,我试图理解为什么它是以牺牲图书馆相关部分的安全性为代价的。
为什么Java缺乏配置SSLSocketFactory的能力?
允许应用程序更改已启用的密码套件可能被认为是一个坏主意。你可能会说这是一个platform安全问题而不是应用程序责任,并且对于某些应用程序来说,能够启用(或禁用)系统管理员已禁用/启用的套件将是一件坏事。
但我不知道,而且我怀疑一小群人中没有一个人会really知道定期阅读 StackOverflow。
这显然是一个设计决定,
从某种意义上说,是的。但这可能只是偶然或默认发生的设计决策之一。或者可能是“他们”认为不会使用此功能。或者这样做可能有充分的安全理由。
不管怎样,如果你对此有强烈的感觉,你could建议将此作为 Java 增强功能(例如here http://bugs.java.com/bugdatabase/),或者开发一个补丁来实现您的增强功能并将其提交给 OpenJDK 团队。
如果您没有动力提出/实施增强功能,那么获得“他们为什么这样做”答案的最佳方法就是亲自询问“他们”。 (并请分享答案......)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)