我有一个客户端程序通过SSL连接(https)与Web服务器通信。这种联系有多安全?我在我的网络服务器上安装了一个SSL证书,所以我的理解是,即使有人试图在我的客户端和我的服务器之间进行中间人攻击,他们也没有证书?这是真的?
因此,例如,如果他们尝试将主机名www.myserver.com重定向到他们拥有的IP,则https仍然会失败,因为连接将报告不安装证书的不受信任来源?
只是想指出我的程序是二进制文件,而不是用户通过浏览器看到的网页。因此他们不能简单地按“接受不受信任的SSL”继续进行。如果检测到不受信任的SSL连接,我的二进制编码将退出。鉴于此,“中间人”是否仍有可能将流量重定向到某个地方并提取加密数据?
谢谢!
答案 0 :(得分:7)
如果'中间人'实际上坐在客户端计算机上(想想病毒,木马或其他恶意软件),他们可以读取/修改通过该连接进行的任何事情。但是,在客户端和服务器之间,只要客户端程序检查SSL证书的有效性,连接就非常安全。
答案 1 :(得分:4)
如果是选择是否接受SSL证书的人(非代码),则主机名更改导致的错误可能不会停止所有内容,因为此人可能会点击该警告框右侧。
答案 2 :(得分:3)
这取决于您在客户端验证证书的方式以及您在验证过程中选择信任的CA.
如果客户端应用程序信任的任何CA已将证书颁发给同一主机名,则此证书可用于MITM攻击。 (并且并非完全闻所未闻的是,已向"wrong"人发放了证书。
在此过程中使用哪些CA来确定签名是否有效取决于您的SSL库以及您如何使用它。
即。对于浏览器,firefox捆绑了一组来自或多或少信誉良好的SSL供应商的CA证书,默认情况下您的浏览器信任这些证书。
Windows同样拥有IE默认信任的证书存储区,我猜测使用微软SSL库的其他应用程序可以选择使用此证书存储区,也可以默认使用它。
答案 3 :(得分:3)
是的,在使用SSL时,您通常可以免受MitM攻击,而SSL是经过设计(和修订)以防止它发生的。
为了清楚起见,您的SSL证书是公共信息 - 并且没有保密价值。您的服务器会将其发送给任何说Hello的客户端。它是与证书中的公钥匹配的私钥,必须保留,私密。
为了最大限度地保证连接的安全,您应该严格限制客户端可接受的证书 - 事实上,您甚至可以通过在客户端中存储证书本身(或证书的哈希)来将其限制为完全匹配。在这种情况下,您甚至不关心主机名匹配 - 并且您甚至消除了敌对中间人设法从您的CA获取有效证书的微小机会,并且还包含了主机名。
答案 4 :(得分:0)
服务器和客户端之间传输的数据已加密。
所以,例如,如果他们试图 重定向主机名www.myserver.com 对于他们拥有的IP,https会 仍然失败因为连接会 报告不受信任的来源,而不是 证书已安装?
是。但是如果用户不担心安全性,用户仍然可以忽略该警告消息。只有通信是安全和安全的。如果有一个客户端程序(病毒)可以解释收到的数据并做任何想做的事情。因此,最好教育客户(用户)了解安全问题以及拥有“安全”PC的重要性。
如果传输的数据非常机密,那么您可以通过添加摘要字段(由要与密钥一起传输的数据形成)并将其传递给客户端来添加另一层安全性。然后,客户端可以再次创建摘要(使用收到的数据和密钥),然后将其与任何不匹配进行比较。
如果存在不匹配,则数据在传输时被修改。
答案 5 :(得分:0)
您对这些问题感到困惑:
根据您的应用程序,您可能需要考虑使用类似SSH隧道的东西。这提供了保护传输的强大加密,以及通过使用公钥加密登录凭据。
您可以为每个客户端程序自动生成一个新的公钥,并将其添加到您的授权密钥列表中以进行登录。因此,只有您已授权的客户才能获得访问权限。
大多数SSH客户端在遇到具有与预期主机不同的公钥的服务器时会自动失败。您可以将其预先配置为您自己的服务器公钥。
答案 6 :(得分:0)
请在握手中提供客户端身份验证