Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 为什么Chrome如此讨厌自签名证书?_Security_Google Chrome_Ssl - Fatal编程技术网

Security 为什么Chrome如此讨厌自签名证书?

Security 为什么Chrome如此讨厌自签名证书?,security,google-chrome,ssl,Security,Google Chrome,Ssl,我正在EC2实例上运行一个小型web应用程序,我希望一些朋友能够使用它。我还想让它使用HTTPS,只是为了基本的安全目的(尽可能防止数据包窥探)。当然,我使用的是自签名证书,因为我这个项目的预算是0美元。但Chrome在试图访问它时会弹出一个警告页面: 你的连接不是私人的 攻击者可能试图从[…]窃取您的信息 (例如,密码、消息或信用卡)。 NET::ERR\u CERT\u AUTHORITY\u无效 此服务器无法证明它是[…];您计算机的操作系统不信任其安全证书。这可能是由于配置错误或攻击者拦

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

你的连接不是私人的

攻击者可能试图从[…]窃取您的信息 (例如,密码、消息或信用卡)。 NET::ERR\u CERT\u AUTHORITY\u无效

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

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


有什么好处?为什么Chrome如此讨厌自签名证书?为什么它不在挂锁图标上放一个红色的小框,而不是给我一个两次点击的警告页面呢?

点击的原因是为了提供一些防止钓鱼攻击的保护

$0
解决方案是创建一个由Justaskin验证的证书颁发机构
(这只是一个特殊文件),并让您的朋友在他们的计算机上安装从中派生的公钥。

相反,使用私钥签署您的
https
证书,他们的浏览器将接受它
OpenSSL
是一个可以做到这一点的工具。

这个问题并不特定于chrome。Firefox和其他浏览器的行为可能类似,在过去几年中,警告甚至变得更加严格。抱怨这些警告更多地表明对HTTPS中证书的作用缺乏理解

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

证书通常由

  • 检查信任链,即证书是否由浏览器或操作系统信任的证书代理机构(CA)直接或间接(通过即时证书)颁发
  • 验证是否为预期主机名颁发了证书,即主题与主机名匹配
对于自签名证书或由浏览器/OS未知的CA颁发的证书,此检查将失败。在这种情况下,不知道原始证书是否已经由受信任的CA颁发,或者是否有人在中间操纵连接。中间人并不难,尤其是在公共热点等不受保护的网络中

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

如果你不喜欢麻烦地教你所有的朋友如何正确地验证你的证书,那么你可以通过公共CA获得证书。证书不需要太贵,有些还可以免费颁发证书

“任何加密都比不加密好”不是真的吗


虽然坏的加密可能比不加密好,但通过en加密传输敏感数据,但中间人连接肯定比不加密传输非敏感数据更糟糕。与普通HTTP相反,您实际上可以通过HTTPS检测到潜在的中间人攻击。您不能做的是找出这是否是潜在的中间人攻击,或者不可验证的证书是否是预期的证书,因为浏览器之前不知道预期的内容。因此,如果浏览器预先知道该站点只提供自签名证书,那么自签名证书实际上并没有那么糟糕。而且,如果传输的数据不敏感,也可能不坏。但是浏览器应该如何知道需要什么样的数据和什么样的证书呢?

因为
SSL/TLS
试图一下子解决两个问题,但您完全忽略了其中一个问题

SSL旨在提供加密(两个端点之间)和身份验证(每个端点都是它所说的人)。后一种解决方案通常是通过称为
证书颁发机构(CA)
的组织来解决的,这些组织应该在agr之前验证您的身份