(免责声明:对于安全专家而言,我并不是想象力,也不是Windows专家)
设定:
理想情况下,我们希望在最后修复此问题,但如有必要,可以向客户提出修复方法。
客户端服务器必须通过HTTPS连接连接到我们的服务器,但它始终失败,wireshark显示以下对话:
> TLSv1: Client Hello
< TLSv1: Alert (21): Unexpected Message
根据RFC(http://www.ietf.org/rfc/rfc2246.txt),警报(21)指的是一个失败的解密,从我在wireshark中看到的,没有一个密码提出的JRE 1.6实际支持客户端(根据http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html#SupportedCipherSuites) 为了重现错误以便能够更接近地检查它,我测试了一些其他软件:
对于我未经训练的眼睛,这强化了这样一种观点,即不兼容的密码命题是Windows仅支持JVM不支持的密码套件的根本原因(对于TLSv1)。 我已经安装了充气城堡作为java.security文件中的附加提供程序无济于事。 我搜索了高低,只找到了一个参考,可能是websphere支持TLSv1的Windows密码,但无法下载独立的提供程序来测试它。 我们在JVM上运行的软件不支持JRE 1.7,因此升级不是一个选项(也许安全提供程序可以安全降级?但我还没有找到它的下载) 我发现没有办法在没有写c ++代码的情况下向Windows添加密码(我已经使用了上面提到的注册表设置而没有效果)。
总而言之,我想知道下列其中一件事是否会解决它以及如何完成它们:
当然也赞赏任何其他解决方案。
修改
Java版本为Java version (64 bit): 1.6.0_19-b04
。
建议的密码列表是:
安装了无限强度加密策略文件。我试图设置javax.net.debug=all
并从控制台启动服务器,没有出现其他输出。我设置sun.security.ssl.allowUnsafeRenegotiation=true
无济于事。
编辑2
事实证明,我们使用的软件使用HTTP的自定义堆栈而不是默认堆栈。虽然我不确切地知道TLS请求的哪一部分触发了错误(看到大多数TLSv1握手确实成功),但是发布了修复程序似乎解决了这个问题。
感谢您的反馈,如果徒劳无功,那将是一件非常有趣的事情。生活和学习。
答案 0 :(得分:1)
事实证明,我们使用的软件使用HTTP的自定义堆栈而不是默认堆栈。虽然我不确切地知道TLS请求的哪一部分触发了错误(看到大多数TLSv1握手确实成功),但是发布了修复程序似乎解决了这个问题。
感谢您的反馈,如果徒劳无功,那将是一件非常有趣的事情。生活和学习。
答案 1 :(得分:0)
您可以在detecting cipher strength上阅读我的文章(只是为了确保您正确安装了jce密码)。在您的问题中,您说您安装了无限密码,但随后您引用了128位和40位密钥。所以,我对你所拥有的东西感到困惑。此外,您是否可以检查您尝试连接的SSL证书的密码强度,并告诉我们它是什么以及算法是什么?另外,请确保您的JDK策略文件具有允许无限强度的适当权限。
最后,您是否可以连接到“已知良好”的SSL站点来验证您的客户端握手是否正确? (例如Gmail网站)