HTTPS出现原因
HTTP默认是明文传输的,数据包在网络中转发的时候,黑客完全可以见数据包拦截下来,查看和篡改其中的信息。
比如:
1、 查看其中的密码,那么密码就泄露了。。
2、 转账操作,如果黑客将被转帐的账户改成自己的,那么你的钱就跑到黑客的账户里了。。。
所以HTTP是不安全的,HTTPS 的全称是 HTTP Secure,是HTTP的安全升级版,引入了加密,数据采用密文传输,解决了这一问题。
对称加密和非对称加密
1、加密和解密
当今主要有对称加密和非对称加密两种方式。
对称加密
对称加密利用一把密钥对明文进行加密,然后再利用之前加密的密钥进行解密。加密和解密的密钥是同一个,所以叫对称加密。
非对称加密
非对称加密中有两把不同的密钥,分别为公钥和私钥。
明文可以被公钥加密为密文,然后用私钥将密文解密为明文。
明文也可以被私钥加密为密文,然后用公钥将密文解密为明文。
用于解密和加密的密钥不是同一把,所以叫非对称密钥。
非对称加密的效率是远远低于对称加密的,耗时比较长。
HTTPS加密
HTTPS是采用对称加密还是非对称加密呢?
我们将这两种情况都挨个探讨一下:
1、对称加密
客户端利用密钥将数据加密,然后传输到服务器,服务器也利用密钥解密,得到数据。即使黑客捕获了数据,但是没有对应的密钥,也无法获取到数据。
对称加密的前提是 客户端和服务器要公用一个密钥,这个密钥怎么生成?并且二者如何共享这一密钥呢?
怎么制定呢?
1、客户端生成,传输给服务器
2、服务器生成,传输给客户端
这两种方法都不行,传输密钥会以明文的方式通过网络传输,也有可能被黑客捕获,然后得到对应的密钥。黑客在拦截到 转账、密码等数据的时候仍然可以通过密钥将其解密,然后篡改,接着用密钥加密数据,然后传给服务器。
所以单纯的对称加密是无法解决安全加密的,除非双方能够安全的分享密钥。
非对称加密
密钥能不能被加密传递?
对称加密肯定是不行的,因为对方不知道密钥,无法进行解密。
那么非对称加密呢?
客户端随机生成一个密钥,然后利用公钥加密,服务器用私钥解密得到对应的密钥,然后两方就可以利用密钥来安全传输数据了。
关键是公钥和私钥都是成对出现在服务器的,客户端怎么获取对应的公钥呢?
服务器公开公钥,客户端保存对应的公钥
不安全,如果黑客入侵了客户端,或者服务器将对应的公钥改为了自己的生成的公钥,那么到时候客户端和服务器连接的时候,使用的是黑客的公钥,黑客可以拦截数据包,获取客户端生成的密钥,然后利用服务器的公钥包装后再发给客户端,密钥还是会被泄露的。
利用HTTP发送明文公钥给客户端?
这也存在安全隐患,黑客能够捕获对应的公钥。
黑客也可以创建一对公钥和私钥,然后将自己创建的公钥替换服务器的公钥发送给客户端。
然后客户端是无法察觉公钥被掉包了,会利用黑客创建的公钥来加密 密钥,黑客捕捉到密钥数据包后,利用私钥可以解密得到密钥。
黑客最终还是获取到了密钥,还是可以查看和篡改数据的。
所以看出来,公钥是无法通过网络进行传输的,因为客户端无法确定获得到的公钥是服务器的还是黑客窜改的,客户端一定要能够确定公钥的真实身份。
CA证书
CA证书通过数字签名技术解决了公钥身份确定的问题。
CA证书机构主要职责就是为网站制作CA证书。证书上包括了公钥、域名等一个网站的信息。
引入了CA证书之后,服务器不会直接将公钥发送给客户端,而是将CA证书发送给客户端,客户端从CA证书中获取对应的公钥。
CA证书制作过程
1、 网站首先会申请一个CA证书,证书上记录了网站的域名、公钥等信息
**:数字签名技术**
**1.1、** 首先将证书上的明文数据利用hash算法进行压缩。
**1.2、** CA机构也有着一对私钥和公钥。CA机构首先会利用私钥对压缩的数据进行加密
**1.3、** 将 明文 和 加密后的数据 共同组成为证书,证书就制定完毕了。
2、 网站将CA证书发送给客户端
3、 CA机构中的公钥是公开的,系统或者浏览器中都有。客户端通过公钥对证书中的加密后的数据进行解密,然后将明文利用hash算法进行压缩,然后比较二者是否一致,如果一致,就说明证书是合法的。如果不一致,说明证书被篡改了。
数字签名
数字签名分为签名和验签。
签名:
签名就是利用一个私钥对明文进行加密,然后将明文和密文同时保存为数字签名。
验签:
利用公钥对私钥加密后端密文进行解密,如果和明文不一致,就说明被篡改了,如果一致,就说明数据是安全的。
证书被黑客篡改?
1、黑客篡改了证书中的明文,因为黑客没有CA的私钥,所以无法对明文进行加密。那么明文压缩后和证书中的加密数据解密后就不一致了,浏览器直接丢弃证书。
2、黑客篡改了证书中的加密数据,也会出现不一致。
证书被替换
如果黑客也申请了一个证书,然后将网站的证书替换成了自己的证书。那么客户端得到的不就是黑客的公钥吗?这样不是被黑客阴谋得逞了吗?
没用的,因为证书中记录的有域名信息,客户端发现证书上的域名和自己要访问的域名不一致,就说明证书被篡改了,也会丢弃该证书。
域名是独一无二的,同一个域名只能申请一个CA证书。黑客不可能申请一个和网站域名一样,但是公钥不一样的证书。
证书为什么还要hash压缩
非对称加密的效率远远低于对称加密,所以会将证书信息先进行hash压缩,然后在进行非对称加密,可以提高效率。
CA的公钥被篡改带来的问题
客户端通过CA的公钥来获取CA证书中网站的公钥,然后防止黑客篡改CA证书中的公钥。
如果黑客篡改了客户端中的CA公钥,然后伪造CA证书,会不会造成安全问题呢?
假设黑客伪造了一个CA证书,上面伪造了了客户端请求的服务器域名、自己生成的公钥1。
黑客截获了服务器发给客户端的CA证书,获取到了服务器的公钥2,然后讲自己伪造的CA证书发给了客户端,并且篡改了客户端中的CA公钥为自己生成的公钥3。
因为客户端中CA公钥被篡改了公钥3,因为CA证书也是黑客伪造的,所以客户端能够成功获取到黑客伪造的公钥1,客户端还以为是服务器的公钥2。
这时客户端利用黑客篡改的公钥1,来加密发送密钥,然后被黑客捕获,利用黑客的私钥解密,因为公钥1是黑客生成的,黑客拥有对应的私钥。
就这样黑客获取到了客户端生成的密钥。
然后黑客利用之前获取到的服务器公钥2,然后加密密钥,发送到服务器,服务器也无法察觉到密钥已经被黑客获取了。
就这样黑客就能够通过密钥来查看和篡改 客户端和服务器之间的数据了。。。
所以如果客户端中CA公钥被篡改的话,是有安全问题的。黑客可以通过伪造的CA证书来获取密钥。
总结其本质,还是黑客 通过一系列手段 将 服务器的公钥替换成了自己的公钥。
总结
通过一系列的思考,我们明白了 HTTPS 是通过CA证书来安全获取到服务器的公钥,然后通过非对称加密将密钥传递给服务器,然后二者通过对称加密来传输数据,实现了安全传输。