一、TLS/SSL基础概念
1、概念
TLS传输层安全性协议(Transport Layer Security)
SSL安全套接层(Secure Sockets Layer)
目的:为互联网通信提供安全以及数据完整性保障。
HTTPS = HTTP + TLS/SSL
2. TLS/SSL功能实现
TLS/SSL的功能实现主要依赖三类基本算法:
非对称加密:身份认证和密钥协商
对称加密:采用协商的密钥对数据进行加密
散列函数 Hsah:验证信息完整性
3. 非对称加密
常见的RSA算法,还包括ECC、DH算法。
算法特点:密钥成对出现,一般分为公钥和密钥。
4. 对称加密
常见的AES-CBC、DES、3DES、AES-GCM等。信息的加密和解密都使用相同的米哟啊,掌握密钥才能获取信息。
在对称密钥中,信息安全的基础是保证密钥的安全。
5. Hash 散列函数
常见的MD5、SHA1、SHA256.
函数特点:函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息纂改并验证数据的完整性。
散列函数不能单独实现信息防纂改,需要对信息进行加密传输。
二、密钥协商过程中存在的问题和解决的办法
使用非对称密钥与服务器进行通信,实现身份验证并协商对称加密使用的密钥
上图中的过程不安全
解决办法:
常见的方法为依靠中心化机构,包括对公钥基础设施PKI的使用。
PKI负责提供创建、吊销、分发以及更新密钥对与证书的服务。它需要一些证书颁发机构 CA (Certificate Authority) 才能运行。
三、TLS/SSL握手过程
1. client_hello
客户端发起请求,以明文传输请求信息
包含:
- TLS版本信息
- 客户端支持的加密套件cipher suites列表,每个加密套件对应TLS原理中的四个功能的组合:认证算法Au(身份验证)、密钥交换算法Key Exchange(密钥协商)、对称加密算法Enc(信息加密)和信息摘要Mac(完整性校验)。
- 支持压缩算法的compression methods列表,用于后续的信息压缩传输
- 随机数random_C,用于后续密钥的生成
- 扩展字段extensions
2. server_hello + server_certificate + server_hello_done
- server_hello,服务端返回协商的信息结果,包含TSL版本、选择的加密套件、选择的压缩算法、随机数random_S(用于后续的密钥协商)。
- server_certificates,服务器端配置对应的证书链,用于身份验证和密钥交换
- server_hello_done,通知客户端server_hello信息发送完毕
3. 证书校验
客户端验证证书的合法性,通过验证才会进行后续的通信,否则根据情况进行操作
4. client_key_exchange + change_cipher_spec + encrypted_hansshake_message
- client_key_exchange,合法性验证通过后,客户端计算随机数Pre-master,并用证书加密,发送给服务器。
- 客户端计算协商密钥:enc_key = Function(random_C,random_S,Pre_master);
- change_cipher_spec,客户端通知服务器后续的通信都采用协商密钥和加密算法进行通信
- encrypted_handshake_message,结合之前所有通信参数的hash值与其他相关信息生成一段数据,采用协商密钥session secret与算法进行加密,发送给服务器进行验证
5. change_cipher_spec + encrypted_handshake_message
- 服务器用私钥解密加密的Pre-master数据,计算协商密钥enc_key = Function(random_C,random_S,Pre_master)
- 计算之前收到的所有信息的hash值,然后解密客户端发送的encrtpted_handshake_message,验证数据和密钥的正确性
- change_cipher_spec,客户端通知服务器后续的通信都采用协商密钥和加密算法进行通信
- encrypted_handshake_message,服务器也结合当前的通信参数信息生成一段数据并采用协商密钥session secret与算法加密并发送到客户端。
6. 握手结束
客户端计算所有接受信息的hash值,并用协商密钥解密encrypted_shakehand_message,验证服务器发送的数据和密钥,验证通过后握手完成。
7. 加密通信
开始使用协商密钥与算法进行加密通信。
四、数字签名
数字签名:发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用发送方的私钥对摘要进行加密,成为该报文的数字签名。
数字签名与报文一起被发送方发送给接收方,接收方用与发送方一样的哈希函数从原始报文中计算出报文摘要,接着用公钥对报文附加的数字签名进行解密,若相同,则确认无误
数字签名的功效:
- 确认消息确实是由发送方签名并发送出来的
- 数字签名能确认消息的完整性
标签:TLS,加密,协商,握手,SSL,密钥,客户端 From: https://www.cnblogs.com/return-study-wa/p/16332946.html