ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HTTPS握手过程

2022-05-26 16:03:32  阅读:186  来源: 互联网

标签:TLS HTTP 服务器端 握手 密钥 HTTPS 过程 客户端


HTTPS 即 HTTP over TLS,是一种在加密信道进行 HTTP 内容传输的协议。

TLS 的早期版本叫做 SSL。SSL 的 1.0, 2.0, 3.0 版本均已经被废弃,出于安全问题考虑广大浏览器也不再对老旧的 SSL 版本进行支持了,因此这里我们就统一使用 TLS 名称了。

所以,我们探讨HTTPS的握手过程,其实就是 SSL/TLS的握手过程。
TLS旨在为Internet 提供通信安全的加密协议。TLS握手是启动和使用TLS加密的通信会话的过程。在TLS握手期间,Internet中的通信双方会彼此交换信息,验证密码套件,交换会话密钥。
每当用户通过HTTPS 导航到具体的网站并发送请求时,就会进行TLS握手。除此之外,每当其他任何通信使用HTTPS(包括API调用和在 HTTPS上查询DNS)时,也会发生TLS握手。

TLS通信流程分为HTTP握手阶段和TLS握手阶段

TLS 的基本过程如下:

  • 在进行通信前,首先会进行HTTP的三次握手,握手完成后,再进行TLS的握手过程

  • 客户端发送一个 ClientHello 消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,客户端支持的密码套件以及一串客户端随机数。

  • 服务器端向客户端返回:

    • ServerHello ,消息中包含了服务器端的 TLS 版本,服务器所选择的支持的密码套件,服务端生成的随机数;
    • server_certificates,消息包含了服务器端配置的证书链,用于身份验证与密钥交换。
    • server_hello_done,通知客户端 server_hello 信息发送结束。
  • 客户端根据自己的信任 CA 列表,校验证书的合法性。

    • 合法性验证包括如下:

      (1) 证书链的可信性 trusted certificate path。

      (2) 证书是否吊销 revocation,有两类方式离线 CRL 与在线 OCSP,不同的客户端行为会不同。

      (3) 有效期 expiry date,证书是否在有效时间范围。

      (4) 域名 domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析。

    基于公钥证书交换公钥的分配过程
  • 客户端向服务器端发送:

    • client_key_exchange,合法性验证通过之后,客户端计算产生随机数字,并用证书公钥加密,发送给服务器。
    • 客户端根据自己的随机数和服务器端发送来的随机数生成对称密钥。
    • 客户端将之前所有通信参数的 hash 值用公钥加密后发送给服务器端。
    • change_cipher_spec,客户端通知服务器使用私钥解密消息
  • 服务器端向客户端返回:

    • 服务器端使用自己的私钥解密消息得到客户端产生的随机数,然后使用这串随机数生成对称密钥
    • 服务器端计算之前所有接收信息的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应,验证数据和密钥正确性。
    • change_cipher_spec,验证通过后,服务器端通知客户端使用协商好的对称密钥加密消息。
  • 从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容

从上面的过程可以看到,TLS 的完整过程需要三个算法(协议),密钥交互算法,对称加密算法,和消息认证算法(TLS 的传输会使用 MAC(message authentication code) 进行完整性检查)

相关算法图解:

使用公钥密码建立对称密钥(无第三方)
MAC鉴别原理

参考文章:

(1条消息) TLS/SSL 工作原理及握手过程详解_Tyler_Zx的博客-CSDN博客_tls原理图解

HTTP over SSL/TLS · 笔试面试知识整理 (hit-alibaba.github.io)

(图解HTTP)

标签:TLS,HTTP,服务器端,握手,密钥,HTTPS,过程,客户端
来源: https://www.cnblogs.com/melons99/p/16313753.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有