Https连接过程详解
Posted microhex
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Https连接过程详解相关的知识,希望对你有一定的参考价值。
概述
HTTPS相比较于HTTP而言,就是多了一个S,这个S我们可以称之为安全,说得通俗一点就是加密通信的HTTP而已。说的简单一点,就是每次通信,通信双方都会使用加密之后的数据通信。
连接
HTTPS连接大致可以分为5个步骤,我也是经过学习和看不同的资料才稍微有些感触,如果有不对的地方,请轻喷。
大致可以分为7个部分:
- Client Hello
- Server Hello
- 服务器发送证书
- 客户端验证证书
- 客户端生成随机数,通过证书中的公钥进行非对称加密,发送到服务器
- 服务器使用私钥解密,获取到该随机数,将该随机数设置为密钥,使用对称加密加密需要发送的数据
- 客户端解密数据,SSL通信开始
虽然一个HTTPS通信看上去很简单,其实内部还是非常复杂的,用到了证书验证,一次非对称加密,n次对称加密,单单捋起来还是比较复杂的。
client hello
客户端此时向服务器发送的报文此时包括:
- 当前支持的TLS版本集合
- 当前支持的非对称加密算法集合
- 当前支持的对称加密算法集合
- 当前支持的Hash算法集合
- 其他信息
server hello
此时,服务器需要选择自己支持的算法,然后发送给客户端,告诉客户端哪些算法是自己支持的。然后给客户端来一份自己的想法:
- 当前支持的TLS版本
- 当前支持的非对称加密算法
- 当前支持的对称加密算法
- 当前支持的Hash算法
- 其他信息
服务器发送证书
server hello完成之后,服务器又一次向客户端发送了证书和密钥,这个证书主要是为保证服务器和客户端之间通信是可靠的,证书中有很多东西需要验证。而密钥就是为了提供了验证的可能。为了方便下面的了解,我们需要对证书的结构有一定的了解。
就X509v3证书为例,主要结构为:
组成部分 | 含义 |
---|---|
tbsCertificate(to be signed certificate) | 待签名证书 |
SignatureAlgorithm | 签名算法 |
Signaturevalue | 签名值 |
而我们的tbsCertificate其实又包含了以下10个方面的东西:
组成部分 | 含义 |
---|---|
Version Number | 版本号 |
Serial Number | 序列号 |
Signature Algorithm ID | 算法签名ID |
Issuer Name | 发行者 |
Validity period | 有效时间 |
Subject name | 证书主体名称 |
Subject Public key Info | 证书主体公钥信息 (公钥算法和公钥值) |
Issuer Unique Identifier | 发行商唯一ID |
Subject Unique Identifier | 主体唯一ID |
Extensions | 其它扩展 |
客户端验证证书
这个证书验证还是蛮复杂的,因为涉及到很多概念,比如根证书、二级证书(CA)、 证书链等过程,我也曾经尝试去了解了一下,无奈比较复杂,只是了解了个大概。今天就聊一下这个大概。
客户端拿到这个证书之后,将会从tbsCertificate
中获取证书的颁发机构,从而在浏览器内置的根证书中寻找该证书颁发机构是否为信任机构,如果不是,浏览器将会警告用户证书存在问题,一般会出现如下问题:
如果获取的证书颁发机构是合法的,则会从浏览器中找到对应信任机构的公钥,用这个公钥来解密当前证书的签名得到一个Hash值Hash1。上面证书结构中所说的,存在一个签名算法和签名值,这个值是服务器获取的证书(也就是信任机构所颁发的)使用私钥加密而成的,所以使用对应证书的公钥是可以解密的(如果没有错误),具体原因可以查看。然后我们对证书的内容进行一次Hash值,得到Hash2,如果当前的Hash1与Hash2值相等,那么说明证书是合法的,没有被修改过,用户可信任。
在接下来需要对证书的持有者对应的信息进行检查,比如URL是否为需要请求的URL;判断各种请求参数等等…稍微有点不符合,我们就判断当前数据存在问题,直接告警。
客户端产生随机数
如果上面的证书验证通过,此时客户端将会生成一个随机数,通过已经确定的非对称加密算法,使用公钥将这个随机数加密,然后发送到服务器。
服务端解密
服务器接收到数据,将会使用私钥解密发送过来的随机数
,将会使用这个随机数设置为密钥,使用已经选择的对称加密算法,加密数据,然后将数据发送出去,从此服务端SSL通信正式开始。
客户端解密
接受到服务器的数据,使用对称算法,上面生成的随机数作为密钥,开始解密。从此,一次完整的HTTPS通信过程完成。
最后一张图:
最后,还是对证书的合法性验证存在比较模糊的认识,希望有更好的文章出现。
参考资料:
1.https://blog.csdn.net/liuxingrong666/article/details/83869161
2.https://blog.csdn.net/anjon520/article/details/24884207
3.https://www.cnblogs.com/felixzh/p/8316710.html
4.https://blog.csdn.net/u012852986/article/details/78873387
以上是关于Https连接过程详解的主要内容,如果未能解决你的问题,请参考以下文章