我正在运行一些由 Apache / Linux 提供服务的小型网站。目前,我正在尝试尽可能减少 SSL 配置,以使其尽可能安全。
我已经将 Apache 配置为仅允许 TLS 1.2 和仅允许使用 DHE 或 ECDHE 密钥交换的密码。最新版本的 Firefox 和 Chrome(截至本文撰写时)可以完美连接到此服务器上的网站。
但是标准配置的 Internet Explorer 11(在 Windows 7 x64 下运行)无法连接到任何这些网站。Wireshark 捕获显示,IE 在其第一个客户端 hello 中尝试 TLS 1.2,向服务器显示其密码等,并且服务器的答案是正确的,包括所选的密码。
然后,IE 似乎毫无原因地重新启动并发送一个新的客户端 hello,这次使用 TLS 1.0,这当然会失败并让 IE 认为它无法连接到网站。
IE 中是否存在错误,导致它在成功建立正确协议后尝试错误的协议?该错误可能仅在服务器仅提供 TLS 1.2 时发生(这可能很少见)?
答案1
检查您是否使用了 MD5 证书,因为如果服务器提供了使用 MD5 算法的证书链,Internet Explorer 9/10/11 和 Edge 会中止连接,如这个博客:
如果服务器与
schannel.dll
使用 Windows 7 或 8 的客户端应用程序协商 TLS1.2 连接,并且它提供使用(弱)MD5 哈希算法的证书链,则客户端在收到证书后将中止连接(TCP/IP FIN)。
使用关键字搜索md5 tls1.2
可以找到此博客文章TLS 1.2 握手失败它更详细地描述了同样的问题。基本上,根据RFC5246 传输层安全 (TLS) 协议版本 1.2,MD5 不再被视为安全的哈希函数,因此schannel.dll
遵循 RFC 并拒绝 MD5 证书链。
虽然我理解其中的原因,但如果错误消息更具体一些,故障排除会更容易。因此,我提出问题到错误追踪器。
换入 SHA-256 1证书应该可以解决问题。
1 SHA-1 也可以使用,但不再推荐
答案2
我们有一些 Windows 7 机器有同样的行为。最后我们需要安装 MS14-066 来启用一些额外的密码。不知道为什么 2014 年末的补丁还没有安装,但就是这样。
你的旅费可能会改变。
答案3
我在使用 IE 11 和 Apache 2.4 时遇到了类似的问题。使用客户端身份验证(端口 843),我通过修改 IE 配置并最终修改“<VirtualHost...>”部分的 apache ssl 配置解决了我的问题。
解决问题的第一部分:客户端配置
菜单 ”工具 -> Internet 选项 -> 高级“, 在 ”安全"部分,取消选中SSL2.0和SSL 3.0然后确保TLS 1.0、1.1和1.2都勾选后,点击“应用”按钮。
在同一菜单上工具 -> Internet 选项 -> 内容“, 点击 ”清除 SSL 状态“按钮。
关闭 Internet Explorer,重新打开并尝试访问该网站。
也许在你的情况下,你只需要检查TLS 1.2. 尝试不同的组合 o 启用 TLS,但不启用 SSL 以避免出现问题。
最后我尝试了SSL3.0 + TLS1.0 + TLS1.1 +TLS1.2并且效果很好。
无论如何,如果您使用 SSL2.0 + TLS 1.2,您的网站访问将会崩溃,因为它们不兼容。
解决问题的第二部分:服务器配置
查看您的网站虚拟主机部分在 apache“config/”确保在任何部分,如“<VirtualHost *:[port] >”,您的域名在“ServerName”参数和 [PORT] 处(特别是最后一个操作,最终解决了我的问题)
例如。
服务器名称 www.your-domain.com:80
服务器名称 www.your-domain.com:443
服务器名称 www.your-domain.com:843
不要忘记查看“conf/extra/”目录中的 http-ssl.conf 文件(此路径和文件名取决于您的 Apache 服务器安装),您可能可以在默认虚拟主机部分找到“ServerName”参数的条目。
我希望这对你有帮助。