自签名 SSL 证书安全吗?

che*_*run 34 security ssl certificate openssl

我想有一个安全的连接,当我登录到我的 webmail、phpMyAdmin等时。

因此,我使用 OpenSSL 签署了自己的 SSL 证书,并告诉 Apache 侦听端口 443。

这实际上安全吗?我的所有密码是否真的通过安全可靠的层发送?如果我从Verisign购买 SSL 证书或签署我自己的证书,这有什么区别?在一天结束时,无论如何所有数据都将在我的服务器上。那么最大的区别是什么?

小智 41

这完全是关于信任。如果您从 verisign 获得签名证书,您就可以向随机客户证明您的证书是可信的。如果您对证书进行自签名,则未在其计算机上安装您的证书的人无法确保他们没有受到中间人攻击的攻击

如果您的网络服务器仅供您使用,那么您不需要真正的 CA(例如 verisign)来签署您的证书。只需在您要使用的机器上安装证书,就可以了。

编辑:所以要回答你的问题:是的,一切都是加密的,如果你知道提供给网络浏览器的证书实际上是你设置网络服务器的证书,你可以确定没有人可以读取你的敏感数据。

  • CA 的目的是向*其他人*证明证书属于您所说的属于谁。由于您已经知道证书属于谁,因此就您访问自己的服务器并出示自己的证书而言,CA 没有任何意义。但是,其他人无法安全地访问您的服务器,因为他们无法知道要信任哪个证书。(你确实知道——相信你发布的那个。) (13认同)

Sma*_*ger 14

这完全是关于信任。

假设您访问了一个提供证书的流行网站。这个网站上写着“这就是我,你可以相信我,因为我有信任的人签署的这封介绍信。”

在这种情况下,“您信任的人”是证书颁发机构之一,他们(希望)代表您完成了建立证书提交者身份的工作。

您真正信任的是浏览器作者对证书颁发机构对提供证书的人的身份的信任。您和演示者之间通常也有不止一个权威,因此有一个术语:“信任链”。[1]

当您签署自己的证书时,没有信任链。您的站点正在向您提供您自己的证书。如果您在浏览器中安装自己的证书作为信任的证书,那么这将被视为一种授权,与预安装的证书相同。这样你就有了一个只有一个链接的信任链。

如果您随后访问您自己的站点并且您的浏览器警告您它提供了不受信任的证书,那么您应该有理由担心,因为与提供不受信任的证书的任何其他站点一样,您不能确定您正在与真实站点进行通信。

请注意,我还没有提到加密。证书是关于验证您与之通信的一方的身份。通过受信任的证书,您可以通过一种方式合理地确保您的商店或银行是真实的。一旦您确定了他们的身份,下一步就是保护你们之间的通信。碰巧的是,证书中还包含促进这种安全性所需的密钥。假设您已正确设置 SSL,那么此通信与您与商店或银行的通信一样安全,并且您的密码也同样受到保护。 [2]

[1] 这绝不是一个完美的系统。自由市场和低利润、大批量的业务不可避免地会导致成本削减:http : //www.theregister.co.uk/2011/04/11/state_of_ssl_analysis/

[2] 至少,受到足够的保护以至于有人闯入您的房子将您的秘密从您身上泄露出来而不是试图破解它们要便宜得多:http : //xkcd.com/538/


Blu*_*aja 11

事实上,自签名的证书可以是安全的,只是没有我们现在正在使用的模式下。


在目前大家普遍使用的CA(certificate authority)模式下,由受信任的CA签署的证书的目的是提供身份验证。

当我们拿到证书时,我们真正看到的是从墙上的插孔进来的 1 和 0;我们不知道那些 1 和 0 是从哪里来的。但是,因为证书是由 CA签署的——这是世界上除了该 CA 之外的任何人都无法做到的事情——并且因为我们信任 CA 来验证证书所有者的身份,所以我们相信证书来自它声称的人到。

当然,如果CA 被破坏没有正确验证所有者,则所有赌注都将被取消。


但是,还有另一种模式,在这种模式下,自签名证书确实提供了真实性。它被称为公证人模型

本质上,我们不信任单个 CA,而是将信任分配给任意数量的公证人。这些公证人在互联网上搜索证书,保存他们看到的所有证书的缓存。当您第一次访问网站并获得证书时,您会询问一些全球分布的公证人,他们最后看到的证书是什么。如果他们不同意您所看到的内容,您可能成为中间人攻击的一部分。

在这种模式下,自签名证书是完全安全的,只要我们假设服务器不会在任何公证人查看其证书之前立即受到损害。


公证人模型仍处于起步阶段,它是否会接管 CA 模型值得怀疑(实际上,它不必 - 它们可以串联使用)。迄今为止最有前途的项目是Convergence.io,它有一个 Firefox 插件。