当客户端和服务器进行非对称的密钥通信时,服务器需要将一把公钥安全无误的交给客户端,这就涉及了公钥会不会被伪冒的问题。为了解决这一问题,可以使用权威认证机构CA去认证公钥的官方性。
首先服务器接收到SSL/TLS连接请求后,生成一把公钥和一把私钥,然后向权威机构CA申请公钥认证证书。
CA拿到公钥后给服务器端生成文件证书(包含序号Serial Number,发行人Issuer,合法性Validity等),然后将文件证书经过Hash算法计算成为一个哈希值,接着使用自己的私钥给哈希值进行加密,此时就相当于给证书加上了自身特有的签名。然后将加密过的哈希值作为Certificate Signature绑定文件证书,文件证书和数字签名共同放入数字证书中返回给服务器,服务器拿到后将其发送给客户端。
发送的过程中,文件证书中的信息没有被加密,所以是可能被拦截改动的。
客户端拿到数字证书后选择一开始约定好的密码套件中的公钥加密算法,给数字签名解密,解密后就获取了被哈希算法加工后的哈希值。而客户端同样可以使用约定好的哈希算法给接收到的文件证书计算哈希值,若两个哈希值是一样的,那么就可以断定:1.证书没有被中途修改,否则前者的哈希值会出现偏差,2.证书是权威机构发的,否则用公钥解开的数字签名不可能与之前的哈希值一样。
后面就可以根据公钥加密第三个秘密随机数,最后用于生成对称通信的密钥。