HTTPS 简析

563 阅读4分钟

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的公钥解密读取,但无法重新加密伪造。

实现加密传输

第一步,浏览器验证证书,在这过程中一旦有数据被修改则不会通过验证

接着就可以和前面使用的方式一样来加密数据