SSL/TLS 握手是在服务器与站点之间建立安全连接的过程,是搭建安全连接最关键的步骤之一。安全连接建立后,服务器与客户端便可放心地相互通信。
SSL 证书(或称数字证书)因其对 Web 用户、网站所有者和发布者的安全性而普及,它们利用公钥密码学对客户端与 Web 服务器之间的数据传输进行编码。数字证书有多种类型,但都服务于同一目的:为客户端与网站所有者提供安全保障。网站所有者频繁使用 SSL 证书将黑客拒之门外。要启动安全连接,客户端与服务器首先需执行包含身份验证、密钥交换等步骤的 SSL 握手过程。让我们先了解 SSL/TLS 证书的工作机制,再完整讲解 TLS 握手过程。
什么是 SSL/TLS?
SSL(Secure Socket Layer,安全套接层)是一种广泛使用的标准安全协议,用于保护互联网通信。SSL 使用非对称加密防止信息落入攻击者之手。SSL 证书由可信的证书颁发机构签发,确保没有正确编解码密钥的人无法读取用户与服务器间共享的数据。SSL 证书借助两把密钥完成加密与解密:一把是任何试图与站点建立安全连接的人都可使用的公钥;另一把是由 Web 服务器保密的私钥,用于解密来自客户端的消息。由此,服务器与客户端浏览器之间建立了安全连接。若访问未安装 SSL 证书的站点,所有信息将以明文形式共享,任何人都能拦截并读取你的私密数据,黑客可利用这些信息达成恶意目的。SSL 证书可抵御此类攻击——即便有人截获数据,没有正确的加解密密钥也无法读取。
TLS(Transport Layer Security,传输层安全)是比 SSL 更先进的版本,如今几乎所有网站都使用 TLS 而非 SSL,因其提供比 SSL 更好的保护。你或许会疑惑,为何 SSL 比 TLS 更常被提及——这更像是一个深入人心的品牌名。换言之,购买了 SSL 证书后,便无需再单独获取 TLS 许可。
什么是 SSL 握手?
SSL 握手是在服务器与站点间建立安全连接的过程,是搭建安全连接最关键的步骤之一。安全连接建立后,服务器与客户端便能放心通信。SSL 握手过程主要完成三件事:协商密码套件、验证浏览器与服务器双方身份、交换密钥。下面逐一说明。
协商密码套件(Cipher Suites):密码套件是一组聚焦网络安全保障方式的指令集,规定了 HTTPS、FTPS 等网络协议如何安全通信数据。不同浏览器(Firefox、Safari、Chrome、Edge)与操作系统(macOS、Windows、Linux、iOS)在服务端的功能支持略有差异,引入自定义设置后更趋复杂。因此 TLS 握手的第一阶段让客户端与服务器共享各自资源,以识别双方共同支持的加密特性,最终确定所用密码套件。
身份验证(Authentication):客户端浏览器收到证书后核查其"真实性",既要编码信息建立安全链接,也要确保信息提交给了正确的网站/组织。所有可信 SSL 证书均由证书颁发机构(CA)授予,这类机构须遵循严格的签发与证书协议。客户端在 TLS 握手身份验证阶段执行多项加密安全测试,验证服务器提交的证书合法,并确认其由可信 CA 签发;同时确认服务器持有证书关联的私钥。公钥用于加密、私钥用于解密,这被称为"非对称加密"。客户端可用最流行的公钥密码系统 RSA,以公钥编码随机信息生成会话密钥,只有持有私钥的服务器能解码使用,从而证明所有权。
密钥交换(Key Exchange):过程的最后一步是生成"会话密钥"——安全交互的关键。会话密钥是"对称"的,即编码与解码使用同一把密钥,比非对称密钥更高效,非常适合 HTTPS 链路上来回传输数据。依所选密码套件不同,密钥生成方式各异,RSA 与 Diffie-Hellman 是最常用的两种。双方告知彼此已完成握手相关工作,随后执行校验和,确保握手未被蓄意干扰或欺诈。在 HTTPS 链接中,这是访问网站前必须发生的第一阶段,且耗时极短。SSL 握手完成后,编码并验证过的 HTTPS 链接启动,你与服务器间收发的所有信息均受保护。
通过图示理解 SSL/TLS 握手
依所用密钥交换方法与双方支持的密码套件不同,TLS 握手内的确切步骤会有差异:
用户发送"Hello"消息启动握手,其中包含支持的 TLS 类型与密码套件,以及一串称为"client random"的随机字节。
服务器回复中携带其 SSL 证书文本、所选密码套件,以及服务器生成的随机字节串"server random"。
用户的浏览器验证服务器提供的 SSL 证书及其签发 CA,证明服务器确为其声称的身份,客户端正与证书持有者交互。
客户端发送另一条以 SSL 证书公钥编码的消息(premaster secret),只有服务器持有的私钥能解码。
服务器用私钥读取该消息。随后结合 client random、server random 与 premaster secret 生成会话密钥。
服务器与客户端各自发送以会话密钥编码的"finished"消息。SSL 握手成功完成,双方使用会话密钥继续安全通信。
总结
SSL 握手是保障互联网通信安全的核心过程之一,它在幕后安静而快速地发生,多数人并未察觉。但若没有它的成功执行,用户数据与客户端资源便面临被黑客攻击的危险。SSL 握手依赖客户端与服务器选择正确的密码套件和 SSL/TLS 版本来启动过程,理解上述完整流程有助于清晰掌握 SSL/TLS 握手机制。