加密明文长度不受限制
实际上,单纯用非对称加密不仅是计算速度上受限制,其实也不能保证通信双方是可信任的,依然避免不了中间人攻击:
这主要是因为公钥在不安全的网络信道中传递也是可能被篡改的,那么要怎么解决呢?这个时候我们需要引入权威的数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
CA 是客户端和服务端都信赖的第三方机构,CA 也有公钥和私钥,公钥一般内置在操作系统中,无需经过网络传递,自然也保证了 CA 公钥的安全性。
具体流程是服务器的运营人员向 CA 提出公钥的申请,CA 在判明申请者的身份(通过指定 DNS 解析、挂载指定文件等方式)之后,会对使用自己(CA)的私钥对该申请者的负载信息(公钥、服务器信息、证书过期时间等)的哈希值做数字签名,然后将数字签名和该申请者的数据放入公钥证书后绑定在一起。
客户端向服务器发起请求时,服务器会先把证书发给客户端,证书分为负载信息和签名,客户端使用 CA 的公钥对签名进行解密得到负载信息的哈希值,再对比真实负载信息的哈希值,如果一致则说明验证通过,可以进行后续的安全通信了。