Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第 44 题:介绍 HTTPS 握手过程 #70

Open
zeroone001 opened this issue Mar 29, 2019 · 8 comments
Open

第 44 题:介绍 HTTPS 握手过程 #70

zeroone001 opened this issue Mar 29, 2019 · 8 comments
Labels

Comments

@zeroone001
Copy link

  1. clientHello
  2. SeverHello
  3. 客户端回应
  4. 服务器的最后回应
    具体可以看这篇文章
@blogwy
Copy link

blogwy commented Mar 29, 2019

小程序官方社区的这篇文章也不错,有许多图便于理解。
https://developers.weixin.qq.com/community/develop/article/doc/000046a5fdc7802a15f7508b556413

@JedenZhan
Copy link

  1. 客户端使用https的url访问web服务器,要求与服务器建立ssl连接
  2. web服务器收到客户端请求后, 会将网站的证书(包含公钥)传送一份给客户端
  3. 客户端收到网站证书后会检查证书的颁发机构以及过期时间, 如果没有问题就随机产生一个秘钥
  4. 客户端利用公钥将会话秘钥加密, 并传送给服务端, 服务端利用自己的私钥解密出会话秘钥
  5. 之后服务器与客户端使用秘钥加密传输

@cleverboy32
Copy link

@liuhanqu
Copy link

liuhanqu commented Aug 2, 2019

参考: HTTPS原理及握手过程

@Rebornnn
Copy link

Rebornnn commented Jan 4, 2020

  1. 客户端发出请求(ClientHello): 客户端向服务端发起加密通信的请求
  2. 服务器回应(SeverHello): 服务器收到客户端请求后,确认加密通信协议版本是否一致,如果版本一致则返回服务器证书,否则关闭加密通信
  3. 客户端回应:客户端收到服务器回应后,客户端首先验证证书是否有效。如果证书失效,则会给访问者一个警示,由其决定是否继续连接。如果证书没失效,则使用证书中的公钥加密一个随机数(pre-master key)返回给服务器,同时返回客户端握手结束通知。
  4. 服务器的最后回应:服务器收到客户端发来的pre-master key后,计算生成本次会话的“会话密钥”,向客户端发送服务器握手结束通知。

至此, 整个握手阶段结束。接下来,客户端与服务器进入加密通信。

@zhuxinyu-znb
Copy link

  1. 浏览器 发送随机数 random1 + 支持的加密算法列表 到服务器
  2. 服务器 发送随机数 random2 + 选择的加密算法 + 数字证书(公钥在证书里) + 确认信息
  3. 浏览器 验证证书有效性
  4. 浏览器 生成一个随机数 pre-master,采用非对称加密通过服务器的公钥加密发送给服务器,同时根据加密算法将 random1 + random2 + pre-master 生成 master-secret 用于后续数据传输
  5. 服务器 用私钥解密得到 pre-master,根据算法将 random1 + random2 + pre-master 生成 master-secret用于数据传输
  6. 对称加密,浏览器和服务器之间使用 master-secret 加密的数据进行通信

@shifengdiy
Copy link

HTTPS握手和数据传输过程

  1. 客户端发起一个加密网络(https)请求
  2. 服务端收到请求后使用CA证书产生公钥私钥密钥对,将包含公钥的证书发送给客户端
  3. 客户端开始验证证书的合法性,证书包含了发放日期、到期时间、颁发机构等信息,利用证书上的数字水印验证是否合法,如果不合法,会提出警告信息,如果证书合法,说明是可信赖的机构生产的
  4. 客户端产生一个随机key,使用公钥将其加密,发送给服务器,服务器使用私钥将其解密,存在服务端,此时客户端和服务器都拥有了一个没有被劫持的安全key
  5. 此后客户端和服务器的数据传输都使用此key加密,接收到数据之后使用本地存放在key解密(对称加密解密过程)

HTTPS和TCP之间会有一个SSL层,以上所有过程都在SSL层中完成,比正常的http传输多了SSL握手过程和加密解密过程,会有一定的性能损耗

ScreenClip

@kingda
Copy link

kingda commented Jun 14, 2022

有非常可爱的描述
https://howhttps.works/the-handshake/
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

10 participants