目录
1.前言
2.两种加密解密方式
2.1对称加密
2.2非对称加密
3.HTTPS的加密过程
3.1针对明文的对称加密
3.2针对密钥的非对称加密
3.3证书的作用
1.前言
我们知道HTTP协议是超文本传输协议,它被广泛的应用在客户端服务器上,用来传输文字,图片,视频,js,html等.但是这种传输如果经过了黑客的路由器或者别有用心的人的设备,可以很轻松的破解并修改我们的内容,这种协议的安全性得不到保障.为了解决这种问题,我们引入了HTTPS,它是基于HTTP协议的一种加密安全协议,可以把HTTP协议传输的内容进行加密传输,让黑客或者别有用心的人破解不了.
2.两种加密解密方式
2.1对称加密
我们首先要说明一个概念就是HTTP是明文传输的,如果我们想让他被加密,那么就需要用到数据加密.那么我们应该如何对正文部分进行加密呢?考虑到资源消耗成本问题还有揭秘问题.我们可以使用对称加密对数据进行加密,即加密和解密的算法都是同一个密钥.
2.2非对称加密
而非对称加密,加密和解密采用的是两个密钥 ,如k1,k2这两个密钥是成对的,k1用来加密,此时k2就用来解密.也可以使用k2加密 ,k1解密.我们可以把一个密钥公开出去,而这个公开出去的密钥,就是公钥,还有一个密钥自己保存好,这个密钥就是私钥.手里只有一把的话,是无法知道另一把是啥的.
看起来非对称加密很安全,但是这种加密方式,所需要消耗的系统资源开销也更大.
那么HTTPS是如何进行加密的呢?
3.HTTPS的加密过程
我们站在黑客的角度来看,如果一个HTTP请求或者响应进行传输,在不考虑服务器被黑的情况下,传递到服务器之前,如果黑客想拦截的话,则需要在传递的过程中拦截.
如下图所示:
数据首先从客户端传递到服务器的过程中被黑客拦截了.如果是HTTP明文传输,那么就会被黑客直接拿到数据,这样,黑客如果想篡改数据或者拿到隐私去做违法犯罪的事情就很容易.
那么我们该如何在尽可能不影响效率的情况下对HTTP请求进行加密呢?
3.1针对明文的对称加密
我们可以使用对称加密我们的数据,即客户端和服务器公用同一个密钥,这样黑客拿到数据以后就破解不了了
我们需要注意两点
1.对称加密的时候,客户端和服务器用的是同一个密钥
2.不同的客户端的,用的密钥都不同,
这也就意味着,每个客户端链接服务器的时候,都需要生成一个随机的密钥,并且告诉给服务器.也不一定是客户端生成,服务器生成并且告诉给客户端也可以,
但是这个密钥生成的过程,很容易被黑客拿到,即告诉了客户端的时候,黑客也可以拿到这个这个密钥,哪就形同虚设了.
那么这种情况应该怎么办呢? 我们可以使用非对称加密把密钥进行单独的密文传输.
3.2针对密钥的非对称加密
我们使用非对称加密的主要目的就是把明文密钥进行加密,确保密钥的安全性.
这里有同学可能会问,那么为什么不能直接把明文对称加密呢,而是要大费周章的这样搞?原来这是因为非对称加密使用的系统资源远大于对称加密,如果大规模使用,就很难承担了.
我们让服务器生成公钥和私钥,公钥可以告诉所有人,而私钥只有服务器自己知道.客户端就可以使用公钥对密钥加密,这样黑客就算拿到了这个密钥,因为他没有解密所需的私钥,也解不开这个密钥.
只要这个对称密钥的数据到达服务器,后续就可以客户端和服务器通过这个密钥来进行交流,黑客就无法破解后续的内容了,
上述过程看似天衣无缝,但是在聪明的黑客眼里,还是很容易破解,即使用中间人攻击
服务器可以创建自己的公钥和私钥,那么黑客也可以用同样的方式,创建出一对公钥和私钥,冒充自己是服务器,
在服务器拿到了基于pub1加密的key 的时候,自然可以通过自己的私钥解密,也就相信了是这么回事.后续的交流都是key,而客户端全程浑然不知.他只是拿到了假的公钥然后加密传给黑客,黑客解密后就拿到了key.然后通过服务器的pub1加密,伪造自己是客户端传给服务器.
这种方法如何解决呢?最关键的一点,在客户端拿到公钥的时候,要是有办法验证这个公钥是不是真的.而不是黑客给的.
3.3证书的作用
要求服务器这边提供一个证书.
证书是一个结构化的数据结构,有很多属性.
如:服务器的域名,公钥,证书有效期等
证书会有一个签名,里面本质上是一个加密的校验和,可以把证书其它字符进行一系列的算法得到一个校验和,如果两份数据一样,即校验和一样,那么就说明是一样的,如果不一样,则两份数据不一样.就是这个公钥有问题.
客户端拿到证书以后主要做两件事:
1.用一样的算法进行计算,得到校验和1
2/使用系统内置的公证机构公钥,对证书的签名进行解密,得到校验和2.
对比一下就知道是不是真的了.
市面上的公证机构没几家,基本上都在操作系统里面.公钥也都在
1.如果黑客直接修改公钥,不修改签名,那么校验和不一样,就识别出来了,
2.如果黑客修改公钥,也尝试修改签名,但是他不知道私钥是什么,所以无法生成加密的签名.
如果黑客拿自己的私钥加密呢?客户端用公证机构的公钥解密也会失败.
上述操作,就把客户端篡改证书的行为给堵死了.
所以这种方法是可行的.这也是市面上流行的方法.