失败是有意的,因为 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/