为什么Chrome非常讨厌自签名证书?

时间:2015-07-18 06:07:20

标签: security google-chrome ssl

我正在EC2实例上运行一个小型Web应用程序,我希望有些朋友可以使用它。我还想让它使用HTTPS,仅用于基本安全目的(尽可能防止数据包窥探)。当然我使用的是自签名证书,因为我对这个项目的预算是0美元。但Chrome在尝试访问它时会抛出一个警告页面:

  

您的连接不是私密的

     

攻击者可能试图从[...]窃取您的信息   (例如,密码,消息或信用卡)。   NET :: ERR_CERT_AUTHORITY_INVALID

     

此服务器无法证明它是[...];您的计算机操作系统不信任其安全证书。这可能是由于配置错误或攻击者拦截您的连接造成的。

“任何加密都优于不加密”是不是真的?在未加密的HTTP上,我也可能试图窃取信息,并且不必证明我的服务器身份,并且我的通信可以通过数据包嗅探以纯文本方式读取,但Chrome不会在那里抛出任何警告标志...

是什么给出的?为什么Chrome非常讨厌自签名证书?为什么不在挂锁图标上放一个小红框,而不是给我一个双击警告页?

4 个答案:

答案 0 :(得分:7)

此问题并非特定于Chrome。 Firefox和其他浏览器的行为相似,在过去几年中,警告甚至变得更加严格。抱怨这些警告表明缺少对HTTPS中证书角色的理解。

使用HTTPS,人们期望加密,即浏览器和服务器之间的私人通信,没有人嗅探或操纵传输的数据。在加密客户端和服务器开始时交换加密密钥,以便可以加密数据而另一个可以解密数据。如果某些中间人设法以控制加密密钥的方式操纵密钥交换,则连接仍将加密但不是私有的。因此,密钥交换必须受到保护,这是通过证书完成的。只有正确检查证书,客户端才能验证它是否与服务器通信,而不是某些中间人,因此可以保护关键密钥交换。

证书通常由

验证
  • 检查信任链,即证书是由浏览器或操作系统信任的证书代理机构(CA)直接或间接(通过即时证书)。
  • 验证是否为预期的主机名颁发了证书,即主题与主机名匹配。

使用由浏览器/操作系统未知的CA颁发的自签名证书或证书,此检查将失败。在这种情况下,如果原始证书尚未由受信任的CA颁发,或者如果有一些中间人操纵连接,则不知道。中间人并不难,特别是在公共热点等无保护的网络中。

由于浏览器在这种情况下无法验证证书,因此会向用户显示严重错误的警告。如果您的朋友知道您只有一些自签名证书,那么他们也应该知道这是浏览器在这种情况下的预期行为。您还应该向他们提供证书的指纹,以便他们可以确定这是预期的证书 - 因为没有其他方法可以检查此证书的有效性。请注意,此警告也会出现一次,因为浏览器会保存指纹,从那时起就知道您的站点与此证书相关联。但如果你更改证书,它会再次抱怨。

如果您不喜欢教导所有朋友如何正确验证您的证书,那么请由公共CA获取证书。他们不需要昂贵,有些人也会发放免费证书。

  

是不是真的"任何加密都比没有加密更好"?

虽然加密不好可能比没有加密更好,但是通过加密传输敏感数据但是中间人连接肯定比没有加密传输非敏感数据更糟糕。与普通HTTP相反,您实际上可以使用HTTPS检测潜在的中间人攻击。你不能做的是找出这是一个潜在的中间人攻击,还是不可验证的证书实际上是预期的,因为浏览器以前没有预期的知识。因此,如果浏览器事先知道该站点仅提供自签名证书,则自签名证书实际上并没有那么糟糕。如果传输的数据不敏感,也可能不错。但是浏览器应该如何知道什么样的数据以及期望的证书类型?

答案 1 :(得分:4)

因为SSL / TLS试图在一个笔画中解决两个问题,但你完全忽略了其中一个问题。

SSL旨在在两个端点之间提供加密,并且身份验证,每个端点正是它所说的那样。后一种解决方案通常意味着通过称为“证书颁发机构”(CA)的组织来解决,这些组织应该在同意给您证书之前验证您的身份。虽然过去在这种信任程度上出现了一些惊人的失败,但我们还没有更好的东西,因此浏览器仍然希望看到SSL / TLS证书由其中一个“受信任的权威机构”发布;如果不是,那就无法知道你是否真的和你想要的派对交谈了。因此,虽然它可能是加密的,但与不应该加入对话的人进行加密对话实际上比与应该成为对话的一方的人进行明文对话更糟糕。

有一些免费的SSL提供商,例如Let's Encrypt,它不会导致此警告,仍然符合您的0美元预算。

答案 2 :(得分:1)

点击的原因是为网络钓鱼攻击提供一些保护。

$ 0解决方法是创建一个“由Justaskin_验证”的ceritification权限(这只是一个特殊文件)并让你的朋友在他们的计算机上安装从其中删除的公钥。使用私钥 签署您的https证书,他们的浏览器将接受它。 openssl是一个可以做到这一点的工具。

答案 3 :(得分:0)

chrome://flags/#allow-insecure-localhost放入Chrome地址栏中,然后选择enabled选项。