加密、签名和 SSL 握手机制细节

PPG007 ... 2022-4-15 About 5 min

# 加密、签名和 SSL 握手机制细节

互联网数据安全可靠的条件:

  • 数据来源可信,即数据发送者身份可信。
  • 数据具备完整性,即数据未被修改过。
  • 数据安全性,即数据不会被泄露,他人截获后无法解密。

数据安全性需要进行加密解决,AES 对称加密性能好,但是需要发送方和接收方都有密钥,非对称加密 RSA 不需要双方都有密钥,但是性能差。一般是先通过 RSA 建立安全的连接,传输一个随机的 AES 密钥,然后后续通信使用这个密钥进行 AES 加密。

保证了安全性之后,还需要保证数据的完整性、一致性以及数据来源的可靠性。

对于数据的完整性和一致性,使用单向加密算法,即哈希函数,计算出独一无二的校验码,这个校验码称为信息摘要(Message Digest)

对于数据来源的可靠性,发送方在发送时先用自己的私钥加密,如果接收方无法使用发送方的公钥解密就表示数据来源存在问题。由于 RSA 性能较差,所以可以只使用私钥加密上面的信息摘要,加密后的摘要信息称为数字签名

接收方获取到数据后,使用发送方的公钥解密,如果解密失败则表示数据来源有问题,如果没有问题说明数据来源可靠。这时接收方可以使用同样的哈希算法获取摘要信息,将自己计算得到的摘要信息和收到的摘要信息进行比对,如果相等就说明数据没有被修改过,否则就是被修改过了。

# CA、PKI 及信任 CA

CA 是数字证书认证中心,常称为证书颁发机构,申请者提交自己的公钥和一些个人信息给 CA,CA 对申请者的这些信息单向加密生成摘要信息,然后使用自己的私钥加密整个摘要信息,这样就得到了 CA 对申请者的数字签名,在数字签名上再加上 CA 自己的一些信息及该证书的信息就得到了数字证书。

如果某用户信任了该 CA,就获取了该 CA 的公钥,使用该公钥解密数字证书就可以验证申请者的信息以及申请者公钥的可靠性。

CA 如何保证自身的合法性呢?根 CA 是通过自签署数字证书的方式标榜自己的可信性和合法性,第一级子 CA 由根 CA 颁发合法数字证书,第二级至所有的子 CA 都由上一级子 CA 颁发数字证书,对于多级子 CA 只需要信任根 CA 即可,因为获得了根 CA 的公钥,可以解密第一级子 CA 的证书并获取验证第一级子 CA 的公钥,层层递进,最终获取到为申请者颁发数字证书的机构并获取它的公钥。

另一种情况,虽然信任了根 CA,但是如果根 CA 授权的某个二级或者更低级的 CA 不再信任列表中,就需要将这个中间的 CA 补齐,否则中间出现断层。通常这种中间 CA 的证书称为 chain 证书,如果购买的证书包含 chain.crt 文件就说明它是中间 CA,这是应该将这个 chain 证书也部署到服务器上。

根 CA 和子 CA 构成了 PKI。

信任CA后,每次接收到需要解密的数字证书时,还要去该颁发机构指定网站的证书吊销列表(CRL)中查询该证书是否被吊销,对于吊销后的证书应该不予以信任,这是信任CA的第二个作用。导致证书被吊销的可能性不少,例如申请者的私钥被黑客获取,申请者申请吊销等。

也有公司使用自签的证书,例如某些银行、12306有时候就要求下载证书并安装。方便、省钱。

# 数字证书的类型和内容

PKI 的两种实现方式 TLS 和 SSL 使用的证书格式都是 x509,TLSv1 和 SSLv3 基本等价,只不过 SSL 实现在 OSI 4 层模型中的应用层和传输层的中间,TLS 实现在传输层。

还有 PKI 的另一种实现方式 GPG,它的证书使用的不是 x509 格式。

数字证书中包含的信息有:申请者的公钥,证书有效期,证书合法拥有人,证书如何被使用,CA 的信息,CA 对申请者信息的数字签名。

# SSL 握手机制

  • 客户端给出协议版本号,一个客户端随机数,以及客户端支持的加密方式。
  • 服务端确认双方使用的加密方法,以及一个服务器生成的随机数。
  • 服务器将数字证书发送给客户端。
  • 客户端确认数字证书有效(查看证书状态并查询证书吊销列表),并使用信任的 CA 的公钥解密数字证书获得服务端的公钥,然后生成一个新的 46 字节随机数(称为预备主密钥)并使用服务端的公钥加密预备主密钥发送给服务端。
  • 服务端使用自己的私钥解密发来的预备主密钥。
  • 客户端和服务端双方都具有了客户端随机数、服务端随机数、预备主密钥,二者根据约定的加密方法使用这三个随机数生成对称密钥——主密钥(也成对话密钥),用来加密接下来的整个对话过程。
  • 在双方验证玩主密钥的有效性之后,SSL 握手机制就结束了,之后所有的数据通过主密钥加密传输即可。
Last update: April 15, 2022 15:12
Contributors: PPG007