2

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

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


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

谢谢!

4

7 回答 7

7

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

于 2009-06-11T15:17:43.830 回答
4

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

于 2009-06-11T15:12:06.137 回答
3

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

如果您的客户端应用程序信任的任何 CA 已向相同的主机名颁发了证书,则该证书可用于 MITM 攻击。(并且并非完全没有听说过将证书颁发给“错误”的人)。

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

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

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

于 2009-06-11T15:40:50.950 回答
3

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

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

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

于 2009-06-13T07:15:29.960 回答
0

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

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

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

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

如果存在不匹配,则数据在传输时已被修改。

于 2009-06-11T15:27:34.180 回答
0

你混淆了这些问题:

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

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

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

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

于 2009-06-12T01:37:55.117 回答
0

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

于 2013-03-29T16:04:04.617 回答