我正在 Java SE 中做一些需要我以不寻常的方式使用 SSL 的事情。
所需的步骤类似于:
- 建立 SSL session ;
- 交换一些私有(private)信息;
- 重新协商连接参数以停止使用加密操作。
我还没有在 Java API 中找到解决此问题的方法。我相信问题的解决方案可以通过使用 session 重新协商来解决,但是使用没有加密操作的密码套件,但是没有这样的选择;或访问底层套接字并绕过加密操作。
这些选项中的任何一个都是可能的吗?您是否认为其他语言和框架(C、PHP、Ruby、.NET、Perl、Python 等)也可以使用此类功能?
谢谢你的帮助,
路易斯·科斯塔
最佳答案
您可以在 Java 中执行类似的操作,但这绝对不是标准的。我不能保证其他平台对此有必要的支持。
JSSE 通过 SSLEngine
提供对独立于传输的 SSL 的支持。 .您可以使用它来临时“装饰”带有 SSL 的套接字,然后在完成后将其关闭并直接使用原始套接字 IO。
我猜不出您为什么要在协商 SSL session 之后关闭 SSL。如果是为了性能,可以重新协商密码套件使用“NULL”保密性和完整性协议(protocol),只要双方都允许即可。您在 SSL 记录层中仍然会有一些开销。但是,协商 session 参数后 SSL 的开销非常低。如果您的应用程序对此开销非常敏感,您可能需要考虑专用的 SSL 硬件。
关于Java SSL 重新协商(从 SSL 到清除 channel ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812275/