ssl证书验证
当我们在访问https网站时,浏览器就会自动下载该网站的SSL证书,并对证书的安全性进行检查。
其他概念不说了,有效期之类的验证也不说了。只说数字证书的真实性和可信性验证。
1.CA下发给网站的证书是分层的证书链,从根证书开始一层一层直到网站证书。要验证某一层证书是否确实由上级CA发放的需要验证附带在该证书上的由上级CA通过签名函数及私钥生成的数字签名。数字签名的解密需要上级CA的公钥,这个公钥就明文保存在证书链中的上层证书中。而根证书是自己给自己签名,也就是根证书的签名也是靠自己保存的公钥来解密。这就解决了真实性问题,也就是能证明最底层的网站证书确实是证书中标明的CA发放的。(由于证书是分等级的,网站拥有 者可能从根证书颁发机构领到证书,也可能从根证书的下一级(如某个国家的认证中心,或者是某个省发出的证书)领到证书。假设我们正在访问某个使用 了 SSL技术的网站,IE浏览器就会收到了一个SSL证书,如果这个证书是由根证书颁发机构签发的,IE浏览器就会按照下面的步骤来检查:浏览器使用内置的根证书中的公钥来对收到的证书进行认证,如果一致,就表示该安全证书是由可信任的颁证机构签发的,这个网站就是安全可靠的;如果该SSL证书不是根服 务器签发的,浏览器就会自动检查上一级的发证机构,直到找到相应的根证书颁发机构,如果该根证书颁发机构是可信的,这个网站的SSL证书也是可信的。)
(对方是不是上述证书的合法持有者。简单来说证明对方是否持有证书的对应私钥。验证方法两种,一种是对方签个名,我用证书验证签名;另外一种是用证书做个信封,看对方是否能解开)附带在证书后面的数字签名到底是上级ca签的,还是该证书自己签的?
2.而可信性是看根证书是否在操作系统或浏览器内置的根证书列表中,如果在的话那么这个证书链就可信的。