问题描述
需要测试“服务器”以确保它不包含特定的密码套件,尽管我们的开发人员出于最佳意图,有时仍会偶尔将其放入服务器。
然而:
- 我们无法使用在线服务来测试服务器,因为服务器不在互联网上
- 我们无法使用库,因为运行测试的设备使用的是特殊的 JDK 并且外部库无法编译
- 我们无法使用本地安装的工具,因为运行时是特定的,与 linux/windows 不兼容
(= 我们必须自己推出,使用标准 Java 8)
此外,我们不想只测试测试客户端安装的密码套件,而是测试将作为任意文本提供的“任何”密码套件。
我在网上找到的 (OpenSSL Cookbook by Ivan Ristić):
对于 SSL Labs,我为此目的使用部分握手,并使用假装支持任意套件的自定义客户端。它实际上甚至无法协商单个套件,但仅提议协商就足以让服务器告诉您他们是否支持套件。您不仅可以通过这种方式测试所有套件,而且还可以非常高效地进行测试。
这个自定义客户端现在听起来很适合我们的目的,将来对类似的 SSL 测试也很有用 - 但我不知道 Java-8 的 SSL 套接字中的“部分握手”或“建议协商”是什么样的代码。 我最大的努力如下:
String[] enabledSuites = {"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"};
mySocket.setEnabledCipherSuites(enabledSuites);
mySocket.startHandshake();
上面提到的套件有效,因为客户端拥有它并且服务器允许它。
但是,当我尝试“MY_SUITE”时,代码在 setEnabledCipherSuites()
处停止:Unsupported CipherSuite: MY_SUITE
对我来说,这意味着客户甚至没有尝试过,因为它不是执行 getSupportedCipherSuites()
那么,是否可以在 Java 8 中实现部分握手(无需重写位于 Socket 之上的所有额外代码)?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)