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

Jus*_*kin 5 security ssl google-chrome

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

你的连接不是私人的

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

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

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

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

Ste*_*ich 7

这个问题不是针对chrome的.Firefox和其他浏览器的行为相似,在过去几年中,警告甚至变得更加严格.抱怨这些警告表明缺少对HTTPS中证书角色的理解.

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

证书通常由验证

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

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

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

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

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

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


小智 7

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


TML*_*TML 6

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

SSL旨在提供加密(在两个端点之间)和身份验证(其中每个端点正是它所说的那样)。后一种解决方案通常意味着通过称为 的组织来解决Certificate Authorities (CAs),他们应该在同意向您提供证书之前验证您的身份。虽然过去这种级别的信任发生了一些引人注目的失败,但我们还没有更好的方法,因此浏览器仍然希望看到SSL/TLS由其中之一颁发的证书Trusted authorities;如果不是,则无法知道您是否真的在与您打算与之交谈的一方交谈。

所以,虽然它可能是加密的,有与别人谁不应该是一方通话加密的会话实际上是更糟糕不必与别人谁明文对话应该成为一方交谈。

有一些免费SSL提供商Let's Encrypt不会导致此警告并且仍然适合您的$0 预算


Jas*_*sen 1

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

解决方法$0是创建一个证书颁发机构(这只是一个特殊文件),并让您的朋友在他们的计算机上verified by Justaskin_安装从中派生的公钥。
相反,使用私钥来签署您的https证书,他们的浏览器将接受它。OpenSSL是一种可以做到这一点的工具。