跳转至

SSL、TSL

  • https://cloud.tencent.com/developer/article/2090018
  • https://zhuanlan.zhihu.com/p/66029254
  • https://imququ.com/post/optimize-tls-handshake.html SSL/TLS 是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS 综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。

SSL(Secure Socket Layer) 安全套接层,是 1994 年由 Netscape 公司设计的一套协议,并与 1995 年发布了 3.0 版本。

TLS (Transport Layer Security) 传输层安全是 IETF 在 SSL3.0 基础上设计的协议,实际上相当于 SSL 的后续版本。

在很多场合还是用 SSL 指代 SSL 和 TLS。

1 SSL 握手协议报文类型

报文类型 参数
hello_request
client_hello 版本、随机数、会话 ID、密文族、压缩方法
server_hello 版本、随机数、会话 ID、密文族、压缩方法
certificate x.509V3 证书链
server_key_exchange 参数、签名
certificate_request 类型、授权
server_done
certificate_verify 签名
client_key_exchange 参数、签名
finished Hash 值

2 TSL 握手过程

客户端和服务端都拥有通过一系列交互,最终双方会得到 3 个随机数,两边再根据同样的算法就可以 生成一份秘钥,握手结束后的应用层数据都是 使用这个秘钥进行对称加密。为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被暴力破解出来。

SSL 握手协议的全过程: 步骤 1 建立安全能力。

客户机向服务器发送 client_hello 报文,服务器向客户机回应 server_hello 报文。建立的安全属性包括:协议版本、会话 ID、密文族、压缩方法,同时生成并交换用于防止重放攻击的随机数。密文族参数包括密钥交换方法(Deffie-Hellman 密钥交换算法、基于 RSA 的密钥交换和另一种实现在 Fortezza chip 上的密钥交换)、加密算法(DES、RC4、RC2、3DES 等)、MAC 算法(MD5 或 SHA-1)、加密类型(流或分组)等内容。

步骤 2 认证服务器和密钥交换。

在 hello 报文之后,如果服务器需要被认证,服务器将发送其证书。如果需要,服务器还要发送 server_key_exchange;然后,服务器可以向客户发送 certificate_request 请求证书。服务器总是发送 server_hello_done 报文,指示服务器的 hello 阶段结束。

步骤 3 认证客户和密钥交换。

客户一旦收到服务器的 server_hello_done 报文,客户将检查 服务器证书 的合法性(如果服务器要求),如果服务器向客户请求了证书,客户必须发送客户证书,然后发送 client_key_exchange 报文,报文的内容依赖于 client_hello 与 server_hello 定义的密钥交换的类型。最后,客户可能发送 client_verify 报文来校验客户发送的证书,这个报文只能在具有签名作用的客户证书之后发送。

步骤 4 结束。

客户发送 change_cipher_spec 报文并将挂起的 CipherSpec 复制到当前的 CipherSpec。这个报文使用的是修改密文协议。然后,客户在新的算法、对称密钥和 MAC 秘密之下立即发送 finished 报文。finished 报文验证密钥交换和鉴别过程是成功的。服务器对这两个报文响应,发送自己的 change_cipher_spec 报文、finished 报文。握手结束,客户与服务器可以发送应用层数据了。