SSL/TLS 概念
SSL(Secure Socket Layer,安全套接字层)是一种标准安全协议,由美国网景(Netscape)开发,用于在在线通信中建立 Web 服务器和浏览器之间的加密链接。SSL 技术的使用确保了 Web 服务器和浏览器之间传输的所有数据都保持加密状态。TLS(transport Layer Security,安全传输层协议)是 SSL 标准化后的版本,与 SSL 基本没有区别。
SSL/TLS 的主要功能:
- 认证用户与服务器,确保数据发送到正确的客户端和服务器,即可靠性
- 加密数据,即机密性
- 维护数据的完整性
SSL 协议架构
SSL 基于 TCP,且分为两个子层:握手层和记录层,其中握手层负责建立 SSL 连接,记录层负责对报文的加解密。

握手层:
- 协商加密能力
- 协商密钥参数
- 验证对方身份
- 建立并维护 SSL 会话
握手层协议报文格式:
- 消息类型 Type
- 消息长度 Length
- 消息相关参数 Content
SSL 提供三种握手过程,分别为:
无客户端身份认证的全握手
- 客户端向服务器发送以下信息:支持的 SSL 最高版本、加密套件列表、压缩算法列表、客户端随机数(32 位)、会话 ID
- 服务器端回应客户端以下信息:服务器同意的 SSL 版本、加密套件、压缩算法、会话 ID、服务器端随机数。并且还会发送服务器的证书、服务器端密钥交换的信息,最后通知对端握手信息已发完
- 客户端再向服务器端发送密钥参数和握手过程的验证报文,并通知对端开始启用加密参数
- 服务器再向客户端发送自己的握手过程验证报文,并通知对端开始启用加密参数
有客户端身份认证的全握手
与上面类似,但在第 2 步后,服务器端还会向客户端请求客户端的证书,然后客户端回应自己的证书,并会附加上数字签名
会话恢复
当 SSL 连接因某些原因不正常断开后,可在超时时间内进行会话恢复。
客户端向服务器发送的消息与第 1 条一致,其中会话 ID 为上一次 SSL 连接的会话 ID。其余过程也基本一致。
记录层:
- 保护传输数据的机密性,对数据进行加密和解密
- 验证传输数据的完整性,计算报文摘要
- 对报文压缩
- 保证数据传输的可靠有序
记录层对数据包的三个操作:分片、压缩、加密
记录层协议报文格式:
- 报文类型:1 个字节,密钥改变协议(20)、告警协议(21)、握手协议(22)、应用层数据(23)
- 版本:2 字节,TLS1.0(3,1)、SSL3.0(3,0)
- 长度:2 字节记录层报文的长度,包括加密数据和 MAC 值
- MAC:消息验证码
SSL 会话与连接
SSL 会话是指客户端与服务器间的关联关系,通过握手协议创建。而 SSL 连接是用于点对点数据的传输,连接的维持时间比较短暂,且一定与一个会话关联。
一次会话过程通常会发起多个 SSL 连接来完成任务,这些连接共享会话定义的安全参数,这样可以避免为每个 SSL 连接单独进行安全参数的协商,而只需在会话建立时进行一次协商,提高了效率。
HTTPS 与 HTTP 连接的建立耗时也因为 SSL 层而出现 3 倍的差距。可通过curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}" -so /dev/null 网址测试。
OpenSSL 概念
OpenSSL 是一个 SSL 的密码库,是对 SSL 协议的实现,包含了主要的密码算法,常用的密钥和证书封装管理功能。
OpenSSL 提供八种对称加密算法(DES、AES、Blowfish、CAST、IDEA、RC2、RC5),支持四种非对称加密算法(DH、RSA、DSA、椭圆曲线 EC),实现五种信息摘要算法(MD2、MD5、MDC2、SHA(SHA+SHA1)、RIPEMD)
Heartbleed 漏洞简介
心脏出血漏洞,于 2014 年被公开。受害者的内存内容就会以每次 64KB 的速度进行泄露,通过读取网络服务器内存,攻击者可以访问敏感数据,从而危及服务器及用户的安全。
证书原理、签发流程、证书链、CT、CAA、ACME、mTLS 等完整内容,见 SSL证书笔记。