HTTPS起源

在2015年前 国家还没有明确的颁布互联网保护法 在这个之前 很多做广告的公司是根据访问连接请求中的Referer来确认是哪个平台引流进入的 其中请求就需要经过网络通信 在网络通信的过程中 因为利益的驱使 就导致了有很多来专门截取请求 然后修改请求为其他平台以此来谋取利益 为了维护自己的利益 官司肯定是会打的 但是打官司会有一个很长的过程 所以为了更快的维护自己的利益 HTTPS应运而生


HTTPS

HTTPS是在HTTP的基础上引入了一个加密层 这个加密层叫做SSL\TLS
这个加密层主要通过两种方式来实现加密

对称加密

使用同一个密钥进行加密解密

非对称加密

有两个密钥 分别是公钥和私钥
其中 公钥是公开的 私钥是不会公开的 但是其中的数据 使用公钥加密后 只能使用私钥来进行解密
也可以使用私钥进行加密 公钥来进行解密 公钥和私钥两者是相相成的

两者的区别

速度:速度上对称加密的效率是大于非对称加密的
解密:使用对称机密的数据只需要使用对称密钥即可解密 非对称加密的数据只能使用私钥来解密
安全:对称密钥很容易被篡改 非对称密钥在引入各种措施之后不容易被篡改
(其中 我们是要明确 安全只能是相对的安全 不会是绝对的安全)


HTTPS的安全问题

使用对称加密

正常交互

首先是正常的进行交互 从客户端发起获取密钥 之后服务器会返回一个对称密钥 之后客户端会使用这个对称密钥进行数据传输的加密 服务器拿到之后会使用对称密钥来进行解密
《JavaEE》HTTPS-LMLPHP

黑客入侵

当黑客入侵之后 如果我们使用对称密钥加密的话 此时服务器返回key的时候 黑客也随之获取到了密钥key 之后的传输黑客也能窃取到数据交互的内容
《JavaEE》HTTPS-LMLPHP

解决方案

使用非对称加密来防止黑客直接获取到密钥key

非对称加密

引入非对称加密后的流程

引入非对称加密之后 会进行以下的交互过程

  1. 客户端发起获取密钥 黑客获取到消息转发给服务器
  2. 服务器生成一个非对称密钥 再将公钥发送给客户端 黑客获取到公钥 转发给客户端
  3. 客户端使用公钥将自己的对称密钥key进行加密 再发送给服务器 黑客获取到加密后的key 但是此时黑客是无法得知其中的key是什么的 即使是黑客明确的知道这个公钥是什么 但是因为非对称加密中的公钥和私钥是一对 使用公钥加密的只能使用私钥来解密 所以黑客是获取不到其中的key的 只能乖乖的转发给服务器
  4. 服务器收到加密后的key之后 使用私钥来对数据进行解密 解密之后获取到key 之后的传输就会一直使用这个对称公钥来进行加密和解密
    《JavaEE》HTTPS-LMLPHP

中间人攻击

虽然如此一来引入非对称加密之后 安全系数得到进一步的提高 但是黑客就真的没办法了吗?还是有的

黑客的入侵方案加入后的流程

  1. 客户端发起获取密钥 黑客获取到消息转发给服务器
  2. 服务器生成一个非对称密钥 再将公钥发送给客户端 黑客获取到公钥 此时 黑客会自己生成一个对称密钥newKey 然后将公钥为newKey发送给客户端
  3. 客户端收到之后 是不能分辨出是否是被黑客篡改过的公钥 之后客户端会使用获取到的公钥将自己的key进行加密
  4. 加密之后发送给服务器 黑客获取到了使用newKey加密后的key 然后使用newKey来进行解密 如此一来黑客便获取到了客户端的key 然后黑客只需要使用pub_key来对已经获取到的客户端的key来进行加密发送给服务器
  5. 服务器收到之后也无法判断是否被篡改过 之后会使用key来进行交互 其实和之前是没有变化的 但是此时的黑客已经获取到了客户单的对称密钥key
    《JavaEE》HTTPS-LMLPHP

解决方案

引入“工信机构” 这个机构负责颁布数字证书

  1. 客户端发起获取数字证书(因为数字证书的引入就要直接获取数字证书 数字证书中就包含了公钥)此时黑客获取到 转发给服务器
  2. 服务器收到获取请求后 会先生成一个非对称密钥 使用公钥来向工信机构来申请数字证书 申请到数字证书后就可以将数字证书返回给客户端
  3. 服务器返回客户端 黑客收到 黑客转发数字证书给客户端 客户端收到之后就会使用系统中自带的公钥来进行解密(这个公钥 不单单是客户端有 黑客也会有 所以黑客也能获取到这个公钥 但是没办法对它进行修改)解密之后获取到公钥 然后使用公钥对key进行加密发送给服务器
    《JavaEE》HTTPS-LMLPHP

黑客再次加注

黑客可以通过伪造修改数字证书来达到获取key的目的
《JavaEE》HTTPS-LMLPHP

解决方案

我们在数字证书中加入了签名机制 这个签名其实和校验和有相同的用处 都是为了检验数据是否被发生过修改 其实用了其中的数据来计算出的签名 这个签名被工信机构生成的一对非对称加密进行加密 使用私钥来进行加密 加密后的数据只能使用公钥来解密

  1. 客户端发起获取数字证书 黑客获取到 转发给服务器
  2. 服务器收到后生成一对非对称密钥向工信机构认证 认证之后返回数字证书
  3. 黑客获取到之后 是可以使用公钥来进行解密 获取到其中的内容 但是如果对于数字证书中的内容进行修改的话 就需要使用到工信机构的密钥来进行加密 而黑客是获取不到这个私钥的 以此达到了只能读不能改的效果
  4. 客户端获取到数字证书之后会先使用公钥计算原始签名 然后也会使用相同的计算方式计算签名 核对签名和初始签名是否一致 如果不一致就代表被篡改过 就会在浏览器中抛出大大的异常
    《JavaEE》HTTPS-LMLPHP
05-25 08:53