安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
该协议由两层组成: TLS 记录协议(TLS Record)和 TLS [握手协议](https://baike.baidu.com/item/%E6%8F%A1%E6%89%8B%E5%8D%8F%E8%AE%AE/4058729)(TLS Handshake)。
简介
**传输层安全性协议**(英语:Transport Layer Security,[缩写](https://baike.baidu.com/item/%E7%BC%A9%E5%86%99)作**TLS**),及其前身**安全套接层**(Secure Sockets Layer,缩写作**SSL**)是一种[安全协议](https://baike.baidu.com/item/%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE),目的是为[互联网](https://baike.baidu.com/item/%E4%BA%92%E8%81%94%E7%BD%91)通信提供安全及数据[完整性](https://baike.baidu.com/item/%E5%AE%8C%E6%95%B4%E6%80%A7)保障。[网景](https://baike.baidu.com/item/%E7%BD%91%E6%99%AF)公司(Netscape)在1994年推出首版[网页浏览器](https://baike.baidu.com/item/%E7%BD%91%E9%A1%B5%E6%B5%8F%E8%A7%88%E5%99%A8),[网景导航者](https://baike.baidu.com/item/%E7%BD%91%E6%99%AF%E5%AF%BC%E8%88%AA%E8%80%85)时,推出[HTTPS](https://baike.baidu.com/item/HTTPS)协议,以SSL进行加密,这是SSL的起源。[IETF](https://baike.baidu.com/item/IETF)将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在[浏览器](https://baike.baidu.com/item/%E6%B5%8F%E8%A7%88%E5%99%A8)、[邮箱](https://baike.baidu.com/item/%E9%82%AE%E7%AE%B1)、[即时通信](https://baike.baidu.com/item/%E5%8D%B3%E6%97%B6%E9%80%9A%E4%BF%A1)、[VoIP](https://baike.baidu.com/item/VoIP)、[网络传真](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E4%BC%A0%E7%9C%9F)等应用程序中,广泛支持这个协议。主要的网站,如[Google](https://baike.baidu.com/item/Google)、[Facebook](https://baike.baidu.com/item/Facebook)等也以这个协议来创建安全连线,发送数据。目前已成为[互联网](https://baike.baidu.com/item/%E4%BA%92%E8%81%94%E7%BD%91)上保密通信的工业标准。
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用[X.509](https://baike.baidu.com/item/X.509)认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥([Session key](https://baike.baidu.com/item/Session%20key))。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
算法
密钥交换和密钥协商
在客户端和服务器开始交换TLS所保护的加密信息之前,他们必须安全地交换或协定加密密钥和加密数据时要使用的密码。用于密钥交换的方法包括:使用[RSA](https://baike.baidu.com/item/RSA)算法生成公钥和私钥(在TLS[握手](https://baike.baidu.com/item/%E6%8F%A1%E6%89%8B)协议中被称为TLS_RSA),[Diffie-Hellman](https://baike.baidu.com/item/Diffie-Hellman)(在TLS握手协议中被称为TLS_DH),临时Diffie-Hellman(在TLS握手协议中被称为TLS_DHE),椭圆曲线迪菲-赫尔曼(在TLS握手协议中被称为TLS_ECDH),临时椭圆曲线Diffie-Hellman(在TLS握手协议中被称为TLS_ECDHE),匿名Diffie-Hellman(在TLS握手协议中被称为TLS_DH_anon)和预共享密钥(在TLS握手协议中被称为TLS_PSK)。
TLS_DH_anon和TLS_ECDH_anon的密钥协商协议不能验证服务器或用户,因为易受[中间人攻击](https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB)因此很少使用。只有TLS_DHE和TLS_ECDHE提供前向保密能力。
在交换过程中使用的[公钥](https://baike.baidu.com/item/%E5%85%AC%E9%92%A5)/[私钥](https://baike.baidu.com/item/%E7%A7%81%E9%92%A5)加密[密钥](https://baike.baidu.com/item/%E5%AF%86%E9%92%A5)的长度和在交换协议过程中使用的公钥证书也各不相同,因而提供的**强健性**的安全。2013年7月,[Google](https://baike.baidu.com/item/Google)宣布向其用户提供的TLS加密将不再使用1024位公钥并切换到2048位,以提高安全性。 [1]
一、作用
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
(1) 所有信息都是加密传播,第三方无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。
互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。
三、基本的运行过程
SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
但是,这里有两个问题。
(1)如何保证公钥不被篡改?
解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
(2)公钥加密计算量太大,如何减少耗用的时间?
解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
因此,SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。