HTTPS
我们刚刚学完HTTP,咋有来了一个HTTPS呀,这和HTTP有啥关系么?
我们知道HTTP是用户层协议,是由业界大佬编写的协议模板供我们使用,我们来看看 HTTP存在的问题!
当我们客户端用户要下载一个天天动听app时,因为我们网络传输数据要经过很多中间设备,其中就肯定要经过运营商设备,毕竟这些网络设施都是由他们搞的!当你的http请求通过他们的设备时,他们就可以拿到你的请求,你本来是想下载天天动听的,他就给你返回了一个QQ浏览器,挣你流量,恰烂钱!
我们如何避免这个信息暴露问题呢?
我们知道这里最大的问题就是除了服务器和客户端中间网络传输设备都可以读取到里面的数据内容,就好比传纸条!
我们可以对数据加密!
SSL/TLS
我们就将HTTP进行了升级,引入了SSL加密层!这就是我们的HTTPS!
加密方式:
1.对称加密!
2.非对称加密!
对称加密
如何对数据进行加密呢?
明文: 就是我将我们的数据不进行任何处理直接传输!
密文: 密文通过某种加密方式(密钥)将明文进行加密后传输!
密钥: 通过这里的密钥可以将明文和密文进行转换!
我们可以联系实际生活,这里的密钥就相当于钥匙,通过钥匙我们的客户端和服务器都可以对锁进行解锁操作!
我们的HTTP也是通过这里的密钥进行加密!
对称加密就是通过一个密钥将数据报进行加密操作,然后客户端话服务器通过这个共有的秘钥可以对数据报进行加密和解密!
这里通过将密钥,双方共享,服务器和客户端就可以都数据报进行加密解密操作!
密钥传输
现在又有一个问题就是我们的秘钥也是需要进行网络传输的,也就会被中间有些设备拿到!中间设备拿到后,也可以对数据进行解密操作,所以白加密了!
还有就是这里密钥肯定要每一台客户端拥有不一样的密钥,然后将密钥给服务器!如果大家共用一个密钥的话,你想知道密钥开一台客户端就好了!
非对称加密
对称加密存在的问题就是密钥会被其他设备拿到!
我们可不可以对密钥进行加密就解决了这个问题!
这时就引入了非对称加密方式!!
非对称加密就是套娃!我们再给密钥加上一把锁!
这里就引入了私钥和公钥:
公钥:服务器和客户端大家共享的密钥,通过这个密钥可以对对称密钥进行加密!
私钥:只有自己知道的密钥,通过这个密钥可以对对称密钥进行解密操作!
这里我们的公钥,服务器和客户端都会生成一个公钥,然后将公钥发出去,然后大家都拿到了这个公钥,然后私钥留着!然后当服务器和客户端生成一个对称密钥后,会将该对称密钥用这个公钥进行加密后发送,然后我们拿到数据报和加密后的对称密钥后,通过私钥对已经加密后的对称密钥进行解密,拿到对称密钥,然后通过对称密钥对数据报进行解密操作!
可能看完有点头大,就类似一个信箱,我们给邮递员一把锁(公钥),然后邮递员将信(对称密钥)放入信箱后,将信箱锁上(通过公钥对对称密钥进行加密),然后用户通过钥匙(私钥)将信拿到!
我们一开始将公钥发出去,如果要进行对称密钥传输,就应该事先通过公钥对对称密钥进行加密后再进行传输!而这时中间设备拿到加密后的对称密钥和公钥也无济于事!公钥只能用来加密操作,不能解密!
然后我们的另一方拿到加密后的对称密钥后通过自己私有的私钥对对称密钥进行解密!然后就可以对数据报文进行解密操作了!
重点就是: 公钥(发出去)只能对对称密钥进行加密,私钥自己留着,用来对对称密钥解密!
难道这样就安全了嘛?如果有中间设备自己搞个公钥和私钥冒充会怎么样?
上面的过程就是中间人攻击,就是被黑客入侵的网络设备,会自己生成假冒公钥和私钥,黑客收到服务器发来的公钥后保存,将自己的公钥发个客户端,然后客户端将对称密钥用黑客的公钥加密,发个黑客,黑客通过自己的私钥解密,然后通过服务器的公钥进行加密发给服务器,如假包换!!!
中间人攻击如何解决呢?
这里存在的问题就是我们无法知道公钥到底是冒充的还是真的!
只要我们可以确定公钥的真实性,就可以解决这个问题!
我们联系实际生活,我们是如何确定一个人的身份呢?
我们可以通过这个人的身份证!
身份证可以造假,就想公钥可以冒充一样,但是我们可以通过身份证在公安区登记的信息,就可以知道这个身份证的真实性!
所以我们这里也是如此,我们引入了第三平台,通过这个第三平台给的证书,就可以保证这里公钥的真实性!
我们通过这个公证机构就可以避免中间人攻击了
当创建一个服务器后就去这个公证机构登记(类似人一出生就去登记信息),然后将这个公钥数据放在这个证书里发送(类似身份证),客户端拿到证书后去公证机构验明身份!然后再使用加密操作!
这里天天访问公证机构有点繁琐,使用在操作系统内部就有这个公证机构的认证方式,就可以进行本地认证!