【问题标题】:How safe is my SSL connection even with a SSL certificate?即使使用 SSL 证书,我的 SSL 连接有多安全?
【发布时间】:2009-06-11 15:08:52
【问题描述】:

我有一个通过 SSL 连接 (https) 与 Web 服务器通信的客户端程序。这种连接有多安全?我购买了安装在我的 Web 服务器上的 SSL 证书,所以我的理解是,即使有人尝试在我的客户端和我的服务器之间进行中间人攻击,他们也不会拥有该证书?这是真的?

例如,如果他们尝试将主机名 www.myserver.com 重定向到他们拥有的 ip,https 仍然会失败,因为连接将报告未安装证书的不受信任的来源?


只是想指出我的程序是一个二进制程序,而不是用户可以通过浏览器看到的网页。因此他们不能简单地按“接受不受信任的 SSL”并继续。如果检测到不受信任的 SSL 连接,我的二进制文件被编码为退出。鉴于此,“中间人”是否仍有可能将流量重定向到某个地方并提取加密数据?

谢谢!

【问题讨论】:

    标签: security ssl ssl-certificate


    【解决方案1】:

    如果“中间人”实际上位于客户端计算机上(想想病毒、木马或其他恶意软件),他们可以读取/修改通过该连接发生的任何事情。但是,在客户端和服务器之间,连接是相当安全的,只要您的客户端程序检查 SSL 证书的有效性。

    【讨论】:

      【解决方案2】:

      如果是一个人(不是代码)选择是否接受 SSL 证书,则由主机名更改导致的错误可能不会停止一切,因为该人可能会点击该警告框。

      【讨论】:

        【解决方案3】:

        这取决于您在客户端验证证书的方式以及您在验证过程中选择信任的 CA。

        如果您的客户端应用程序信任的任何 CA 已向相同的主机名颁发了证书,则该证书可用于 MITM 攻击。 (并且证书已颁发给"wrong" 人并非完全闻所未闻)。

        在此过程中使用哪些 CA 来确定签名是否有效取决于您的 SSL 库以及您使用它的方式。

        即对于浏览器,firefox 与一组 CA 证书捆绑在一起,这些证书或多或少来自您的浏览器默认信任的信誉良好的 SSL 供应商。

        Windows 类似地有一个 IE 默认信任的证书存储,我猜其他使用 Microsoft SSL 库的应用程序要么可以选择使用此证书存储,要么默认使用它。

        【讨论】:

          【解决方案4】:

          是的,在使用 SSL 时,您通常可以免受中间人攻击,而 SSL 的设计(和修订)是为了防止这种攻击。

          需要明确的是,您的 SSL 证书是公开信息,没有保密价值。您的服务器会将其发送给任何说 Hello 的客户端。它是与证书中的公钥匹配的私钥,必须保密。

          为了最大程度地确保连接安全,您应该严格限制客户端可接受的证书 - 事实上,您甚至可以通过将证书本身(或证书的哈希)存储在客户端中来将其限制为完全匹配。在这种情况下,您甚至都不关心主机名匹配 - 并且您甚至消除了恶意中介设法从您的 CA 获得包含您的主机名的有效证书并且还破坏了 DNS 的微小机会。

          【讨论】:

            【解决方案5】:

            服务器和客户端之间传输的数据是加密的。

            例如,如果他们试图 重定向主机名 www.myserver.com 对于他们拥有的 ip,https 将 仍然失败,因为连接会 报告不受信任的来源 证书安装了吗?

            是的。但是如果用户不担心安全性,仍然可以忽略警告信息。只有通信是安全和安全的。如果有一个客户端程序(病毒)可以解释接收到的数据并为所欲为。因此,最好让客户(用户)了解安全问题以及拥有“安全”PC 的重要性。

            如果传输的数据非常机密,那么您可以通过添加摘要字段(由要传输的数据与密钥一起形成)并将其传递给客户端来增加另一层安全性。然后客户端可以再次创建摘要(使用接收到的数据和密钥),然后比较它是否有任何不匹配。

            如果数据不匹配,则数据在传输过程中被修改。

            【讨论】:

              【解决方案6】:

              你混淆了问题:

              1. SSL 提供的传输级安全性;和
              2. 客户端身份验证,SSL 没有。

              根据您的应用程序,您可能需要考虑改用 SSH 隧道之类的东西。这既提供了强大的加密来保护传输,还提供了通过使用公钥加密的登录凭据。

              您可以为每个客户端程序自动生成一个新的公钥,并将其添加到您的登录授权密钥列表中。因此,只有您授权的客户才能获得访问权限。

              大多数 SSH 客户端在遇到具有与其预期的已知主机不同的公钥的服务器时会自动失败。您可以将其预先配置为您自己的服务器公钥。

              【讨论】:

                【解决方案7】:

                Tls 确实在握手中提供客户端身份验证

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-02-11
                  • 1970-01-01
                  • 2011-01-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-04
                  • 2016-08-24
                  相关资源
                  最近更新 更多