【web】https的连接细节

HTTPS是什么

(1)经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密

(2)目的是提供对网络服务器的身份认证,保护交换数据的隐私与完整性

(3)减少了被恶意劫持的可能

(4)很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装)

HTTPS的七步走

(1)客户端发送报文

(2)服务器接收后再发送报文

(3)服务器发送证书

(4)客户端验证证书

(5)客户端生成随机数,通过证书中的公钥进行非对称加密,发送到服务器

(6)服务器使用私钥解密,获取到该随机数,将该随机数设置为密钥,使用对称加密加密需要发送的数据

(7)客户端解密数据,SSL通信开始

步骤详解

1.客户端向服务器发送报文

当前支持的TLS版本集合     (TLS:安全传输层协议)

当前支持的非对称加密算法集合

当前支持的对称加密算法集合

当前支持的Hash算法集合

其他信息

2.服务器接收后再发送报文

此时,服务器需要选择自己支持的算法,然后发送给客户端,告诉客户端哪些算法是自己支持的。然后给客户端来一份自己的想法:

当前支持的TLS版本

当前支持的非对称加密算法

当前支持的对称加密算法

当前支持的Hash算法

其他信息

3.服务端发送证书

服务器随后向客户端发送了证书和密钥,这个证书主要是为保证服务器和客户端之间通信是可靠的,证书中有很多东西需要验证。而密钥就是为了提供了验证的可能。为了方便下面的了解,我们需要对证书的结构有一定的了解。

组成部分与含义

tbsCertificate(to be signed certificate):待签名证书

SignatureAlgorithm:签名算法

Signaturevalue:签名值

4.客户端验证证书

这个证书验证还是蛮复杂的,因为涉及到很多概念,比如根证书、二级证书(CA)、 证书链等过程。

客户端拿到这个证书之后,将会从tbsCertificate中获取证书的颁发机构,从而在浏览器内置的根证书中寻找该证书颁发机构是否为信任机构,如果不是,浏览器将会警告用户证书存在问题,一般会出现如下问题:

浏览器的提醒

如果获取的证书颁发机构是合法的,则会从浏览器中找到对应信任机构的公钥,用这个公钥来解密当前证书的签名得到一个Hash值Hash1。上面证书结构中所说的,存在一个签名算法和签名值,这个值是服务器获取的证书(也就是信任机构所颁发的)使用私钥加密而成的,所以使用对应证书的公钥是可以解密的(如果没有错误)。然后我们对证书的内容进行一次Hash值,得到Hash2,如果当前的Hash1与Hash2值相等,那么说明证书是合法的,没有被修改过,用户可信任。

在接下来需要对证书的持有者对应的信息进行检查,比如URL是否为需要请求的URL;判断各种请求参数等等…稍微有点不符合,我们就判断当前数据存在问题,直接告警。

4.客户端产生随机数

如果上面的证书验证通过,此时客户端将会生成一个随机数,通过已经确定的非对称加密算法,使用公钥将这个随机数加密,然后发送到服务器。

5.服务端解密

服务器接收到数据,将会使用私钥解密发送过来的随机数,将会使用这个随机数设置为密钥,使用已经选择的对称加密算法,加密数据,然后将数据发送出去,从此服务端SSL通信正式开始。

6.客户端解密

接受到服务器的数据,使用对称算法,上面生成的随机数作为密钥,开始解密。从此,一次完整的HTTPS通信过程完成。

最后一张图:

图解


原文链接:https://blog.csdn.net/u013762572/article/details/88873014

你可能感兴趣的:(【web】https的连接细节)