Thank Zhihao Tao for your hard work. The document spent countless nights and weekends, using his hard work to make it convenient for everyone.
If you have any questions, please send a email to zhihao.tao@outlook.com
文章目录
1. 概述
TLS (Transport Layer Security)
即传输层安全性协议,及其前身SSL(Secure Sockets Layer)
安全套接层协议是一种安全协议。
SSL/TLS
用于HTTPS
的协议,也可以用于其他应用程序级别的协议,例如FTP
,LDAP
和SMTP
。SSL/TLS
通过网络启用服务器身份验证,客户端身份验证,数据加密和数据完整性。
1.1 SSL和TLS的差异
TLS 1.0
应用了Keyed-Hashing消息认证代码(HMAC
)算法,而SSL 3.0
应用了消息认证代码(MAC
)算法。HMAC
提供与MAC
一样的完整性校验值,但是其由散列函数构造,使得更难以破解。
注意:
尽管它们的区别很小,但TLS 1.0和SSL 3.0不能互操作。
1.2 SSL/TLS优势
SSL/TLS
具备许多优势,包括:
-
消息私密性。
SSL/TLS
的主要功能是能够使用加密来保护传输的数据。 -
身份验证。
SSL/TLS
提供服务器身份验证以及(可选的)客户端身份验证,以证明参与安全通信的各方的身份。 -
消息完整性。
SSL/TLS
可以用于防止- 伪装攻击(masquerade attacks),
- 中间人攻击(man-in-the-middle),
- 斗链式攻击(bucket brigade attack),
- 回滚攻击(rollback attacks)和重播攻击(replay attacks)。
-
互操作性。
SSL/TLS
适用于大多数Web浏览器,以及大多数操作系统和Web服务器。 -
算法的灵活性。
SSL/TLS
提供了在安全会话期间使用的身份验证机制,加密算法和哈希算法的选项。 -
易于部署。多数应用程序都透明地使用
SSL/TLS
。 -
便于使用。由于
SSL/TLS
是在应用层下实现的,因此其大多数操作对于客户端是完全不可见的。这使客户端几乎不了解安全通信,甚至不了解安全通信,并且仍然可以免受攻击者的攻击。
1.3 SSL/TLS劣势
SSL/TLS
具备一些劣势,包括:
-
增加处理器负载。这是实现
SSL/TLS
的最大劣势。密码学,特别是公钥操作,占用大量CPU。结果,使用SSL时会降低性能。 -
管理成本。
SSL/TLS
环境很复杂,需要维护;系统管理员需要配置系统并管理证书。
1.4 资料
2. 协议概述
SSL/TLS
位于应用层和TCP/IP
层之间,可以在其中进行保护,然后将应用数据发送到传输层。因为它在应用层和TCP/IP
层之间工作,所以SSL/TLS
可以支持多种应用层协议。
SSL/TLS
可以分为两层:
- 第一层是握手层,它由三个子协议组成:
- 握手协议(Handshake Protocol),
- 更改密码规范协议(Change Cipher Spec Protocol),
- 告警协议(Alert protocol)。
- 第二层是记录层。
2.1 握手层
2.1.1 握手协议
握手协议用于协商客户端和服务器之间的会话信息。会话信息包括会话ID,对等证书,要使用的密码规范,要使用的压缩算法以及用于生成密钥的共享密钥。
2.1.2 更改密码规范协议
更改密码规范协议用于更改客户端和服务器之间用于加密的密钥材料。密钥材料是原始数据,用于创建用于加密的密钥。更改密码规范子协议包含一条消息,该消息告诉SSL/TLS
会话中的另一方(也称为对等方),发件人希望更改为一组新的密钥。根据握手子协议交换的信息来计算密钥。
2.1.3 告警协议
告警协议用于向对等方指示状态更改或错误情况。有多种警报可将正常和错误情况通知给对等方。完整列表可以在RFC 2246[The TLS Protocol Version 1.0]
中找到。当连接关闭,收到无效消息,消息无法解密或用户取消操作时,通常会发送告警。
2.2 记录层
记录层的协议从应用层接收并加密数据,并将其传递到传输层。记录协议获取数据,将其分段成适合密码算法的大小,然后选择压缩(或对于接收到的数据,将其解压缩),应用MAC
或HMAC
(仅TLS
支持HMAC
),然后加密(或使用在握手协议期间协商的信息来解密)数据。
3. 安全性
3.1 认证方式
为了进行身份验证,握手协议使用X.509证书
向第二方提供有力的证据,以帮助证明持有证书和相应私钥的一方的身份。证书是一种数字形式的标识,通常由证书颁发机构(CA
)颁发,其中包含标识信息,有效期,公钥,序列号和颁发者的数字签名。
CA
是相互信任的第三方,用于确认证书请求者(通常是用户或计算机)的身份,然后向请求者颁发证书。证书将请求者的身份绑定到公共密钥。CA还根据需要续订和吊销证书。例如,如果为客户端提供了服务器的证书,则客户端计算机可能会尝试将服务器的CA与客户端的受信任CA列表进行匹配。如果颁发CA是受信任的,则客户端将验证证书是真实的并且未被篡改。最后,客户端将接受证书作为服务器身份的证明。
3.2 加密
加密有两种主要类型:
- 对称密钥(也称为共享密钥)
- 非对称密钥(也称为公共密钥或公共-私有密钥)。
SSL/TLS
同时使用对称密钥和非对称密钥加密。
3.2.1 对称密钥
在对称密钥加密中,使用相同的密钥用于加密和解密消息。如果双方要安全地交换加密的消息,则它们都必须都拥有相同对称密钥的副本。对称密钥密码术通常用于加密大量数据,因为它的计算速度比非对称密码术快。典型的算法包括DES(数据加密标准),3-DES(三重DES),RC2,RC4和AES(高级加密标准)。
3.2.2 非对称密钥
非对称或公共密钥加密使用通过复杂的数学过程一起导出的一对密钥。通常通过要求CA
向证书持有者在证书中发布公钥来公开其中一个密钥。
证书持有者将私钥保密,并且永远不会透露给任何人。密钥协同工作,一个用于执行另一个的相反操作:
- 如果使用公共密钥加密数据,则只有对应的私有密钥可以解密它;
- 如果使用私有密钥进行加密,则必须使用其公共密钥进行解密。
这种关系使公钥加密方案可以做两项重要的事情:
- 首先,任何人都可以获取证书持有者的公钥,并使用它来加密只有拥有私钥的用户才能解密的数据。
- 第二,如果证书持有者使用其私有密钥加密数据,则任何人都可以使用相应的公共密钥解密数据。这是数字签名的基础。最常见的算法是RSA (Rivest, Shamir & Adleman)。
3.2.3 其他
SSL/TLS
使用公共密钥加密来向客户端验证服务器,也可以向服务器验证客户端(可选)。公钥加密也用于建立会话密钥。会话密钥在对称算法中用于加密大量数据。这将用于身份验证的非对称加密的好处与用于批量数据的更快,处理器占用更少的对称密钥加密相结合。
3.3 哈希算法
在握手过程中,哈希算法也已达成共识。散列用于建立传输期间的数据完整性。两种常见的哈希算法是消息摘要5(MD5
)和标准哈希算法1(SHA-1
)。MD5产生128位哈希值,而SHA-1产生160位哈希值。
哈希算法包括用于检查所传输数据的完整性的值。此值是使用MAC或HMAC建立的。MAC使用映射功能将消息数据表示为固定长度(最好是较小的值),然后对消息进行哈希处理。MAC确保数据在传输过程中没有被修改。MAC和数字签名之间的区别在于,数字签名也是一种身份验证方法。SSL使用MAC。
HMAC与MAC相似,但结合使用哈希算法和共享密钥。共享密钥被附加到要散列的数据上。这使散列更加安全,因为双方必须具有相同的共享密钥才能证明数据是真实的。TLS使用HMAC。有关HMAC的更多信息,请参见RFC 1024,“用于消息身份验证的键哈希”。