我正在使用WebClient在客户可以使用我的应用程序之前实施安全帐户检查。但我担心的是“连接到使用SSL协议使用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.
答案 0 :(得分:1)
HTTPS does prevent Man in the middle
attack,只要双方都正确实施协议,我认为WebClient
已正确实施。
这意味着即使安装在本地机顶盒上的wireshark也无法解密流量
如果中间有人在途中改变数据包,另一方将无法读取数据包,通信就会中断。
我们在您的评论中讨论了一些澄清:
如果您的客户未受到损害( HTTPS
确实有效),则上述情况适用,因为您假设您的客户会妥协并使用会欺骗您的应用的工具添加假冒受信任的证书(需要管理员权限),我建议您使用two way ssl。
我所知道的Fiddler
工具只能通过添加其可信证书来解密,从而使您的客户更难以以这种方式攻击您的应用程序,并让他们使用调试或修补它,因为它比实现双向ssl代理更容易。
您还可以执行this post中描述的内容,使用需要一个特定证书的代码覆盖框架的证书验证,并忽略系统的可信证书,这些证书受Fiddler
等工具的攻击(这实现了什么?马克建议)。
答案 1 :(得分:1)
HTTPS通过验证您要连接的HOST来加密传输的数据并防止中间人攻击。但是,对于桌面应用程序和Web应用程序,用户可以使用wireshark或http代理查看本地主机上的https传输内容。
缓解此问题的一种方法是对服务器证书的拇指指纹进行硬编码,以便应用程序可以确保其连接的服务器正在呈现特定证书。
例如,如果您要在本地盒子上安装Fiddler并安装fiddler根证书。您的应用程序会认为它安全地连接到服务器,但是fiddler会在中间解密流量。如果您的应用程序代码查找特定的证书指纹,则可以在使用您期望的证书以外的证书进行连接时抛出异常,从而防止在使用本地代理时传输任何数据。
Wireshark将始终能够看到通过网络传输的数据包,但您不一定能够看到未加密的传输内容。但是我不是使用Wireshark的专家,所以也许这里的其他人可以解释一下。
好的澄清更多......这个问题正在讨论从桌面应用程序发送到服务器的内容的加密。
让我们布置一些假设:
现在,SSL(HTTPS)的工作方式是您的浏览器启动安全握手,此时服务器将返回公共证书,您的浏览器将尝试使用您购买证书的权限来验证该证书(例如) godaddy,geotrust,或versign等)
假设用户安装了fiddler及其根证书,您的桌面应用程序将连接到fiddler,并提供小提琴程序公共根证书,它将针对本地证书存储进行验证并认为它是可信任的。然后Fiddler会联系服务器,服务器会向它发送真正的公共证书。
随后,浏览器使用fiddler root公钥对浏览器的http请求进行加密,然后fiddler解密内容,然后使用服务器(mydomain.com)中的公钥重新加密,并将请求转发给服务器,然后解密并处理它。
以下是更多信息:http://en.wikipedia.org/wiki/HTTP_Secure
SSL卸载(https://f5.com/glossary/ssl-offloading)也是网络基础架构中用于卸载除Web服务之外的其他设备上的SSL负载的功能。这是一种在内容中间解密的人。此外,企业网络中的Instrustion Detection系统可以在其中安装SSL证书,允许这些设备解密请求的内容并检查它们是否存在指示网络攻击的行为。