使用 https 时防止中间人攻击
Posted
技术标签:
【中文标题】使用 https 时防止中间人攻击【英文标题】:Preventing man in the middle attack while using https 【发布时间】:2011-03-05 18:23:22 【问题描述】:我正在编写一个类似于 omegle 的小应用程序。我有一个用 Java 编写的 http 服务器和一个 html 文档的客户端。主要的通信方式是通过http请求(长轮询)。
我已经使用 https 协议实现了某种安全性,并且我为每个连接到服务器的客户端都有一个 securityid。当客户端连接时,服务器会为它提供一个 securityid,客户端在需要请求时必须始终将其发回。
我害怕中间人攻击,你有什么建议我可以保护应用程序免受这种攻击。
请注意,此应用是出于理论目的而构建的,不会出于实际原因使用,因此您的解决方案不一定要实用。
【问题讨论】:
【参考方案1】:HTTPS 不仅做加密,还做服务器的认证。当客户端连接时,服务器会显示其域具有有效且可信任的证书。此证书不能简单地被中间人欺骗或重放。
【讨论】:
仅当客户端设置为验证证书正确时才如此?我想知道是否有任何关于启用此功能的客户端百分比的数据,例如当人们编写客户端应用程序以使用 API 时。您是否见过任何公司很好地记录了这一点,以帮助客户端应用程序正确验证证书?谢谢!【参考方案2】:仅仅启用 HTTPS 是不够的,因为网络带来了太多的复杂性。
一方面,请确保您在 cookie 上设置了安全标志,否则它们可能会被盗。
确保用户只能通过在地址栏中键入https://<yourdomain>
来访问该站点也是一个好主意,这是确保使用有效证书进行 HTTPS 会话的唯一方法。当您键入https://<yourdomain>
时,浏览器将拒绝让您访问该站点,除非服务器提供<yourdomain>
的有效证书。
如果你只输入<yourdomain>
前面没有 https://,浏览器不会关心会发生什么。我可以想到这有两个含义:
攻击者重定向到具有相似名称的某个 unicode 域(即:看起来相同,但具有不同的二进制字符串,因此是不同的域),然后攻击者为该域提供有效的证书(因为他拥有它),用户可能不会注意到这一点......
攻击者可以模拟服务器,但没有 HTTPS,他会自己建立与真实服务器的安全连接,并成为您和服务器之间的明文代理,他现在可以捕获您的所有流量并做任何他想做的事因为他拥有你的会话。
【讨论】:
以上是关于使用 https 时防止中间人攻击的主要内容,如果未能解决你的问题,请参考以下文章
ReactNative 中使用SSL Pinning防止中间人攻击