当前位置:首页 > IT技术 > Web编程 > 正文

https连接过程
2021-10-20 10:41:23

什么是https?

https就是在http的基础上加了一个TLS层 ,http把数据发给tls,tls经过加密后再下发给tcp。

接收端tcp先把消息tls, tls解密后再返回给http

tls是怎么加密的?

在双方建立连接的过程中, 客户端与服务器先用非对称加密的方式协商出一套密钥, 然后使用这个密钥以对称加密的方式加密通信

什么是对称加密? 

对称加密就是通信双方使用同一个密钥,不同的算法进行加密、解密

 

 经典算法: DES(56 位密钥,密钥太短⽽逐渐被弃⽤)、AES(128 位、192 位、256 位密钥, 现在最流⾏)

对称加密的致命缺点就是: 通信双方必须事先知道这个密钥,但现实网络中危险无处不在, 如何安全地传输密钥呢

 

非对称加密

非对称加密就是通信双方使用同一套算法, 用公钥来加密得到密文, 用私钥解密得到原数据

 

 在这种模型中, 客户端和服务器都有一套自己的公钥/私钥, 通信开始时, 双方交换公钥, 

客户端给服务器发数据时用服务器的公钥进行加密, 服务器收到后用自己的私钥解密

同理, 服务器给客户端发数据时, 用客户端的公钥加密, 客户端收到后再用自己的私钥解密。

因为公钥加密后的数据,只有自己的那把私钥才能解开。 换言之, 客户端用服务器公钥加密后的数据, 客户端自己都无法解开,自然也就防止了数据泄露。

可是网络中坏人无处不在, 我们知道通信开始时,客户端和服务器会交换公钥, 如果这个时候公钥被人窃取, 那么他虽然不能用公钥解密通信双方发出去的数据, 但是却可以伪造数据,伪装成客户端、服务器

为了防止这种攻击, 数字签名诞生了 

 

 

现在,通信双方发送数据时, 先对原数据进行一次hash算法, 然后对hash值签名(用自己的私钥加密),将签名附加到原数据后面一起发送给对方。  对方收到数据后, 用公钥解密得到hash值, 然后对收到的数据以相同的方式进行hash算法, 如果得到的hash值相同,就说明信息没有被篡改。

这里涉及到几个知识点:

1, 非对称加密中, 同一对密钥, 公钥加密的数据私钥可以解密, 私钥加密的数据公钥也可以解密

2, 为什么不直接对原数据用私钥加密后传输呢? 因为直接这样操作的话会让签名比原数据还要大, 浪费系统资源

3, hash: 目前常用的hash算法有MD5, SHA1, SHA256等, hash不是加密, hash算法是不可逆的

 

现在再回到Https的问题, 

既然非对称加密+数字签名已经解决了通信安全的问题, 为什么Https还要用对称加密来进行通信呢?

因为非对称加密算法复杂, 如果通信过程中全程使用非对称加密, 将会非常影响网络性能

 

https建立通信的一般过程:

 

 

1, 客户端 发送client hello,   header中会包含 可供服务端选择的TLS版本, 可供服务端选择的加密套件, 以及一个客户端随机数

2, 服务器端收到后, 发送server hello,  header中包含服务器端选择的tls版本,加密套件,以及一个服务器随机数

3, 服务器端发送服务器证书给客户端, 一并发送的有: 服务器公钥,服务器主机名, 证书的签名,证书签发机构的公钥/签名等。

4, 客户端收到公钥后, 对公钥进行验证(一方面是合法性验证, 就是看你这个证书是不是合法机构颁发的, 另一方面是看这个服务器主机名是不是自己想要通信的主机名)

验证通过后, 客户端生成另一个随机数Pre-master secret, 用服务器公钥加密后发给服务器

 接下来客户端和服务器就可以根据 客户端随机数+服务器随机数+Pre-master secret 来生成master secret 

 (为什么需要这个Pre-master secret呢? 因为之前的客户端随机数和服务器随机数不是加密传输的, 可能被窃取)

这个master secret包含客户端加密密钥, 服务端加密密钥, 客户端MAC secret, 服务器端MAC secret

(我们之前说对称加密中, 双方使用的是同一个密钥, 那为什么这里要用两个密钥呢?  是为了防止一种攻击, 比如其他人拿到消息之后,把消息给你扔回来, 这时候如果用的是同一个密钥, 你可能就会以为这是服务器发回来的消息)

MAC secret   带密码的hash算法, 用来验证身份, 而且它不能被公众验证身份。

 

5, 客户端通知服务器, 自己将使用加密通信

6, finish (把1-5的信息加在一起发出去, ,不包含密钥)

 

 (4,5,6步在这里是一条请求)

7, 服务器端将使用加密通信

8, 服务器finish(1-7的信息加在一起发出去,不包含密钥)

 

本文摘自 :https://www.cnblogs.com/

开通会员,享受整站包年服务立即开通 >