Fiddler HTTPS错误:"因为它们没有共同的算法"

13

我正在尝试使用当前最新版本2.4.4.5的Fiddler来监控https流量。

我已成功设置了https、证书,并且可以看到完整的https加密流量,例如浏览我的银行网站。

...但是...

当我尝试监视另一个服务器时,在响应窗口中出现以下错误消息:

"Failed to secure existing connection for 77.87.178.160. A call to SSPI failed, see inner exception. InnerException: System.ComponentModel.Win32Exception: The client and server cannot communicate, because they do not possess a common algorithm"

完整的Fiddler窗口请见:

enter image description here

在这种情况下,客户端不是浏览器,而是一个自定义的客户端程序,它与自己的服务器通信。

我的问题是:这个异常是否具有误导性,实际上可能是其他错误阻止了安全通道的建立? 还是说我们仍有机会监视这个https通信?

谢谢!

3个回答

14

客户端程序是什么?

这个错误通常表明客户端应用程序只提供了某些HTTPS密码套件,而且这些密码套件不受Fiddler支持。

然而,在这种情况下,几乎可以确定特定的问题在于: http://blogs.msdn.com/b/ieinternals/archive/2009/12/08/aes-is-not-a-valid-cipher-for-sslv3.aspx

客户端正在尝试使用AES与SSLv3,但这不是SSL3的有效密码套件之一。因此,连接失败了。

您也许可以通过单击“规则” > “自定义规则” 来解决此问题。滚动到Main()函数并在函数内添加以下行:

  CONFIG.oAcceptedServerHTTPSProtocols = 
    System.Security.Authentication.SslProtocols.Ssl3;
请让我知道这是否可行。 注意:当前版本的 Fiddler 提供了一个 UI 链接,可以在 HTTPS 选项卡上查看已启用的协议列表。

Eric,非常感谢您的支持。不幸的是,这给了我“变量'SslProtocols'未声明”的错误。 - g.pickardou
我使用System.Security.Authentication命名空间解决了编译错误。现在我得到了0长度响应和以下错误信息:“fiddler.network.https> Failed to secure existing connection for 77.87.178.129. Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. InnerException: System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)” 有趣的是,注释掉这行代码后现在也出现了同样的问题。 - g.pickardou
1
尝试将该行更改为仅限Ssl3(答案已在上面更新)。使用该配置,我可以成功地从这里连接到目标服务器。 - EricLaw
这对我有用。非常感谢,因为我已经为解决这个问题苦恼了很长时间。 - Jimi

1
令人难以置信的是,这个问题在6年后仍然存在。刚安装了最新版本的Fiddle(v5.0.20194.41348),但在Win7上使用Chrome或IE时,它仍然会出现以下错误:
“fiddler.network.https> HTTPS握手到google.com(#1)失败。System.ComponentModel.Win32Exception 客户端和服务器无法通信,因为它们没有共同的算法”
经过几个小时的测试,我找到了一个中间解决方案,它似乎适用于几乎所有的网站。目标是在日志中不出现任何错误,同时获得尽可能高的安全性。不需要添加任何代码,只需更改“工具”>“选项”>“HTTPS”>“协议”下的此行即可(只需复制并粘贴)。
<client>;ssl3;tls1.1;tls1.2

基本上移除了SSL2和TLS1.0协议,这样我们就可以得到相当不错的安全性,并且目前没有出现任何错误。在与此错误的斗争中花费了数小时后,希望有人能从中受益,同时感谢EricLaw发现问题的根源。

SSL3 已经被弃用多年,不再被认为是安全的,如果安全是您的目标,我建议将其从列表中删除。特别是它容易受到 POODLE 和 BEAST 漏洞的攻击。我相信TLS 1.1也很快会被弃用。 - tphuoc
谢谢提供信息,但在我这种情况下,我只是想找一种方法使其只用于测试目的。 ;) - BillA

0

是的,我也在使用 Fiddler 之外工作时遇到了这个错误,它与 AuthenticateAsServer 有关,但仅在使用 IE10 而不是 Chrome 浏览器时出现问题。

奇怪的是,使用 SslProtocols.Tls 协议时,它并不总是会对 IE10 造成影响,因此我将添加一些代码来切换协议,如果一个失败了就尝试另一个。

可以使用的协议似乎也会根据您是使用像 Fiddler 这样的代理服务器还是通过 hosts 文件劫持 DNS 来重定向流量到服务器而发生变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接