爱收集资源网

客户端验证服务端发来的证书及验证证书验证证书

网络整理 2022-05-07 20:01

当用户点击浏览器地址栏(以下简称客户端)时(这是我的个人博客,前段时间被攻击本地连接收不到数据包,最后直接重置服务器(别问我为什么没有备份,我也是不知道为什么),我还没来得及重建,你可以期待一下,然后你会找到时间回去~),浏览器转到DNS服务器获取到这个url对应的ip本地连接收不到数据包,然后客户端连接到服务器的443端口,向服务器发送这个请求,同时客户端会把它支持的加密算法带到服务器;

二、服务器发送证书

在说这一段之前,插入一个小知识点:用私钥加密的密文只能用公钥解密;用公钥加密的密文只能用私钥解密。

服务器收到加密算法后,会与自己支持的加密算法进行比较(即与自己的私钥进行比较)。如果不匹配,则会断开连接;如果匹配,则服务器向客户端发送SSL证书,其中包括数字证书的内容:1、Certificate Authority;2、Using Authority;3、Public Key;4、有效期;5、签名算法;6、指纹算法;7、指纹。

服务器发送的东西用私钥加密,公钥可以解锁。不保证发送的数据包不会被别人看到,所以后续流程会和客户端商量 选择对称加密(只能用私钥解锁,详情请看非对称和对称加密和解密相关问题)来加密传输的数据。

三、客户端验证服务器发送的证书

1、验证证书

客户端验证收到的证书,包括发证机构是否合法、过期、证书中包含的URL是否与当前访问URL一致等

2、生成一个随机数(这个随机数是后面用到的对称加密的私钥)

客户端验证证书正确(或接受不可信证书)后,会生成一个随机数,并使用服务器发送的公钥进行加密。这样,只有服务器的私钥才能解锁随机数。

3、生成握手信息

使用证书中的签名哈希算法得到握手信息的哈希值,然后用生成的随机数组合【握手信息和握手信息】。 hash value] 进行加密,然后用公钥加密随机数,并一起发送到服务器。计算握手信息的hash值的目的是为了保证发回服务器的握手信息没有被篡改。

四、服务器接收到随机数加密信息,对随机数进行解密,验证握手信息是否被篡改。

服务器收到客户端发回的用随机数加密的信息后,先用私钥解密随机数,再用解密后的随机数解密握手信息,得到握手信息和握手信息。哈希值,计算自己发送的握手信息的哈希值,与客户端返回的进行比较。

如果验证无误,握手信息和握手信息的哈希值也用随机字符串加密后发送回客户端。

五、客户端验证服务器发回的数据握手信息,完成握手

客户端收到服务器发送的握手信息后,用自己生成的随机数解密,并验证随机数加密后的握手信息和握手信息的哈希值。

验证无误后,握手过程完成。从此,服务器和客户端开始使用那串随机数进行对称加密通信(常用的对称加密算法是AES)。

关于nginx正向代理https,可以阅读这里:NGINX正向代理HTTPS

具体的连接过程我又做了一张图,如下,见官方大师,你小心,你小心~

本人知之甚少,本文如有错误请指正,谢谢~

p>

随机数