先看加密过程
如果服务端和客户端通信,客户端利用非对称加密算法的公钥加密报文,服务器自己生成私钥来解密。看起来没问题,但是公钥的发送给客户端就成了问题,公钥虽然被是被公开的,但是并不希望其他人也拥有你的公钥。所以需要一层包装,用非对称加密算法包住对称加密算法
采用非对称加密算法生成公钥和私钥,利用公钥加密对称加密算法的**
利用对称加密算法,加密报文(包括请求头和请求行)。此后的通信只需要用对称加密算法的**来加密信息来通信
问题产生:怎样确定服务端而不是黑客拦截
这时候就需要数字证书,进一步引出数字签名。
再看认证过程
2.证书如何安全传输,被掉包了怎么办?
数字证书包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要,然后根据证书上描述的计算证书的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。
那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名