1.为啥要有HTTPS
我们原有的HTTP协议可以实现浏览器和服务器之间的交互,但是HTTP协议是明文传输十分不安全,一旦有不法分子偷偷篡改或者盗窃HTTP中的一些较为隐私的信息会造成非常严重的后果。HTTPS是加密的,就算拿到了也是密文
2.对称加密和非对称加密
2.1对称加密
特点:加密和解密使用相同的密钥,高效适合于大多数场景的加密,算法公开,安全性取决于密钥的大小,密钥越大效率越低。
缺点:算法本身安全,但是加密解密都用同一个密钥场景不安全。因为密钥会在传输中通过报文发送给服务器,服务器拿到之后会对信息进行解密,但是如果黑客在中间将这个数据截取了那就是密文密钥全都拿下,一锅儿端了。那就相当于没加密。
2.2非对称加密
特点:匹配的一对密钥来分别进行加密和解密,两个密钥分别为公钥和私钥。
公钥加密的数据只能用对应的私钥解密,反之亦然。
非对称加密的流程如下。
比如说他想给我发数据,我首先将我的公钥给他,然后他就用我的公钥对数据进行加密然后发送给我,我就用我的私钥将数据解密就行了。这样的话就算是在传输过程中被黑客截获黑客也无法获得正确的信息。
2.3私钥签名
我有一个梦想,我的梦想就是对着全世界对我最喜欢的女孩说——我爱你!(心形)(心形),但是由于那个女孩过于优秀所以我不得不面对众多情敌,当我发出这样一条明文信息时,他们一定会百般阻拦,比较损的招就是把明文改了,改成我恨你,那这样的话我就完了,彻底废了。所以要避免这种情况的发生我必须想方设法阻止我的明文信息被篡改,这样的话我就可以抱得美人归了。在这个背景下,私钥签名大显身手。
首先我还是得先把我的公钥发送给我的女神,然后计算明文的哈希值,再用私钥加密明文的哈希值,再将其作为私钥签名并和明文亲爱的我爱你发送出去,这时候我的女神会用我的公钥将私钥签名解密,再将解密出来的值和明文的哈希值对比,如果相同就证明没人修改,就算我的情敌修改了明文,我的女神也不会误会我,因为我将公钥传给了她,她就知道这个信息是我发的,再看一下,明文被没被修改,如果没被修改她就知道接受到的信息是正确的未经篡改的。
3. HTTPS流程
为了尽可能保证数据的安全性,我们使用非对称加密,浏览器先是发送请求报文请求服务器的公钥,然后服务器给浏览器发送一个服务器的公钥,但是在这个过程中服务器公钥可能被黑客篡改成黑客的公钥,然后浏览器收到后就用黑客公钥加密明文,黑客截取到这个密文就会用黑客私钥窃取数据,而服务器端的私钥无法解密密文。所以我们不能让服务器公钥被篡改,就需要一个认证机构来保证服务器公钥不被修改。
这个认证机构是全球公信力很强的大家都认的,大家都相信他不会骗我,所以就默认了服务器公钥不可能被篡改。机构私钥存在于浏览器中,开始的时候浏览器回向服务器请求一个认证证书,这个证书包含了服务器的公钥和服务器的域名,就算被黑客拿到了也无法获取,因为黑客没有机构公钥。服务器响应并将认证证书发回给浏览器,浏览器通过机构公钥解密认证证书拿到服务器公钥。HTTPS中浏览器和服务器是通过对称加密进行交互的因为非对称加密效率太低了。既然是通过对称加密那双方就必须都有同一把秘钥,这把秘钥就是会话秘钥,通过服务器的公钥加密浏览器的秘钥生成会话秘钥发送给服务器这样就算是在发送途中被截获也无法解密出真正的秘钥,服务器接收到之后通过服务器私钥解密会话秘钥生成浏览器秘钥在通过这个浏览器秘钥加密我要返回的信息然后返回给浏览器,这样浏览器通过浏览器秘钥解密信息,这样这一次通信就完成了。
总结一下这个过程实际上还是通过对称加密做的但是对称加密秘钥容易被截获,所以我们就对这个秘钥进行非对称加密来保证它的安全性,但是非对称加密的秘钥(服务器公钥)也有可能被窃取,然后我们还得对他再加密,这个加密就是认证证书,用机构秘钥进行加密,由于机构是公认的不会骗人的所以我们就能保证他的安全性。