11

我不确定之前是否有人问过类似的问题(我找不到任何问题),但是是否可以保护客户端/服务器免受中间人攻击?

我正在编写一个客户端应用程序来与服务器通信。通信将基于 SSLv3。我对服务器的自签名证书没问题,但担心其他人以相同的服务器名称生成相同的自签名证书并假装是它。我的客户端应用程序使用 OpenSSL 库。[客户端和服务器是基于节俭的,如果有任何区别的话]。我可以在保持对自签名证书的支持的同时避免此类攻击吗?

4

4 回答 4

16

是的。

简而言之,只有当客户端事先不知道证书,因此无法验证服务器是否就是它所说的那个人时,自签名证书才比 CA 证书更不安全。

如果您将自签名证书添加到客户端并且不接受任何其他证书,那么您实际上与拥有证书颁发机构签名的证书一样安全(或者,有人可能会说,甚至更安全)。

在有或没有证书授权的情况下保持 SSL 安全的重要部分是:

  • 服务器私钥(在 CA 的情况下,是其所有根的私钥)是保密的。
  • 客户端知道服务器证书(或其 CA 根)。
于 2012-07-30T17:10:43.740 回答
4

您可以对服务器的证书进行硬编码,并将其与您收到的证书进行比较。

或者更好的是,创建一个由 CA 签名的 CA 证书和服务器证书。让 CA 信任客户端(再次通过在您的应用程序中对其进行硬编码)并使用 CA 证书验证收到的服务器证书。

于 2012-07-30T17:09:28.663 回答
1

如果您可以很好地保护您的私钥,假设用户实际查看证书,中间人将无法伪装成您。自签名的问题在于,如果您希望用户将异常添加到他们的浏览器,或者只是忽略警告,那么您将面临中间人攻击,因为其他任何人都可以创建自己的证书。

当然,“足够好地保护您的私钥”并非易事。当您为“威瑞信”证书付费时,您并没有为他们创建证书的软件付费 - 您正在为他们保护存储私钥的建筑物的安全部队付费。

于 2012-07-30T17:09:15.960 回答
0

这很容易!不!仅此而已,您就可以防止来自知名机构颁发的证书的中间人攻击。>:)

于 2021-05-15T05:45:25.440 回答