[转]HTTPS请求流程(证书的签名及验证过程)

问题描述

今天在思考为应用服务上传TLS/SSL证书时候,了解到证书文件由两种. cer和pfx, cer只是包含公钥的证书,可以发布给公众查看。而pfx是包含私钥的证书,对公众不透明。 如果需要生成pfx证书,则必须在生成/申请cer的同一台机器上安装cer证书后,通过导出的方式导出为pfx证书。然后可以把pfx证书复制到其他机器中使用。 

基于以上的情况,产生了一个疑问: 在Azure App Service为自定义域名购买的证书为pfx证书。那通过https访问的时候,客户端浏览器是如何拿到私钥的呢? 在查寻了HTTPS的请求流程 -- 证书的签名和验证过程后,明白了

关键点:浏览器会通过上传的pfx证书中的公钥加密一个随机生成的密钥,而后早服务器端通过pfx中的私钥来解密客户端的密钥。

 

HTTPS请求流程 (证书的签名及验证过程)

首先我们先思考下面几个问题:

  1. 客户端如何进行签名的?
  2. 签名的验证是在哪,服务端?客户端?
  3. 如何验证签名?

首先我们说下使用HTTPS的作用,主要有三个:

  • 验证服务器或客户端的身份合法
  • 报文加密
  • 验证数据完整性


采用HTTPS可以有效抵御中间人攻击、报文监听攻击和报文篡改攻击。不过,针对报文监听这种攻击的抵御不是绝对的,HTTPS是基于TLS的HTTP,可以将HTTP请求的URL path、request header、request body等内容加密,由于转发需要提供IP及端口信息,所以监听者还是能够监听到目的IP(甚至域名)、目的端口、源IP、源端口、报文大小、通信时间等信息的。

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

 

HTTPS在传输的过程中会涉及到三个密钥:

1、服务器端的公钥和私钥,用来进行非对称加密

2、客户端生成的随机密钥,用来进行对称加密

 

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为7步。

1、客户端向服务器发起HTTPS请求,携带客户端SSL/TLS信息,服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,将公钥下发到客户端。

 

2、客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。公钥的验证:在设备中存储了全球公认的知名CA的公钥。当客户端接收到服务器的数字证书的时候,会通过系统中内置的CA公钥进行解密,如果解密成功说明公钥是有效的,否则就是不受信任的证书。

 

3、如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

 

4、客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

 

5、服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

 

6、然后服务器将加密后的密文发送给客户端。

 

7、客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

 

原文地址:

HTTPS请求流程(证书的签名及验证过程): https://blog.csdn.net/gsn1125227/article/details/98594039

posted @ 2020-12-10 15:18  路边两盏灯  阅读(1110)  评论(0编辑  收藏  举报