为什么需要 CA 证书
答案:防止中间人
中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据
为解决上述中间人问题,于是后来就出现了证书
,简单来讲就是找了一个大家公认的中介
,来证明我就是我,你就是你
的问题,防止中间被篡改:
证书中就包括个人的基本信息和最重要的公钥
证书本身的安全怎么保证
但证书在传输的过程中如果被篡改了呢,所以后来就又出现了数字签名
:
简单来讲,就是将公钥和个人信息用一个Hash算法生成一个消息摘要
这个Hash算法有个极好的特性,只要输入数据有一点点变化,那生成的消息摘要就会有巨变,能有效防止别人篡改数据
但这还是有个问题,如果中间人直接把整个原始信息依然可以伪造消息摘要
所以就出现了CA,这时CA再用它的私钥对消息摘要加密,形成签名,并把原始信息和数据签名进行合并,即所谓的数字证书
这样,当别人把他的证书发过来的时候,我再用同样的Hash算法,再次生成消息摘要
然后用CA的公钥对数字签名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了
验证证书的有效性:
浏览器默认都会内置CA根证书,其中根证书包含了CA的公钥
- 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书
- 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了,认为是危险证书。
- 对于篡改的证书,使用CA的公钥对数字签名进行解密得到摘要A,然后再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常,若不相等则是被篡改过的。
- 证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。较新的浏览器如Chrome、Firefox、Opera和Internet Explorer都实现了在线证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。
1、2点是对伪造证书进行的,3是对于篡改后的证书验证,4是对于过期失效的验证。
证书防篡改过程
公钥和个人信息用hash生成消息摘要
,ca私钥用rsa加密消息摘要生成数字签名
,原信息+数字签名为数字证书
浏览器要用ca机构的公钥解密后才能拿到数字签名,然后用相同的hash算法生成消息摘要,对比摘要来保证证书的合法性