HTTPS 简析
HTTP 的缺点
http 协议是明文传输数据的,不够安全,在传输的途中完全可以被捕获篡改或者盗取信息。
比如:浏览器想向服务器发送登陆的数据(账号密码),在传输的过程中由于使用的是 http 协议,怀有恶意的人就可以获取到数据的内容并篡改。
加密
既然明文传输有危险,那么我们就应该对数据加密来防止数据泄露。
加密分为:对称加密和非对称加密
对称加密
对称加密就是产生一个**,加密和解密都是用这个**。
加密过程:
解密过程:
用对称加密能否解决问题呢?试试看
我们想用**加密数据然后发送给服务器,要确保服务器和我们都知道**,就像这样
但是有一个问题,在第一次发送 key 的过程中,在中途是可以被截获的,就像这样:
在第一**就被获取了,在以后的数据传输过程中可以利用这个已经保存的**来揭秘数据加密数据,所以这也是不够安全的
非对称加密
我们再来看看非对称加密能不能解决问题,非对称加密会产生一对**(公钥和私钥),一个用于加密,一个用于解密。
使用非对称加密应该就可能是这样的情况:服务器产生一对**(key1,key2),通过明文传输公钥 key1 给客户端,客户端生成一个对称加密的** key,然后通过 key1 加密传输给服务器,然后服务器使用私钥 key2 解密得到 key,然后服务器和客户端之间通过 key 来加密解密数据,就像这样:
这样看似就完美了,在数据传输的过程中好像就没有办法获取到加了密的**了,但是还是有办法的,就像这样:
第三方的恶意程序拦截到服务器发来的公钥 key1 之后,先生成一对** key3 和 key4,然后将 key3 发送给客户端,客户端并不知道**已经不是服务器发来的那个**了,接着客户端会生成一个对称加密的** key 用 key3 加密然后回发,恶意程序接受到数据是可以通过 key4 解密获取 key 然后通过 key1 加密再发送给服务器,这样后面的数据即使用 key 加密也是可以被恶意程序解密的。
CA:证书颁发机构
按照前面来看,无论怎么样加密都没有办法真的避免数据泄露,那应该怎么办,这就需要靠机构来帮忙了。
CA:是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
一个网站想要升级到 https,就需要向证书颁发机构购买证书,购买的时候需要提供服务器的公钥 key1 和 money
证书 Digital Certificate (DC)
此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。
证书中的服务器公钥 key1 和证书签名信息都是由 CA 的私钥 KEY 加密过的(也就是私钥加密公钥解密),CA 会将自己的公钥 KEY 公开,但是私钥除了 CA 没有人知道。由于公钥是公开的,操作系统和浏览器一般都会内置世界上的所有 CA 的公钥。
证书签名 Signature
证书签名的算法是公开的,它出现的目的,是为了让每一个拿到证书的终端,可以验证签名是否被篡改
浏览器在和 https 的网站服务器发送信息的第一步就是验证证书签名,浏览器将域名、CA 公钥服、务器公钥通过公开的证书签名算法进行计算得到一个新的证书签名,和用 CA 公钥解密得到的证书签名进行比对,如果不同则证书被人篡改过则不会通过验证。因为,证书中的服务器公钥、证书签名是通过 CA 的私钥加密的,那些恶意程序是无法获得 CA 的私钥,因此,其他终端只能通过 CA 的公钥解密读取,但无法重新加密伪造。
实现加密传输
第一步,浏览器验证证书,在这过程中一旦有数据被修改则不会通过验证
接着就可以和前面使用的方式一样来加密数据