【问题标题】:How Secure is connecting to an SSL encrypted Website?连接到 SSL 加密网站的安全性如何?
【发布时间】:2014-04-03 15:11:39
【问题描述】:

在客户可以使用我的应用程序之前,我正在使用 WebClient 实施安全帐户检查。但我担心的是“使用 HTTPS 协议连接到使用 SSL 证书的网站是否可以防止 MATM 攻击并使整个通信加密?”。

换句话说:像Wireshark 这样的程序是否能够像使用普通 HTTP 请求一样以纯文本形式获取请求和响应?是否有能力改变发送和接收的数据包?为了改变我的应用程序行为或其他东西。


[NOTE] I am not talking about getting my application pirated as I know that there is no way to get away from that fate.

【问题讨论】:

  • 您的目标是什么:您是想让您的客户更难拦截流量,还是担心您的客户可能受到攻击?
  • 我想让我的客户更难拦截流量,这样某人就不能或至少很难让他改变响应并获得对我的应用程序的未经授权的访问
  • 因为我的应用程序将从我的网站验证给定的用户名和密码,并且根据收到的答案,它将授予用户访问权限
  • @argaz 那又怎样? > > > >

标签: c# webclient


【解决方案1】:

HTTPS does prevent Man in the middle attack,只要双方都正确实现了协议,我假设WebClient 正确实现。 这意味着即使安装在本地机器上的 Wireshark 也无法解密流量

如果中间有人在途中更改数据包,对方将无法读取它们,通信就会中断。

鉴于我们在您的 cmets 中的讨论,一些澄清: 如果您的客户没有受到威胁(HTTPS 确实有效),上述情况仍然成立,因为您假设您的客户会破坏自己并使用通过添加虚假可信证书来欺骗您的应用程序的工具(需要管理员权限),我可以建议你使用two way ssl

Fiddler 这样的工具将无法通过添加他们的受信任证书来解密它,从而使您的客户更难以这种方式攻击您的应用程序,并让他们使用调试器或修补它,因为它比实现双向 ssl 代理更容易。

您还可以执行this post 中描述的操作,使用需要一个特定证书并忽略系统受信任证书的代码覆盖框架的证书验证,这会受到Fiddler 等工具的破坏(这实现了 Mark 建议的内容)。

【讨论】:

  • 抱歉有一点信息要走 :D,在你的两种方式 ssl 的链接中我没有找到这样的东西,你的意思是通过实现两种方式 SSL 我可以使用我将从受信任的供应商处购买的证书还是我必须创建一个自签名的证书?这也会阻止马克所说的使用提琴手吗?
  • 抱歉我的问题很幼稚。只是我对该领域的了解为 0。
  • 两种方式 ssl 表示客户端和服务器交换证书,您可以为服务器购买付费证书,为客户端购买自签名证书(因为您的所有客户端都拥有它,它没有受到保护,所以这是错误的使用付费的)。重要问题:除了您的客户端应用程序之外,您的服务器证书是否会用于其他任何用途?如果没有,我会使用自签名证书并使用上一段中的方法来省钱。是的,两种方式 ssl 将阻止 Fiddler 正在做的事情,因为它必须同时欺骗服务器和客户端,并且只有客户端在他的控制之下。
  • 但据我所知,如果我使用自签名证书,我将不得不让用户安装到他们的机器上,这是不太可接受的事情
  • 因为无法静默安装证书
【解决方案2】:

HTTPS 对传输的数据进行加密,并通过验证您连接的主机来防止中间人攻击。但是,对于桌面应用程序和Web应用程序,用户可以使用wireshark或http代理在本地主机上查看https传输的内容。

缓解此问题的一种方法是对服务器证书的指纹进行硬编码,以便您的应用程序可以确保它所连接的服务器提供特定的证书。

例如,如果您要在本地机器上安装 Fiddler 并安装 fiddler 根证书。您的应用程序会认为它正在安全地连接到服务器,但 fiddler 会在中间解密流量。如果您的应用程序代码查找特定的证书指纹,则当使用您期望的证书以外的证书进行连接时,您可以抛出异常,从而在使用本地代理时阻止任何数据的传输。

Wireshark 将始终能够看到通过网络传输的数据包,但您不一定能够看到未加密的传输内容。但是我不是使用 Wireshark 的专家,所以也许这里的其他人可以解释一下。


更新

好的,澄清更多......这个问题正在讨论从桌面应用程序发送到服务器的内容的加密。

让我们布局一些假设:

  • 桌面应用程序的用户控制他们的桌面。
  • 桌面上安装的应用程序正在使用公钥进行加密。
  • 任何拥有相应私钥的人都可以解密。
  • 由于用户控制他们的桌面,他们还可以在他们的桌面上运行 http 代理。

现在 SSL(HTTPS) 的工作方式是您的浏览器开始安全握手,此时服务器将返回公共证书,并且您的浏览器将尝试使用您购买证书的权限来验证该证书,例如 ( godaddy、geotrust 或 versign 等)

假设用户安装了 fiddler 并且它是根证书,您的桌面应用程序将连接到 fiddler,并获得 fiddler 公共根证书,它将针对本地证书存储进行验证并认为它受信任。 Fiddler 然后会联系服务器,服务器会向它发送真正的公共证书。

随后,浏览器使用 fiddler 根公钥对来自浏览器的 http 请求进行加密,fiddler 然后解密内容,然后使用服务器 (mydomain.com) 中的公钥对其进行重新加密并将请求转发到服务器,然后解密并处理它。

这里有更多信息:http://en.wikipedia.org/wiki/HTTP_Secure

SSL 卸载 (https://f5.com/glossary/ssl-offloading) 也是网络基础设施中用于卸载 Web 服务以外的其他设备上的 SSL 负载的功能。这是中间人解密内容的一种形式。此外,企业网络中的 Instrustion Detection 系统可以在其中安装 SSL 证书,从而使这些设备能够解密请求的内容并检查它们是否存在指示网络攻击的行为。

【讨论】:

  • 如果从受信任的供应商处购买证书怎么办?不是自签名的?
  • 我的回答假设您这样做。但是,它不会阻止运行本地代理。安装telerik.com/fiddler 将其设置为解密 SSL 流量,当它要求您安装提琴手根证书时,安装它。您会看到网站的行为就像它们在正确的 ssl 上,中间没有人。
  • 但如果可能的话,这会破坏 SSL 的所有手段!
  • 对不起,我很困惑,因为我不了解该领域,您能否进一步解释一下如何防止这种情况,因为如果有人这样做,他将能够更改我的应用程序收到的数据包并获得未经授权的访问权限或类似权限...
  • 这个答案令人困惑,你不能通过嗅探来解密https,这就是为什么wireshark不能做到这一点,如果它可以做到的话。第一段和最后一段令人困惑,因为它们暗示这是可能的。
猜你喜欢
  • 2021-05-20
  • 2023-01-04
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多