[转]HTTPS请求流程(证书的签名及验证过程)
问题描述
今天在思考为应用服务上传TLS/SSL证书时候,了解到证书文件由两种. cer和pfx, cer只是包含公钥的证书,可以发布给公众查看。而pfx是包含私钥的证书,对公众不透明。 如果需要生成pfx证书,则必须在生成/申请cer的同一台机器上安装cer证书后,通过导出的方式导出为pfx证书。然后可以把pfx证书复制到其他机器中使用。
基于以上的情况,产生了一个疑问: 在Azure App Service为自定义域名购买的证书为pfx证书。那通过https访问的时候,客户端浏览器是如何拿到私钥的呢? 在查寻了HTTPS的请求流程 -- 证书的签名和验证过程后,明白了
关键点:浏览器会通过上传的pfx证书中的公钥加密一个随机生成的密钥,而后早服务器端通过pfx中的私钥来解密客户端的密钥。
HTTPS请求流程 (证书的签名及验证过程)
首先我们先思考下面几个问题:
- 客户端如何进行签名的?
- 签名的验证是在哪,服务端?客户端?
- 如何验证签名?
首先我们说下使用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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!