第 44 题:介绍 HTTPS 握手过程
zeroone001 opened this issue · 8 comments
zeroone001 commented
- clientHello
- SeverHello
- 客户端回应
- 服务器的最后回应
具体可以看这篇文章
blogwy commented
小程序官方社区的这篇文章也不错,有许多图便于理解。
https://developers.weixin.qq.com/community/develop/article/doc/000046a5fdc7802a15f7508b556413
JedenZhan commented
- 客户端使用https的url访问web服务器,要求与服务器建立ssl连接
- web服务器收到客户端请求后, 会将网站的证书(包含公钥)传送一份给客户端
- 客户端收到网站证书后会检查证书的颁发机构以及过期时间, 如果没有问题就随机产生一个秘钥
- 客户端利用公钥将会话秘钥加密, 并传送给服务端, 服务端利用自己的私钥解密出会话秘钥
- 之后服务器与客户端使用秘钥加密传输
cleverboy32 commented
liuhanqu commented
参考: HTTPS原理及握手过程
Rebornnn commented
- 客户端发出请求(ClientHello): 客户端向服务端发起加密通信的请求
- 服务器回应(SeverHello): 服务器收到客户端请求后,确认加密通信协议版本是否一致,如果版本一致则返回服务器证书,否则关闭加密通信
- 客户端回应:客户端收到服务器回应后,客户端首先验证证书是否有效。如果证书失效,则会给访问者一个警示,由其决定是否继续连接。如果证书没失效,则使用证书中的公钥加密一个随机数(pre-master key)返回给服务器,同时返回客户端握手结束通知。
- 服务器的最后回应:服务器收到客户端发来的pre-master key后,计算生成本次会话的“会话密钥”,向客户端发送服务器握手结束通知。
至此, 整个握手阶段结束。接下来,客户端与服务器进入加密通信。
zhuxinyu-znb commented
- 浏览器 发送随机数 random1 + 支持的加密算法列表 到服务器
- 服务器 发送随机数 random2 + 选择的加密算法 + 数字证书(公钥在证书里) + 确认信息
- 浏览器 验证证书有效性
- 浏览器 生成一个随机数 pre-master,采用非对称加密通过服务器的公钥加密发送给服务器,同时根据加密算法将 random1 + random2 + pre-master 生成 master-secret 用于后续数据传输
- 服务器 用私钥解密得到 pre-master,根据算法将 random1 + random2 + pre-master 生成 master-secret用于数据传输
- 对称加密,浏览器和服务器之间使用 master-secret 加密的数据进行通信
shifengdiy commented
HTTPS握手和数据传输过程
- 客户端发起一个加密网络(https)请求
- 服务端收到请求后使用CA证书产生公钥私钥密钥对,将包含公钥的证书发送给客户端
- 客户端开始验证证书的合法性,证书包含了发放日期、到期时间、颁发机构等信息,利用证书上的数字水印验证是否合法,如果不合法,会提出警告信息,如果证书合法,说明是可信赖的机构生产的
- 客户端产生一个随机key,使用公钥将其加密,发送给服务器,服务器使用私钥将其解密,存在服务端,此时客户端和服务器都拥有了一个没有被劫持的安全key
- 此后客户端和服务器的数据传输都使用此key加密,接收到数据之后使用本地存放在key解密(对称加密解密过程)
HTTPS和TCP之间会有一个SSL层,以上所有过程都在SSL层中完成,比正常的http传输多了SSL握手过程和加密解密过程,会有一定的性能损耗
kingda commented