8.6 使TCP 连接安全,SSL
SSL (Secure Socket Layer )安全套接字层, SSL 版本 3的一个稍加修改的版本被称为 TLS(Transport Layer Security)
在 http 之下,tcp 之上,有 ssl 层。
ssl 握手流程:
总体来说,ssl 握手,首先要建立一个tcp 连接 ,其次在验证server 的真实性 ,最后 client 再将对称加密所需要的key通过公钥加密交给server。此后,两端通过对称加密来完成通信。整个过程如下图所示:
抛开tcp连接的建立,详细步骤如下:
- client发送支持的算法列表以及一个随机数 x
- server 从接收的列表中选择一种对称算法、一种非对称算法 和 一种摘要算法,连同自己的证书 以及 随机数 y 一起返回
- client 验证该证书,提取公钥,并生成一个前主密钥,并用服务器的公钥加密这个 前主密钥,之后发送给server
- server 解密获得 主密钥
- client 发送自己这边所有握手的报文的一个 摘要
- server 端发送自己这边握手报文的一个 摘要
最后两个步骤保证了握手免受篡改危害。比如,在观察第一步的时候,客户端提供的算法列表,有些算法强,有些弱,因为还未协商,所以这张列表是以明文发送的。如果中间攻击者从中删除了较强的算法,迫使server 最后只能选择较弱的算法。