apache - mod_ssl 警报握手失败

标签 apache ssl

失败是有意的,因为 SSLv3 被禁用。 .NET 客户端默认使用 SSLv3,它不会在失败前收到警报的情况下使用受支持的 SSL 版本重试。

我已经根据 http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#ssloptions 设置了 OptRenegotiate ,但我的服务器仍在返回 SSL 握手失败,而不是警告握手失败(然后发送握手失败)。

作品:

$ openssl s_client -connect my.working.server:443 -ssl3
CONNECTED(00000003)
2414208:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1472:SSL alert number 40
2414208:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:

失败:

$ openssl s_client -connect my.failing.server:443 -ssl3
CONNECTED(00000003)
2414208:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:

唯一的区别:

2414208:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1472:SSL alert number 40

问题是要发送此警报:我似乎无法在 Apache 文档中的任何地方找到对它的引用。

最佳答案

A .NET client is defaulting to using SSLv3 and it won't retry with a supported SSL version without receiving an alert before a failure.

这不是 SSL 协议(protocol)协商的工作方式。客户端宣布它愿意支持的最佳版本,然后服务器以它可以等于或低于客户端版本的最佳版本进行响应。如果此操作失败,某些客户端(主要是浏览器)会使用较低的 SSL 版本重试,因为它们假定服务器已损坏。但是他们为此使用了一个新的 TCP 连接,即在现有连接内没有任何重新协商。

没有所谓的协议(protocol)升级,这就是你在这里描述的。

关于apache - mod_ssl 警报握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33777399/

相关文章:

php - 增加 PHP 内存限制(Apache、Drupal6)

apache - 代理将我的请求转发给另一个用户

apache - 本地开发服务器上的 ssl

ruby-on-rails - Docker(docker-compose)应用程序容器中的 LetsEncrypt 不起作用

php - 如何与 PHP 建立 SSL 连接

node.js - Node - 错误 : error:0906D06C:PEM routines:PEM_read_bio:no start line

asp.net - IIS 中的 HTTP 到 HTTPS 重定向

phpMyAdmin 身份验证方法和强制 SSL 未按预期工作

apache - Apache 2.4 中未发送 HTTP 参数,破坏了功能

ios - 将 SSL https 与 socket.io 和 swift 一起用于 iOS 应用程序