如何通过HTTPS保护数据免受MITM攻击



我正在研究企业API,可用于企业服务,MITM可能会产生可怕的后果。

我们决定使用HTTP而不是HTTP,但是在谷歌搜索之后,我明白只有SSL是不够的。

据我了解,使用SSL时有两个主要漏洞:1)现在有很多CA提供商公司,所以没有人受到MITM攻击的保护,黑客使用普通证书(我找到了一些文章,据说VeriSign有秘密部门,为MITM提供秘密服务,当时VeriSign是全球唯一的CA)2)大多数MITM攻击在使用ARP缓存中毒时都是可能的

因此,我暂时只能看到一种解决方案,但不确定它是否是最佳实践:由于 API 是内部的,我可以使用以下内容:1)使用对称加密算法加密数据2)限制能够使用API的ip(如在应用程序中,如在服务器防火墙中)

这就够了吗? 也许还有其他最佳实践可以建立真正安全的连接,这将使MITM变得不可能?

如果这个解决方案(SSL +对称加密算法)没问题,你能为这类问题提供最合适的加密算法吗?

提前感谢,将很高兴提供任何帮助/建议。

UPD:VPN(由Frenchie建议)不适合这种情况

UPD2:公钥-私钥(类似RSA)是可能的(thx 2 Craigy),但在服务器端非常昂贵。

我们决定使用 HTTPs 而不是 HTTP,但在谷歌搜索明白只有SSL是不够的。

我不确定你用谷歌搜索了什么,但是如果使用得当,SSL/TLS可以保护你免受MITM攻击。

如果这个解决方案(SSL +对称加密算法)没问题,可以请您为此类提供最合适的加密算法问题?

SSL/TLS 中的加密已经使用对称加密完成。只有身份验证是通过非对称加密完成的。

据我了解,使用SSL时有两个主要漏洞:

  1. 现在有很多CA提供商公司,所以没有人受到保护来自 MITM 攻击,其中破解者使用普通证书(i找到一些文章,其中说威瑞信有秘密部门,为MITM提供秘密服务,当VeriSign时是全球唯一的 CA) 2) 大多数 MITM 攻击都是可能的,而使用 ARP 缓存中毒

防止MITM攻击正是证书的目的。客户端全权负责 (a) 检查是否在预期时使用 HTTPS,以及 (b) 检查服务器证书的有效性。

第一点可能很明显,但这是像sslstrip这样的工具所做的攻击:它们是MITM降级攻击,阻止用户进入HTTPS页面。作为用户,请确保您在应该是HTTPS的HTTPS页面上。在企业环境中,告诉用户他们必须检查他们是否通过 HTTPS 访问您的服务器:只有他们才能知道(除非您也想使用客户端证书身份验证)。

第二点(证书验证)也取决于客户端,尽管其中大部分是在浏览器中自动完成的。用户有责任不忽略浏览器警告。其余的证书验证往往通过预安装的 CA 证书(例如威瑞信的证书)完成。

如果发生 MITM 攻击(可能通过 ARP 中毒),用户应获得不正确的证书,并且不应继续。正确的HTTPS验证应该允许您拥有安全连接或根本没有连接。

您提到的漏洞与证书验证(PKI 模型)有关。实际上,验证服务器证书是否正确取决于您的浏览器信任的 CA 证书。在那里,原则上,任何受信任的 CA 都可以为任何服务器颁发证书,因此此模型是列表中最弱的 CA。如果一个受信任的CA为一个网站颁发假证书并将其提供给另一方,这就像让护照办公室签发真正的"假"护照一样好。反击是相当棘手的,但有办法解决它。

  • 您可以依赖透视项目等扩展,这些扩展监视证书更改,即使两者都受信任。此类警告应提示用户调查证书更改是否合法(由您的公司完成)。

  • 更激进的是,您可以部署自己的 CA,从用户浏览器中删除所有受信任的 CA 证书,并仅安装自己的 CA 证书。在这种情况下,用户只能安全地连接到具有 CA 颁发的证书的计算机。这可能是一个问题(包括软件更新,如果您的浏览器使用操作系统证书存储库)。

  • 原则上,您可以完全避免使用证书并使用预共享密钥密码套件。但是,并非所有SSL/TLS堆栈都支持此功能,并且不一定适用于基于TLS的HTTP(据我所知,缺乏有关主机名验证的规范)。

您可能还对以下问题感兴趣 Security.SE:

  • 如何推出自己的安全机制 - 避免SSL
  • SSL证书旨在证明什么,它是如何做到的?

如果你想防御中间人攻击,那么你是正确的,使用对称密钥加密可以防止数据被第三方破坏。但是,您面临着分发密钥的问题,这是非对称密钥加密吸引人的原因之一。

要在网络上使用非对称密钥加密时防御 MITM 攻击,您可以设置自己的公钥基础结构。您将设置和管理证书颁发机构并禁用所有其他证书颁发机构,以便没有人可以假装成其他人,从而防止 MITM 攻击。如果CA受到损害,那么MITM攻击将再次成为可能。

只是为了确保我们在同一页面上,这些建议是独立于实现的。对于第一个建议,可以使用任何对称密钥算法。

对于第二个建议,您需要一个更复杂的系统,称为非对称或公钥加密。这些是建立在RSA等算法之上的。

SSL 是一种协议,它使用公钥加密进行密钥交换,使用对称加密来发送消息。

正确防守中锋需要两件事:

  • 永远不要通过HTTP为您的网站提供服务;只监听HTTPS流量
  • 在具有较长时间生存的响应中使用严格传输安全标头

SSLStrip攻击的ARP中毒依赖于浏览器启动与服务器的HTTP连接,并在以后过渡到HTTPS。正是在这个过渡点,攻击才会生效。

但是,如果浏览器将请求作为 HTTPS 请求启动,则握手会在发生任何其他操作之前向浏览器验证服务器。基本上,如果发生中间人攻击,将通知用户无法建立 SSL 连接,或者服务器不是正确的服务器。

永远不要通过HTTP提供您的网站,强制任何链接到它的人在链接中使用HTTPS。Strict-Transport-Security 标头指示兼容的浏览器将任何通过 HTTP 与服务器通信的尝试转换为 HTTPS。

对于您的用例,除了上述两个建议之外,似乎任何其他解决方案都是矫枉过正的。要了解有关 Strict-Transport-Security 的更多信息,请参阅维基百科关于 Strict-Transport-Security 的文章。

最新更新