文章目录
- 一、HTTPS协议
- 二、对称加密
- 三、非对称加密&对称加密(混合加密)
- 三、加密+证书
- 四、HTTPS双刃性
一、HTTPS协议
之前介绍了HTTP协议,它给我们带来很大便利,但是也能看到他的不足。由于其本身通信使用明文,没有进行加密,也没有确认通信方的一种机制,所以在互联网上近似于裸奔,很容易就会受到中间人攻击,导致安全存在问题。
有以下三点安全隐患:
1、通信时数据并没有进行加密,而是使用明文,很容易就会被窃听
2、没有验证通信对象的机制,导致了可能会有人假扮客户端进行通信
3、无法验证报文的完整性,中途可能被人篡改,自己又无法确认
所以为了弥补上述缺点,HTTPS就诞生了,HTTPS并不是一个新的协议,而是身披SSL外壳的HTTP,通过引入加密,证书,完整性保护来保证了他的安全。
二、对称加密
对称密钥加密也叫做共享密钥加密,其实就是加密和解密采用了同一个密钥。
双方在进行通信时,发送方会利用密钥进行加密,再将密钥一同发送给接收方,让其使用这个密钥进行解密。
优点:算法透明且计算算力小,加密速度快且效率高。
这种方法看起来不错,但存在很大的问题,如果在发送的时候被拦截下来,密钥就会泄露给中间人,此时中间人就可以通过密钥来对之后的数据进行解密,此时也就失去了加密的意义。
因为服务端没有秘钥key,而客户端要把key和数据一块发过去,这就很容易被中间人劫持,所以用这种方法解决不了安全问题。
如图:
三、非对称加密&对称加密(混合加密)
非对称加密又叫做公开密钥加密,他使用一对非对称的密钥,一把叫做私有密钥,一把叫做公有密钥。公有密钥是公开的,任何人都可以获得,而私有密钥则不能让任何人知道
当进行通信时,发送方使用对方的公有密钥进行加密,而接收方接收时则使用自己的私有密钥进行解密,这样一来,用于解密的私钥就完全掌握在接收者自己手里,中间人也无法从中窃取密钥,安全也一定程度的得到了保障,
但是还是有隐患。
如果服务端有公钥和私钥,因为我们建立TCP三次握手之后,还得需要秘钥握手过程,这个过程是服务端要给客户端发一个公钥,然后私钥自己留着用于解密,所以这时候中间人会在这过程就可能把这个传给客户端的公钥拿到,而且服务端无法进行加密,一旦中间人拿到公钥,就能窃取数据甚至修改。
改为混合加密,客户端好服务端各自有公钥P和私钥S
也就是各自使用非对称加密,它们各自发送对方自己的公钥,然后用对方的公钥加密,收到数据的时候在用自己的私钥解密,这时候看起来是安全的,都是用非对称加密,速度太慢,可以改为对称加密+非对称加密
以上过程是秘钥握手协商过程,上面做完就可以要对称秘钥c进行通信。
但是还是存在问题
从上图可以明显看到,如果c给s发自己的p的时候,就已被中间人劫持,然后他准备了自己的私钥和公钥,将自己的公钥给客户端,客户端形成v之后,中间人再用自己的私钥解密获得对称秘钥c,再用服务端的公钥对c加密发给服务端,服务端正常解密得到c,在这个时候,中间人已经得到了对称秘钥c,数据还是可能被修改。
三、加密+证书
解决上面的问题,HTTPS引入了数字证书这一机制。
服务器的运营人员会向数字证书认证(CA)机构来进行认证,在机构对其验明身份之后,就会对服务器的公钥做一个数字签名,并且将公钥放入明文信息后(公开的)绑定在一起形成证书。此时当客户端接收到服务器发送的公钥证书的时候,从里面获取公钥。
数字签名:CA机构把明文信息通过哈希散列函数进行运算得到一串固定长度的数字摘要。数字摘要并不是加密机制,可以来判断这个份信息是否被修改,后面分析时用到。
如图:
客户端怎么知道这个公钥是可用的?
上面提到,CA机构对其验明身份之后,就会对服务器的公钥做一个数字签名,CA是用自己的私钥对这个数据摘要进行加密的,这个私钥只有CA机构有,当客户端收到证书的时候,它会去验证这个证书是否被修改,而客户端比如说是浏览器,因为CA会在所有的浏览器内置自己的公钥,用来它对上面的数据摘要进行解密,解完之后,得到数据摘要,再进行相同的哈希算法对明文信息运算生成一个散列值。
然后拿刚生成的散列值和上面解完密之后的散列值进行对比,看是否一样,如果相等,说明该证书没被修改过。说明这个明文中即CA机构给我们的公*钥是可以用的。
加密+证书认证分析
通过上面的分析之后,在握手协商的时候,服务端给客户端发送证书,验证合法性,客户端得到公钥,然后这边生成自己的对称秘钥,再把它发给服务端,服务端用私钥对它进行解密得到对称秘钥c,以后就用对称秘钥进行通信。这样解决了公钥被其他人恶意截取的问题。
四、HTTPS双刃性
HTTPS在通信接口部分使用了SSL和TLS来进行代替,对于HTTP协议来说,它是直接和TCP进行通信。
而HTTPS为了保证安全,使用了SSL来提供保障,通信时首先与SSL进行通信,再由SSL来与TCP进行通信,正是因为由SSL的存在,才使得HTTP具备了HTTPS的加密、证书、安全性保障这些功能。
但是SSL为HTTPS保障安全的同时,也降低了效率。
体现在两点:
1、和HTTP相比,网络负载可能会变慢几十倍,由于HTTPS还需要额外进行SSL通信,整体上处理通信量不可避免的增加。
2、SSL为了确保安全,在客户端和服务端都需要进行大量的加密和解密的运算处理,导致其比起HTTP来说会更多的消耗服务器和客户端的硬件资源,导致负载增强。
SSL的高安全带来的低效率以及高负载使HTTPS并不会一直使用
具体原因
对于高访问量的Web网站来说,进行大量的加密解密出来带来的负载十分庞大,并且对于可公开信息也没有加密的必要,所以大多数网站并不会一直使用HTTPS,而是只在进行私密内容传输的时候才会使用,来确保资源的节约。
数字证书的成本太高使个人网站及非盈利网站望而却步,要进行HTTPS通信,数字证书是必不可少的,但是对于一些非盈利的网站以及个人网站来说,每年用来购买数字证书带来的花销太大,所以大多还是用HTTP。