TLS协商过程

Posted by Leo on 2023-11-19
Estimated Reading Time 3 Minutes
Words 1.1k In Total

TLS

TLS (Transport Layer Security) 是在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本

SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议

TLS主要分为两层,底层的是TLS记录协议,主要负责使用对称密码对消息进行加密;上层的是TLS握手协议

image-20231119145214020

TLS握手过程

image-20231119153413153

客户端发出请求(ClientHello)

TLS是一套加密框架,其中的有些组件其实是可以替换的,这里可用版本号,可用的密

码套件清单,可用的压缩方式清单就是向服务器询问对方支持哪些服务

客户端向服务器端发出以下信息:

  1. 支持的协议版本(如TLS 1.0版)
  2. 客户端生成的随机数
  3. 支持的加密方法(Cipher Suite)和支持的压缩方法
  4. 会话ID和当前时间戳

服务器回应(SeverHello)

服务器端收到ClientHello消息后,会向客户端返回一个ServerHello消息,有些服务端的实现是每条单

独发送,有些服务端的实现是合并到一起发送,包含以下部分:

  1. ServerCertificate:服务器证书
  2. ServerKeyExchange:可选,如RSA公钥或或者Diffie-Hellman参数
  3. CertificateRequest:对于重要的保密数据,服务器要求客户端发送证书以进行验证
  4. ServerHelloDone
  5. 使用的协议版本号:如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
  6. 服务器随机数:和客户端的随机数一起生成会话密钥(Master Secret)
  7. 使用的Cipher Suite和压缩方式
  8. 当前时间戳和会话ID

客户端回应(Certificate Verify)

  1. CertificateVerify:检查服务器证书
  2. ClientCertificate:如果客户端需要验证就发送自己的证书
  3. ClientKeyExchange:发送RSA预主密钥(PreMaster Secret/Key)或者Diffie-Hellman参数,用于安全地协商出会话密钥
  4. ChangeCipherSpec:是一个独立的协议,用数据包中的一个字节告知服务器端已经切换到协商好的Cipher Suite
  5. Finished:客户端握手协议结束

服务器的最后回应(Server Finish)

  1. ChangeCipherSpec:告知客户端已经切换到协商好的Cipher Suite
  2. Finished:生成会话密钥,加密Finish消息发送给客户端,以验证加解密通道建立成功

交换数据

双方使用相同的会话密钥,对数据进行对称加密,交换数据,完成通信

TLS应用——HTTPS

CA证书

Certificate Authority,是负责管理和签发证书的第三方机构,浏览器不可能认识所有的网站,但可以认识几个CA机构,如果要访问的网站有CA证书,那么就能证明这个网站是安全的网站

服务方 S 向第三方机构CA提交申请,如申请通过,CA会向申请者颁发证书,证书包括:

申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名

使用散列函数计算公开的明文信息的信息摘要,然后,采用CA的私钥对信息摘要进行加密,密文即签名;

客户端使用CA公钥解密,如果信息摘要没有发送变化,则证书未被修改,证明可信

HTTPS过程

1
HTTPS = HTTP + TLS
image-20231125150953900

后续的问题

  • https的缺点
    • https保证了通信的安全,但带来了加密解密消耗计算机cpu资源的问题 ,不过,有专门的https加解密硬件服务器
  • 各大互联网公司,百度、淘宝、支付宝、知乎都使用https协议,为什么?
    • 支付宝涉及到金融,所以出于安全考虑采用https这个,可以理解,为什么百度、知乎等也采用这种方式?为了防止运营商劫持!http通信时,运营商在数据中插入各种广告,用户看到后,怒火发到互联网公司,其实这些坏事都是运营商(移动、联通、电信)干的,用了https,运营商就没法插播广告篡改数据了

本着互联网开源的性质,欢迎分享这篇文章,以帮助到更多的人,谢谢!