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 客户端,服务器: 开始后续所有加密通讯
相关推荐
曹牧18 小时前
HTTP 401
网络·网络协议·http
2501_9159090619 小时前
iOS 抓包不越狱,代理抓包 和 数据线直连抓包两种实现方式
android·ios·小程序·https·uni-app·iphone·webview
ADRU19 小时前
SSE 到底是什么?它和 HTTP 有什么关系?Java/Spring 怎么实现流式输出(可直接上手)
java·spring·http
半路_出家ren19 小时前
Nginx基础学习
运维·网络·网络协议·学习·nginx·网络安全
C++chaofan20 小时前
RPC框架SPI机制深度解析
java·网络·后端·网络协议·rpc·spi·序列化器
ZC19959220 小时前
Nginx更换ssl证书不生效
nginx·https·ssl
.select.20 小时前
HTTP2
网络协议·http2
F1FJJ20 小时前
Shield CLI v0.3.3 新增 PostgreSQL 插件:浏览器里管理 PG 数据库
网络·网络协议·docker·postgresql·容器·go
.select.20 小时前
HTTPS ECDHE 握手解析
网络协议·http·https
北京耐用通信20 小时前
工业现场通信互通 耐达讯自动化CC-Link IE转Modbus RTU网关
人工智能·物联网·网络协议·自动化·信息与通信