怎么查证书的有效性?
验证证书的有效性是因为证书上面有一个数字签名,是使用颁发证书的ca的根证书的私钥签的,如果用户的电脑中安装了对应的根证书,那么就可以用根证书的公钥来验证这个签名,如果签名验证正确,那么就认为这个证书是真实有效的。另外还涉及一个证书撤销列表(CRL),需要查找证书是否在这个列表中,不在列表里面的证书才是有效的。ssl协议最开始的握手协议是这样的:
(1)客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
(2)服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
(3)客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配,检查证书是否在证书撤销列表(CRL)中。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
(4)用户端随机产生一个用于后面通讯的对称密钥,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的预主密钥(pre master secret)传给服务器。
(5)如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的预主密钥一起传给服务器。
(6)如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,检测方法和(3)中类似。如果验证通过,服务器将用自己的私钥解开加密的预主密钥,然后执行一系列步骤来产生主密钥(master secret )。客户也使用相同的方法,从预主密钥计算得到主密钥。(7)握手的主要流程结束。至此服务器与客户已共享了主密钥。双方使用主密钥可以生成用于通信的密码参数,包括通信对称密钥、mac密钥等。