当前位置 博文首页 > CERT_AUTHORITY_INVALID 错误分析及处理_Pulp Fiction:Chrome N

    CERT_AUTHORITY_INVALID 错误分析及处理_Pulp Fiction:Chrome N

    作者:[db:作者] 时间:2021-07-26 14:53

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

    1. 问题描述

    今天用Apache搭建好PC端服务器后,用Chrome测试,打开http://localhost/时出现了如下的错误:
    这里写图片描述

    错误代码: NET::ERR_CERT_AUTHORITY_INVALID
    进一步点开Hide advanced, 发现:

    这里写图片描述

    2. 错误原因

    经试验发现,对于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. 证书不是由可信第三方颁布

    3. 解决方法

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

    解决方法

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

    问题解决。

    参考:
    [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

    cs