# Https 的连接过程

Https 全称是 Hypertext Transfer Protocol Secure ,超文本传输安全协议.

Https 相比 Http 是在 TCPHTTP 之间多加了一层 SSL ( Secure Socket Layer 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持)/ TLSTransport Layer Security ,安全传输层协议)

Http 协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议 TLS/SSL 具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生,所以 HTTPHttps 之间的关系: HTTP+加密+认证+完整性保护 = Https

# 连接过程

Https 会发送两次请求,经过非对称加密和对称加密两个加密过程.

1. 客户端发送一个 https 的请求到服务端。首先还是会经过 Http 的三次握手。在第三次握手的时候,会发送客户端支持的加密套件和一个随机数 (随机数 1) 发送给服务端。
2. 服务端申请配置好数字证书,包含公钥和私钥。
3. 服务端也会生成一个随机数 (随机数 2),将客户端发送过来的加密套件中选择一种,服务端生成的随机数,证书传送给客户端,证书中包含了很多信息,比如证书的颁发机构,过期时间,网址,公钥等
4. 客户端解析证书,由客户端的 TLS 完成,首先会验证公钥是否有效,比如颁发机构,过期时间等。如果有异常,就会弹出警告信息,并结束通信。如果正常,则生成一个随机值(用于对称加密),然后用服务端的公钥对随机值进行非对称加密
5. 客户端保存服务端的随机数,客户端会使用随机数 1 和随机数 2 再次生成一个随机数 (随机数 3) 并使用服务端发送回来的加密套件与服务端发送来公钥加密后 (预主秘钥) 传送到服务端。
6. 服务端使用证书的私钥对加密后的预主密钥进行非对称解密得到预主密钥。 使用约定的加密算法对预主密钥 + 随机数 1 + 随机数 2 进行加密生成会话秘钥。
7. 服务端把对称加密后的会话秘钥到客户端。客户端也会使用随机数 1,随机数 2,随机数 3 生成一个会话秘钥,并且是和服务端的会话秘钥是一样的。
8. 客户端通过会话秘钥对明文进行加密,然后进行数据传输。

# Https 连接为什么只用一次非对称加密,内容传输都使用对称传输?

非对称加密算法十分复杂,加密解密时间长,效率低,因此我们只在 TSL 连接建立时才使用,后面的数据传输环节统一使用对称加密,这样既能保证效率,又能极大的增强安全性。

# 最后

希望和你一起遇见更好的自己。

更新于 阅读次数

请我喝[咖啡]~( ̄▽ ̄)~*

方小白 微信支付

微信支付

方小白 支付宝

支付宝

方小白 numberpay

numberpay