HTTPS原理篇

HTTPS原理篇

Created
Jul 23, 2021 09:04 AM
Tags
Web

0x01 https与http

两者都是用在Web浏览器和网站服务器之间传递信息。Http默认使用80端口,采用明文传输,访问速度比Https快,安全性较低。Https默认使用443端口,采用加密的方式传输,安全性较高。

0x02 https工作原理

notion image
Https采用对称加密和非对称加密相结合的方式,通信流程如下:
  1. 客户端向服务端索要证书,服务端将证书发送给客户端
  1. 客户端验证服务端的证书,若不正确则返回”https warning“。若正确则客户端会生成一个随机的key值,用证书中的公钥进行加密,加密后传送到服务端
  1. 服务端用私钥解密出key值,之后用key值使用对称加密进行数据传送
 

0x03 为什么Https比Http要慢呢?

http的建立是客户端与服务端进行tcp三次握手就可以了。https除了tcp三次握手之外,还有SSL握手的九个数据包,一共是12个数据包,所以速度相对于http是比较慢的。
 

0x03 为什么对称加密不适合在Https传输呢?

如果采用对称加密,则key值客户端和服务端都必须要有,且可解密数据。虽然是加密传输,但是key值是公开的,加入黑客知道了key则此加密传输就和明文传输没什么两样了。
 

0x04 为什么非对称加密也不适合在Https传输呢?

如果采用非对称加密,服务端有公钥和私钥,客户端只有公钥。公钥谁都可以去服务端去获取这样的话,如果黑客拿到公钥的话,也是可以解密出服务端发出的流量的。非对称加密客户端的流量是安全的,服务端的流量是不安全的。
 

0x05 对称加密和非对称加密能结合吗?结合之后数据传输安全吗?

首先这两种是可以进行结合的,首先客户端向服务端获取公钥,客户端生成一个随机字符串key,并且用公钥进行加密后发送给服务端,服务端用私钥解密出来key,此时key只有服务端和客户端知道。那么这种方法就安全了吗?此时出现了另一种方法,如图所示,hack在用户不知情的情况下充当一个”服务端“,用户所有的数据都是传给hack,hack拿到明文数据之后,再充当一个客户端去和服务端进行交互,hack在原本的客户端和服务端之间充当了一个中间人,这样就是可拿到用户发送的所有明文数据,也可以对这些明文数据进行修改后再发送到服务端。
notion image
 

0x06 为了安全,引入CA证书

客户端为了确认拿到的公钥的是服务端的,引入了CA证书。只要是CA认证过的公钥都是好公钥,没认证的就是危险公钥。
 
CA也是有公钥和私钥,服务端的公钥用CA的私钥进行加密,加密结果传输到客户端,而CA的公钥是浏览器所拥有的,用公钥解密,如果能够解密得到服务端的公钥,说明这个公钥是服务端的公钥,如果解密不成功,则这个就是伪造的公钥,会抛出异常。