【问题标题】:SSLSniff error: "SSL Accept Failed"SSLSniff 错误:“SSL 接受失败”
【发布时间】:2012-02-22 13:43:08
【问题描述】:

我正在尝试使用 SSLSniff 的工具,但我遇到了一些技术问题...我一直在寻找任何类似的问题,但唯一的结果来自 Twitter 提要,没有公开有用的答案。所以,这里是:

(我的 SSLSniff 版本是 0.8)我正在使用 args 启动 sslsniff:

sslsniff -a -c cert_and_key.pem -s 12345 -w out.log  

其中:cert_and_key.pem 文件是我的授权证书与我的 未加密 私钥连接(当然是 PEM 格式),12345 是我使用 iptables 规则重定向流量的端口。

所以 sslsniff 正在正确运行:

INFO sslsniff : Certificate ready: [...]  

[每当我与客户联系时,都会有以下两行:]

DEBUG sslsniff : SSL Accept Failed!  
DEBUG sslsniff : Got exception: Error with SSL connection.

在我的客户方面,我已将我的 AC 注册为受信任的 CA(使用 FF)。然后当我通过 SSL 连接时出现错误:

Secure Connection Failed.  
Error code: ssl_error_bad_cert_domain

非常奇怪的是(此外,证书不会自动接受,因为它应该由我信任的 CA 签名)是我无法通过单击“添加例外...”来接受伪造的证书:我总是返回错误页面,要求我添加(其他)异常...

此外,当我尝试连接到例如:https://www.google.com 时,SSLSniff 的日志以新行完成:

DEBUG sslsniff : Encoded Length: 7064 too big for session cache, skipping...  

有谁知道我做错了什么?

-- 编辑以总结不同的答案--

问题在于 SSLSniff 在伪造证书时没有处理替代名称。显然,只要 Common Name 与域名不匹配完全,Firefox 就会拒绝任何证书。

例如,对于 Google.com :CN = www.google.com 并且没有替代名称。因此,当您连接到 https://www.google.com 时,它工作正常。
但是对于 Google.fr :CN = *.google.fr,具有以下替代名称:*.google.fr 和 google.fr。因此,当您连接到https://www.google.fr 时,FF 正在寻找替代名称,并且由于它显然没有找到任何名称,因此拒绝了格式错误的证书。

...所以解决方案是修补/提交...我不知道 Moxie Marlinspike 是否故意忘记了这个功能,因为它太复杂了,或者他只是没有意识到这个问题。无论如何,我会尝试看一下代码。

【问题讨论】:

    标签: c++ security ssl cryptography openssl


    【解决方案1】:

    会话编码长度错误消息:当缓存 SSL 会话失败时,意味着后续连接上的 SSL 会话恢复将失败,从而导致性能下降,因为每个请求都需要进行完整的 SSL 握手。但是,尽管更频繁地使用 CPU,sslsniff 仍然可以正常工作。缓存失败,因为 OpenSSL 会话对象 (SSL_SESSION) 的序列化表示大于 sslsniff 的会话缓存支持的最大大小。

    至于您的真正问题,请注意 sslsniff 不支持 X.509v3 subjectAltNames,因此,如果您连接的站点的主机名与证书的主题公用名不匹配,而是仅匹配一个 subjectAltName,那么 sslsniff将生成没有 subjectAltNames 的伪造证书,这将导致连接客户端上的主机名验证不匹配。

    如果您的问题仅发生在某些特定站点,请告诉我们该站点,以便我们可以使用例如检查服务器证书openssl s_client -connect host:port -showcertsopenssl x509 -in servercert.pem -text。如果所有站点都发生这种情况,那么以上不是解释。

    【讨论】:

    • 谢谢丹尼尔,你是对的!问题是 SSLSniff 在伪造证书时没有处理替代名称。因此,一旦 Common Name 与域名完全不匹配,Firefox 就会拒绝证书。我刚刚编辑了我的原始帖子以解决这个问题,我会尝试查看代码,看看补丁是否会复杂......无论如何,再次感谢!
    • 我已经在一个月前编写了该代码,请参阅我在 github 上的主题分支 topic/x509v3extgithub.com/droe/sslsniff/tree/topic/x509v3ext -- 不幸的是,Moxie 忙于其他项目,无法处理许多待处理的 @987654325 @pull 请求在 github 上等待。根据您对问题的编辑,不确定 subjectAltName 是否真的是您的问题(www.google.fr 与主题 CN *.google.fr 匹配),但也许这只是一个错字,您打算请求 https://google.fr/
    【解决方案2】:

    尝试使用您完全控制的证书的直接 MITM,并确保您没有一些 OCSP/Perspectives/Convergance 东西干扰事物。除此之外,也许将证书添加到操作系统受信任的根。我认为 Windows 上的 FF 使用 Windows 证书存储(开始->运行->certmgr.msc)。也可能值得尝试使用 Burp 之类的东西来查看错误是本地化到 SSLSniff 还是所有 MITM 尝试。

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 2018-11-06
      • 2021-02-02
      • 2017-02-17
      • 2014-01-14
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多