Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误分析及处理

来源:互联网 发布:淘宝客佣金分成 编辑:程序博客网 时间:2024/04/19 18:27

https://localhost禁止访问

在本机使用Apache服务器,对编写的PHP文件进行测试的时候,出现如下问题

1、如图所示


错误代码:NET::ERR_CERT_AUTHORITY_INVALID

进一步点开Hideadvanced, 发现:


2、解决方法

在chrome的地址栏里输入 chrome://net-internals/#hsts,把localhost从HSTS中删除,如下图:


之后再次输入http://localhost/就可以直接进去了。问题解决。

 


3. 错误原因

经试验发现,对于firefox和IE不会出现上述问题。或者会出现安全警告,但是可以选择信任而继续访问页面。但是对于chrome浏览器则不可以。

原因在于,chrome浏览器新加入了HSTS策略(见上图红色圈)。使用HSTS策略是chrome加入的新特性,使用该策略的网站,会强制浏览器使用HTTPS协议与该网站通信。

HTTPS和HTTP的区别在于,用HTTPS协议时传输的数据是加密的(TSL和SSL),而用HTTP传输时是明文传输。

具体来说,HTTPS协议对传输内容使用的是对称加密算法,也即通信双方使用相同的密钥。但是对于密钥分发过程则使用的是公钥加密。但是我如何确认服务器不是别人伪造的呢?——我需要验证他的身份,即验证他的公钥。在服务器给我提供的证书中,有他声明的公钥Kp1,也有第三方用第三方自己的私钥(Ks0)加密服务器公钥(Kp1)后的密文(Ck1)。假如我相信第三方的身份是真实可信的,那么我用第三方的公钥(Kp0),解密服务器的被第三方加密的公钥,和服务器直接发给我的公钥比较。如果相同,则验证成功;不同则验证失败。

数学公式:证书构成(Kp1, Ck1, Kp0) ,其中Ck1==Eks0(Kp1),若Kp1 == Dkp0(Ck1)则验证成功。

这里一个重要的假设是我相信第三方,也即我相信证书是有效的(证书还包含其它信息来供大家确定是否有效,上段描述只是简化)。然而这里我自己搭建的服务器所提供的证书并不被chrome所信任,所以验证失败。

造成证书不受信的可能的情况有:

1. 第三方证书没有及时更新

2. 第三方服务器不安全

3. 证书不是由可信第三方颁布


参考:

[1]http://www.telerik.com/forums/err_cert_authority_invalid-in-chrome

[2]https://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029

[3]http://www.wisegeek.org/what-is-the-difference-between-http-and-https.htm

[4]http://blog.csdn.net/cswangtian/article/details/49132465

0 0
原创粉丝点击