SSL 和 TLS 协议介绍
# SSL 和 TLS 协议介绍
互联网的通信安全,建立在 SSL/TLS 协议之上。上一篇我们讲的 HTTPS 通信,其实也是基于 SSL/TLS 协议的,本文简单介绍下 SSL 协议。
文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅 RFC 文档 (opens new window)。
# SSL 协议出现之前
不使用 SSL/TLS 的 HTTP 通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS 协议是为了解决这三大风险而设计的,希望达到:
(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。
互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得 SSL/TLS 协议变得异常复杂。
# SSL 的历史
互联网加密通信协议的历史,几乎与互联网一样长。
- 1994 年,NetScape 公司设计了 SSL 协议(Secure Sockets Layer,译作安全套接层)的 1.0 版,但未发布
- 1995 年,NetScape 公司发布 SSL 2.0 版,很快发现有严重漏洞。
- 1996 年,SSL 3.0 版问世,得到大规模应用。
- 1999 年,互联网标准化组织 ISOC 接替 NetScape 公司,发布了 SSL 的升级版 TLS 1.0 版。TLS 全称 Transport Layer Security,译作传输层安全。
- 2006 年和 2008 年,TLS 进行了两次升级,分别为 TLS 1.1 版和 TLS 1.2 版。
目前,应用最广泛的是 TLS 1.2,主流浏览器都已经实现了 TLS 1.2 的支持。
目前业内也有以下叫法:
- TLS 1.0 为 SSL 3.1 版本
- TLS 1.1 为 SSL 3.2 版本
- TLS 1.2 为 SSL 3.3 版本
# SSL 的基本运行过程
SSL/TLS 协议的基本思路是采用之前我们提到的公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
并且,由于公钥加密算法慢,因此通常会在每次对话中(也叫 session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
因此,SSL/TLS 协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。
上面过程的前两步,又称为"握手阶段"(handshake)。
# 握手阶段详解
"握手阶段"涉及四次通信,我们一个个来看。需要注意的是,"握手阶段"的所有通信都是明文的。