Answers:
有趣的问题,这取决于我的用法。就会话加密而言,您仍然受到保护,但是除非您将CA根证书分发给用户/客户端,否则您无法确定它是否是提供给您的正确SSL证书。对于内部测试/开发项目,这将非常有用,您会生成一个根CA证书,并使用该证书分发给用户(可以通过Windows中的组策略和Linux / BSD中的openssl命令行来完成),然后将该根证书用于签署您的CSR。用户将不会看到警告或任何警告,并且您知道证书是由内部CA签名的。
对于您无法确定的外部站点,我仍然要说,如果您通过连接发送密码或其他敏感信息,那么自签名证书总比没有SSL更好。
但是,从好的方面来说,有很多非常便宜的“商业”证书发行者,其中GoDaddy是其中之一。您每年可以获得约40欧元的证书。GoDaddy甚至向OpenSource项目网站提供免费证书。
我将不同意,一次是在狭窄的技术基础上,一次是在一般基础上。
狭窄的技术基础是OP询问有关自签名证书的问题,而其他几个答案则是指由私有CA签名的证书,这是一个稍有不同的问题。但是差别不大,因此实际上只是顺便提一下。
主要的反对意见是,我认为只要商业签发的证书的费用不只是微不足道的费用-而且对于这个星球上的许多人来说,每年40美元对他们来说不是微不足道的费用-自签证书会发挥主要作用在互联网安全中,只要其局限性得到认可。
自签名证书就像我known_hosts
文件中的ssh密钥一样。没有独立的验证,就无法保证我正在与自己相信的系统进行交谈;但是它可以确保我现在正在使用的系统与我上次以为正在与之对话的系统相同。我们一直在缓存ssh密钥,而我还从未见过系统管理员独立验证过他known_hosts
文件中的一小部分公共密钥。
只要人们意识到除非自己验证,否则只有服务器自己可以保护通信,自签名证书(以及由非有效CA签名的证书)要比没有SSL更好。在DNS记录的另一端,以及当前在线的任何中间人。如果他们独立验证证书,则身份验证和加密至少与由公认的CA签署的证书所提供的身份验证和加密一样强。
此外,那些希望目前使用由公认的CA签署的一个和唯一的互联网安全的灵丹妙药证书可能需要认真考虑如下问题的标准Mozilla的束列入中国政府签署CA的,并且在由Comodo签署的欺诈性SSL证书。
known_hosts
@MadHatter正在引用。
对于外部站点,用户没有安装您的CA证书(这是最常见的情况),是的,自签名证书会给人一种虚假的安全感,因此,它比没用还糟:
首先,如果没有预先安装的CA证书,用户如何验证该证书确实来自您而不是来自攻击者?通过匹配证书字段(CN,指纹等),当然-但要反对什么呢?因此,现在您需要一个辅助渠道来验证证书-在少数情况下,我已经知道,支持热线运营商(应作为辅助渠道来进行验证)不知道这是什么意思。同样,操作这种副信道比获得受信任的CA签名证书要贵几个数量级,因此用户必须盲目地信任您。
其次,用户收到的可怕警报是令人恐惧的,这是有充分理由的:由于用户无法/不会验证所提供的证书,因此他们可能正在安全地将数据传输到Elbonian Haxx0r D00dz。
第三,最糟糕的是,您正在使用户不敏感:“好吧,他们告诉我,我应该忽略https://mysite.example.com/上的警告,并且铁砧没有掉到我的头上,金鱼也没有死;太好了,这意味着它只是另一个没有任何实际意义的警报框,所以我遇到这个框时就可以忽略它-无论如何我都会得到那个漂亮的锁图标,这很重要。”
换句话说,保护级别与普通HTTP相当(在线嗅探除外:尽管数据在传输过程中进行了加密,但是如果没有端点验证,这是相当贫乏的功能),但是保护的感觉却不合理。 。糟糕的汽车类比:“我有ABS,因此我现在可以在恶劣的条件下更安全地驾驶”-除了ABS仅存在于汽车的销售手册中,而实际上并未出现在汽车中。
建议阅读:OWASP SSL最佳实践
TL; DR:通过在面向公众的站点上使用自签名证书,您使Internet变得更糟,一次只有一个笨拙的用户。
要看。如果您认为这样做可以提高安全性,那么当您选择以错误的安全感来做更冒险的事情时,就会增加风险。如果您在功能上等同于HTTP,那么我会说您稍微安全些。
如果没有SSL / HTTPS,则您的网络(或任何登录的人的本地网络)上的任何人都可以琐碎地侦听并捕获以纯文本形式发送的用户名/密码。
使用自签名SSL,他们不能简单地侦听,但现在必须伪造您的站点,可能会更改DNS,以对其进行中间(MITM)攻击。这仍然是一种威胁,但对他们而言要困难得多。
使用自签名SSL的另一个问题是,许多浏览器将自签名证书视为主要的安全威胁,并在进入带有巨大红色页面的(例如chrome)之前向您发出警告。 http://www.sslshopper.com/article-ssl-certificates-in-google-chrome.html 这可能会带来很大的不便。
因此,最重要的是:如果您运行的东西不需要特别安全(例如,没有信用卡数据,没有社会保障号码)并且负担不起适当的证书,那么自签名证书可能会有所帮助(也就是说,防止其他网络用户轻易嗅探其登录信息)。
这取决于您对“安全性”的含义,以及程度。
例如,您的浏览器默认带有一组接受的CA。这意味着,此CA颁发的任何证书都将被您的浏览器接受(直到它与dns名称匹配)。现在,想象一下某个邪恶的政府拥有CA,或者可以强制CA为您访问的站点颁发证书。然后,进行一次MITM非常简单:他们可以代理您的连接,将其拥有的证书发送给您的浏览器,由于它来自“受信任”的CA,因此您的浏览器将接受它。在它们是DNS透明的(这是MITM的基础)之前,这是可以的。
因此,“接受的CA列表”基本上是一个很大的安全漏洞,直到该CA中的一个与某些邪恶的政府合作为止。拥有自己的CA会更好。
当然,您可以在公司或家庭服务器中执行此操作,因为您可以将自己的CA证书安装到客户端中,您也可以对其进行控制。在公共服务器中,您无法与任何用户打交道,也不能要求他添加例外或添加证书。
因此,这取决于您对“安全性”的含义以及范围。如果您拥有客户端,那么可以肯定,自签名会更安全,直到在客户端本身上安装自己的CA证书为止。
当然,由于您不拥有所有客户,因此您不能在公共网站上进行此操作。因此,您将面临各种行为的危险,这是不安全的。