如果不启用 sslv2,TLSv1 将无法工作

如果不启用 sslv2,TLSv1 将无法工作

我使用的是 Apache 2.2.4 版本。我已经知道这个版本只支持 SSLv2、SSLv3 和 TLSv1.0,但是当我使用它时发生了一些奇怪的事情:

当 SSLv2 被禁用时,Web 浏览器(我这里是 Internet Explorer)使用 SSLv3

SSL 3.0,带 168 位加密的 3DES(高);带 2048 位交换的 RSA。

当我启用 SSLv2 时,Web 浏览器使用 TLSv1.0:

TLS 1.0,256 位加密的 AES(高);2048 位交换的 RSA

最后,当我禁用两种协议(SSLv2 和 v3)时,网页根本无法加载!

我对 Apache 使用了这个配置:

SSLProtocol all
SSLCipherSuite all

你能为我解释一下吗?如何在不启用 SSLv2 的情况下使用 TLSv1.0?

答案1

此行为是由 TLS v1 RFC 中的原始规范引起的(RFC 2246,“E. 与 SSL 的向后兼容性”部分)。

基本上,该 RFC 指出大多数服务器不会针对不同版本的 SSL/TLS 使用不同的侦听端口。因此,为了确保向后兼容性,建议软件首先使用“旧”SSL 问候消息发起连接,然后在双方都支持的情况下将连接升级到 TLS,并且切勿尝试直接使用 TLS 建立连接(“支持 SSL 版本 2.0 服务器的 TLS 1.0 客户端必须发送 SSL 版本 2.0 客户端问候消息”)。

以前版本的 Java (JRE5) 也存在这种行为,新版本已对此进行了改进,现在可以直接处理 TLS 握手。也许您应该检查浏览器版本和补丁级别,并检查在浏览器端禁用 SSLv2 后此行为是否仍然存在。

相关内容