![如果不启用 sslv2,TLSv1 将无法工作](https://linux22.com/image/652610/%E5%A6%82%E6%9E%9C%E4%B8%8D%E5%90%AF%E7%94%A8%20sslv2%EF%BC%8CTLSv1%20%E5%B0%86%E6%97%A0%E6%B3%95%E5%B7%A5%E4%BD%9C.png)
我使用的是 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 后此行为是否仍然存在。