使用自签名证书时是不是可以防止中间人攻击?

Posted

技术标签:

【中文标题】使用自签名证书时是不是可以防止中间人攻击?【英文标题】:Is it possible to prevent man-in-the-middle attack when using self-signed certificates?使用自签名证书时是否可以防止中间人攻击? 【发布时间】:2012-07-28 09:16:02 【问题描述】:

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

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

【问题讨论】:

如果您的应用程序不需要与现有的客户端/服务器兼容,您不妨直接使用 TLS 1.x(您的库支持的最高版本)并尽可能跳过 SSL 3.0 . @Bruno 谢谢。暂时不能使用 TLS。服务器使用 SSLv3。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

(手动配置也可以,而不是严格的硬编码。) @Bruno 确实如此。但这让用户的生活和支持有点复杂,所以我喜欢自制 CA 的方式。【参考方案3】:

是的。

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

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

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

服务器私钥(如果是 CA,则为所有根的私钥)保密。 客户端知道服务器证书(或其 CA 根)。

【讨论】:

在我的情况下看起来像是可能的解决方案。因此,即使“中间人”提供与我的“真实”服务器相同的证书(具体是公钥),它也无法解密来自客户端的数据,因为它没有“真实”服务器的私钥,对吧? @TusharSudake 没错,证书对没有私钥的任何人都没有用。 谢谢!这正是我想要的【参考方案4】:

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

【讨论】:

以上是关于使用自签名证书时是不是可以防止中间人攻击?的主要内容,如果未能解决你的问题,请参考以下文章

自签名SSL证书是啥?有用吗?

企业为啥不能使用自签名SSL证书?

如何添加自签名SSL证书 自签名SSL证书存风险

什么是自签名SSL证书?

MAC申请自签名的ssl证书

https一定是安全的吗