关于c#:如果提琴手2可以通过HTTPS解密所有调用,那么SSL的意义是什么?

What is point of SSL if fiddler 2 can decrypt all calls over HTTPS?

不久前,我在这里提出了一个问题,该问题是如何隐藏我的http请求调用,并使它们在我的应用程序中更安全。我不希望人们使用提琴手2查看呼叫并设置自动响应器。每个人都告诉我使用SSL,通话将被隐藏并且信息安全。

我购买并安装了SSL证书,并进行了所有设置。我启动了Fiddler 2,并运行了一个测试应用程序,该应用程序连接到https Web服务以及https php脚本。

Fiddler 2不仅能够检测到这两个请求,而且还可以解密它们!我能够看到所有信息的来回追溯,这使我想到了这个问题。

如果SSL对安全性的影响为零,那么拥有SSL的意义何在?无论使用或不使用SSL,我都可以看到所有信息,第四和第四,仍然可以设置自动响应器。

.NET中缺少某些内容,可以更好地隐藏通过SSL发出的呼叫吗?

编辑

由于收到了一些回复,我为此问题添加了新的部分。如果应用程序连接到Web服务以登录该怎么办。该应用程序向Web服务发送用户名和密码。然后,Web服务将数据发送回应用程序,说明登录数据正确或错误。即使使用SSL,使用提琴手2的人也可以设置一个自动响应器,然后该应用程序将被"破解"。我了解在调试中查看数据可能会很有用,但是我的问题是,究竟应该做什么以确保SSL连接到它所请求的SSL。基本上说不能有中间人。


此处涵盖:http://www.fiddlerbook.com/fiddler/help/httpsdecryption.asp

Fiddler2 relies on a"man-in-the-middle" approach to HTTPS interception. To your web browser, Fiddler2 claims to be the secure web server, and to the web server, Fiddler2 mimics the web browser. In order to pretend to be the web server, Fiddler2 dynamically generates a HTTPS certificate.

本质上,您手动信任Fiddler提供的任何证书,如果您手动接受与域名不匹配的随机人的证书,则同样如此。

编辑:
有多种方法可以防止Fiddler /中间人攻击-即在自定义应用程序中使用SSL,可能需要使用特定的证书进行通信。对于浏览器,它们具有UI来通知用户证书不匹配,但最终允许此类通信。

作为公开的显式证书示例,您可以尝试使用Azure服务(即使用PowerShell的Azure工具)并通过Fiddler嗅探流量。由于明确的证书要求,它失败。


您可以将Web服务设置为需要SSL身份验证的客户端认证,以及服务器端。这样,Fiddler将无法连接到您的服务。只有具有所需证书的应用程序才能连接。

当然,那么您就有了如何保护应用程序中证书的问题,但是无论如何,现在您的用户名和密码都存在这个问题。确实想要破解您的应用程序的人可以使用Reflector,甚至可以对与客户端证书关联的私钥进行内存搜索。

没有真正的方法可以使这种100%的防弹效果。电影行业在保护DVD内容方面存在同样的问题。如果您拥有能够解密DVD并播放内容的软件,那么有人可以在该软件运行时进行内存转储并找到解密密钥。


一般而言,SSL / TLS的要点在于,偶尔使用Wireshark进行的窃听者无法看到您的有效负载。 Fiddler / Burp意味着您已与系统进行了交互。是的,这是一个非常简单的交互,但确实需要损害其中的一个系统。

如果要通过在这些基本级别上使这些MITM程序无用来增强安全性,则需要进行客户端证书认证(2-way SSL),并同时固定服务器证书和客户端证书(例如,要求仅特定证书对通讯)。您还将使用每一方的公共密钥对在线传输的有效载荷进行加密,并确保私有密钥仅驻留在它们所属的系统上。这样,即使一方(Bob)受到攻击,攻击者也只能看到发送给Bob的内容,而看不到Bob发送给Alice的内容。
然后,您将使用加密的有效负载并使用可验证的证书对数据进行签名,以确保数据未被篡改(关于如何先加密还是先签名,存在很多争议)。
最重要的是,您可以使用诸如sha2之类的多次传递来对签名进行哈希处理,以确保签名"已发送"(尽管这在很大程度上是一个晦涩的步骤)。

当您不控制(一个)通信系统时,这将以合理可实现的安全方式为您提供帮助。

如其他人所述,如果攻击者控制系统,则他们可以控制RAM,并且可以修改内存中的所有方法调用。