https简单介绍

91 阅读6分钟

1. http的缺点

http是基于tcp协议的应用层协议,在互联网中被广泛用于数据传输。但其也存在一些安全上的缺点。

1.1 缺点一:明文传输

如果使用http协议,在登录过程中我们的账号密码都是通过明文传输的,因此中间的路由器是可以通过截取查看我们的报文中的信息的。

1.2 缺点二:容易被篡改

同上,中间路由器是可以截取我们的报文的,那么它也可以对我们的报文进行篡改然后将篡改后的报文发给我们。一般是在返回的信息中插入一段广告的js,过分点的就是给我们重定向到钓鱼网站。

2. 加密算法

在介绍https协议前,我们先大致了解下加密相关的知识。

2.1 不可逆加密

一段数据经过不可逆加密后得到的密文将无法再恢复,如md5、sha系列算法等。

如果要传输数据显然不会采用这种加密方式,否则得到了加密后的数据我们也无法解密呀。

2.2 可逆加密

包括对称加密和非对称加密。

2.2.1 对称加密

使用一段密钥对数据进行加密,同时也只能通过该密钥对数据进行解密。包括aes、des等算法等。

如果要通过对称加密传输数据,那么通信双方需持有一段相同的密钥,发送方通过该密钥对数据进行加密,接收方收到密文后用该密钥进行解密。看似很ok,但是问题的关键在于最开始的时候双方如何确定使用哪个密钥,此时双方还没有开始接触哦。假如最开始发送密钥的时候就被攻击者截取了,那么后续所有的通信都是不安全的。

因此在互联网数据传输中采用对称加密通信也是不够安全的,主要在于最开始的时候存在密钥被截取的风险。

2.2.2 非对称加密

使用公钥对数据加密,通过私钥对数据进行解密;使用私钥对数据进行签名,通过公钥验证签名。

如果要通过非对称加密传输数据。一开始由服务端生成一对公私钥,服务端将公钥发给客户端,客户端使用公钥将数据加密发给服务端,服务端使用私钥对密文进行解密得到数据。看似ok,但是仍存在一个问题。假如服务端发给客户端的公钥被攻击者截取,然后攻击者自己生成一对自己的公私钥,然后将自己的公钥发给客户端;客户端获取到攻击者公钥,使用攻击者公钥加密数据发给攻击者,攻击者使用攻击者私钥解密获取到了数据,然后使用服务端公钥将假数据加密发给服务端,服务端使用私钥解密得到了假数据。此时攻击者通过截取服务端公钥并发送假公钥给客户端,从而将服务端和客户端玩弄于股掌。

显然,非对称加密也不完全是安全的。

3. https为什么安全

要了解为什么安全,首先需要知道它的工作原理。

3.1 https通信过程

非对称加密的主要问题在于客户端无法验证接收到的公钥是否是伪造的。于是聪明的人们发明了以下验证过程:

1. 在最开始,服务器向CA(证书颁发机构)提供了自己的网站信息以及公钥;
2. CA对服务器的明文信息进行hash,然后使用自己的私钥对hash值进行加密得到数字签名,将带有数字签名的证书颁发给服务器;
3. 服务端将证书发送给客户端;
4. 权威的CA就那么几家,因此客户端内置了他们的公钥;
5. 客户端使用对应CA的公钥对数字签名进行解密,得到A;
6. 客户端对证书上的明文信息进行hash得到B;
7. 如果A=B,说明该证书没有被篡改,上面的公钥是安全的,验证成功。

用图形容就是:

image.png

最终的解决方案还是需要我们提请把公钥内置在客户端,否则怎么发送都存在中间人攻击的危险。

3.2 数据通信过程

如果理解了上面,那么下面的内容就很轻松的可以理解了。

客户端现在得到了真实的服务端公钥,然后新建一个密钥,使用服务端公钥加密发给服务端,服务端得到该公钥后使用私钥解密得到该密钥。随后双方通过该密钥进行对称加密通信。

为什么此时使用对称加密通信呢?一是因为此时已经保证了双方的密钥都是一致的、真实的;二是因为对称加密的速度要快于非对称加密。

3.3 对比http

可以看出,https = ssl + http。服务端和客户端的通信过程还是依靠http协议,只不过在这基础上加了验证和加密。

服务端与客户端在通信过程中,如果数据包被攻击者截取,由于数据是经过加密的,因此攻击者无法获取到真实数据(解决了http明文传输的缺点);

由于数据经过加密,攻击者想通过篡改数据包来达到自己的目的,它需要这么做:先对该加密后的数据包进行解密得到真实数据,然后在真实数据中插入它的攻击代码,接着再重新把数据包进行加密。可是它不知道密钥,因此只能对数据包进行瞎改。这么做对于攻击者而言毫无意义(解决了攻击者篡改数据包的问题);

3.4 两个问题

3.4.1 为什么CA颁发证书的时候要先对网站信息hash一遍再使用私钥签名,而不是直接用私钥对网站信息进行签名?

其实后者也行。不过由于非对称加密耗时更多,我们先对网站信息进行hash,将原来一大串的信息缩短成几个字符的hash值,此时再来签名验证就快得多了。

3.4.2 为什么使用抓包软件抓到的https包是明文的?

原因在于安装抓包软件时,我们会在浏览器中导入并信任抓包软件的证书。然后之后浏览器与服务器之间的数据通信都会经过抓包软件,抓包软件充当中间人的身份。过程如下图:

image.png

4. 说明

以上内容是我看了一些文章,结合自己的理解写的,内容不一定完全对。如有哪里写得不对,欢迎指出。