HTTPS的验证过程

第一步

浏览器给出TLS协议版本号、一个客户端生成的随机数 1(Client random),以及客户端支持的加密方法。(明文通信)


第二步

服务器确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数2(Server random)。(明文通信)

第三步

浏览器确认数字证书有效,然后生成一个新的随机数3(Pre-master secret),并使用数字证书中的公钥加密这个随机数,发给服务器。(使用非对称加密算法)

浏览器确认数字证书有效:浏览器和操作系统内部内置了很多CA机构的证书,是否篡改、是否在有效期内、域名和访问的网站是否匹配。

第四步

服务端使用自己的私钥,获取客户端发来的随机数(即Pre-master secret)。双方就都有三个一模一样的随机数,前两个是明文发送的,最后客户端生成的这个是使用证书中的公钥密文发送的。

第五步

客户端和服务器根据约定的加密方法,使用前面的三个随机数经过特定的算法,生成"对话密钥"(sesionkey),用来加密接下来的整个对话过程

对话密钥,又叫做会话密钥,其实就是将之前通讯中的三个随机数生成一个密钥(对称加密)

三个随机数----->第三个是使用非对称加密---->相同的算法---->会话密钥

第六步

客户端和服务器都会第一次使用会话密钥加密一个消息发送给对方。

https://mermaid.ai/

bash 复制代码
sequenceDiagram
    participant 客户端 as 浏览器
    participant 服务器

    客户端->>服务器: ClientHello<br/>(TLS版本, 支持的加密方法, 随机数1:Client Random)

    服务器-->>客户端: ServerHello<br/>(确认双方使用的加密方法, 随机数2:Server Random, 证书)

    客户端-->>客户端: 验证数字证书有效性

    客户端->>服务器: 使用证书中公钥加密随机数3:Pre-master secret

    服务器-->>服务器: 用私钥解密Pre-master secret
    Note over 客户端,服务器: 此时双方都可获得三份随机数<br/>(Client Random, Server Random, Pre-master secret)

    客户端-->>客户端: 生成会话密钥(session key)
    
    服务器-->>服务器: 生成会话密钥(session key)
    Note over 客户端,服务器: 使用相同算法生成对称会话密钥

    客户端->>服务器: 用会话密钥加密的消息(Finished)
    服务器->>客户端: 用会话密钥加密的消息(Finished)
    Note over 客户端,服务器: 开始后续所有加密通讯
相关推荐
网络小江10 小时前
上网第三十九课:TCP 的可靠性——滑动窗口、重传与拥塞控制
网络协议
91刘仁德12 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
Lsetea12 小时前
Nginx加载证书时报SSL_CTX_use_PrivateKey_file失败:私钥配对与权限排查
nginx·https·ssl证书·私钥·证书部署
可乐鸡翅yeah_13 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
pt104316 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
熊文豪21 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
网络·网络协议·ssl
网络小江21 小时前
上网第三十八课:TCP 三次握手与四次挥手——连接到底是怎么“谈“成的
网络协议
AIgorithmGEEK1 天前
[Linux]HTTP 应用层协议全解(下篇)
linux·网络·网络协议·http·cookie·无连接·无状态
DP DPharness1 天前
手机连不上 DSH 时的排错顺序:从 401 到 WebSocket 放行
websocket·网络协议·智能手机