证书验证过程 :本地CA公钥解证书里的数字签名,用签名里的指纹算法求哈希值与指纹比对。
签名被篡改后没有私钥加密,公钥解密这一步就会检测出来。
1. 双方通信内容的安全性是靠公钥加密、私钥解密来保证的,这一安全性由非对称加密的特性,即由公钥加密的信息只能使用对应的私钥才能解开来保证。由于私钥不会传递,只有拥有者知道,所以安全性就由公钥的正确性来保证。
2. 公钥由对方在通信初始所提供,但是这时很容易被中间人替换掉,为了保证公钥的正确性,所以在发送公钥的时候也会提供对应的数字证书,用于验证这个公钥是对方的而不是中间人的。那么安全性就是由数字证书的正确性来保证了。(证书以及其内的公钥也有可能被中间人截获)
3. 数字证书是由上级 CA 签发给个人 / 组织的,上级 CA 用自己的私钥给个人证书进行签名,保证证书中的公钥不被篡改,而接受者需要用上级 CA 证书中的公钥来解密个人数字证书中的数字签名来验证证书中的公钥是否是正确的。那么安全性就是由上级 CA 证书的正确性保证的了。
4. 但是,上级 CA 证书也是由其上级 CA 签发的,这种信任关系一直到根证书。根证书没有上级 CA 为其签名,而是自签名的,也就是说,它自身为自身签名,保证正确性。所以根证书就是这个信任链最重要的部分。如果根证书泄露的话,其签名的所有证书及使用其签名的证书所签名的证书的安全性将不复存在。现在,安全性就是靠系统根证书的私钥不被泄露或者其公钥不被篡改来保证的了。
5. 根证书不应该通过网络分发,因为通过网络分发的话,可能会被中间人攻击。一般根证书都通过操作系统或者浏览器分发,在操作系统中会内置很多根证书,但是最初的操作系统也不能通过网络分发,因为中间人可以修改操作系统中的根证书。所以要保证安全只能靠最原始的方法,当面交流。硬件厂商会和证书签发机构合作,在电脑、手机等设备出厂的时候在其操作系统中内置签发机构的根证书,再将这些设备分发出去,这样,这些设备的用户就可以安全地进行信息交换了。所以,安全性就依赖于这些设备在分发到消费者手中之前不会被恶意修改来保证了。
至此,整个信任链就建立起来了,只需要有一台设备上安装了可以信任的根证书,就可以用来分发更多安全的操作系统了。之后的所有信任链都是安全的了。
证书能鉴别伪装的服务器,那能鉴别伪装的客户端吗?
证书能鉴别伪装的服务器,确切的说是公钥可以鉴别是不是对应的服务器,因为他跟私钥是配对的。而证书里的公钥对不对,你把证书在信任链查一下就知道了,如果是对应域名的授信证书,那服务器一定是对的。
证书不能直接鉴别伪装的客户端,但我们有办法,中间人是无法解客户端的公钥加密的,只需要在公钥加密时生成一个对称秘钥发给服务器,服务器用这个秘钥加密数据发送。中间人与客户端都是使用公钥,他是无从获得此秘钥的。