HTTPS:让数据传输更安全
起初HTTP协议只是为了超文本传输,没有太强的加密机制。一直是明文传输,意味着使用HTTP传输的内容很容易被“中间人”窃取、伪造和篡改。通常称为中间人攻击。
在 HTTP 协议栈中引入安全层
鉴于 HTTP 的明文传输使得传输过程毫无安全性可言,且制约了网上购物、在线转账等一
系列场景应用,于是倒逼着我们要引入加密方案。
总的来说,安全层有两个主要的职责:对发起 HTTP 请求的数据进行加密操作和对接收到HTTP 的内容进行解密操作。
第一版:使用对称加密
最简单的方式是使用对称加密。所谓对称加密是指加密和解密都使用的是相同的密钥。
- 具体过程:
浏览器发送它所支持的加密套件列表和一个随机数 client-random,这里的加密套件是指加密的方法,加密套件列表就是指浏览器能支持多少种加密方法列表。
服务器会从加密套件列表中选取一个加密套件,然后还会生成一个随机数 service-random,并将service-random 和加密套件列表返回给浏览器。
最后浏览器和服务器分别返回确认消息。
service-random和service-random都通过明文传输。
第二版:使用非对称加密
和对称加密只有一个密钥不同,非对称加密算法有 A、B 两把密钥,如果你用 A 密钥来加密,那么只能使用 B 密钥来解密;反过来,如果你要 B 密钥来加密,那么只能用 A 密钥来解密。
公钥由明文传输,私钥只有服务器知道。
- 请求过程:
首先浏览器还是发送加密套件列表给服务器。
然后服务器会选择一个加密套件,不过和对称加密不同的是,使用非对称加密时服务器上需要有用于浏览器加密的公钥和服务器解密 HTTP 数据的私钥,由于公钥是给浏览器加密使用的,因此服务器会将加密套件和公钥一道发送给浏览器。
最后浏览器和服务器分别返回确认消息。 -
存在的问题:
第一个是非对称加密的效率太低。
第二个是无法保证服务器发送给浏览器的数据安全。第三版:对称加密和非对称加密搭配使用
基于以上两点原因,我们最终选择了一个更加完美的方案,那就是在传输数据阶段依然使用
对称加密,但是对称加密的密钥我们采用非对称加密来传输。下图就是改造后的版本:
- 改造后的请求过程:
首先浏览器向服务器发送对称加密套件列表、非对称加密套件列表和随机数 client-random;
服务器保存随机数 client-random,选择对称加密和非对称加密的套件,然后生成随机数 service-random,向浏览器发送选择的加密套件、service-random 和公钥;
浏览器保存公钥,并生成随机数 pre-master,然后利用公钥对 pre-master 加密,并向服务器发送加密后的数据;
最后服务器拿出自己的私钥,解密出 pre-master 数据,并返回确认消息。
pre-master 是经过公钥加密之后传输的,所以黑客无法获取到pre-master,这样黑客就无法生成密钥,也就保证了黑客无法破解传输过程中的数据了。
第四版:添加数字证书
通过对称和非对称混合方式,我们完美地实现了数据的加密传输。不过这种方式依然存在着问题,比如我要打开极客时间的官网,但是黑客通过 DNS 劫持将极客时间官网的 IP 地址替换成了黑客的 IP 地址,这样我访问的其实是黑客的服务器了,黑客就可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它完全不知道现在访问的是个黑客的站点。
对于浏览器来说,数字证书有两个作用:一个是通过数字证书向浏览器证明服务器的身份,另一个是数字证书里面包含了服务器公钥。
接下来我们看看含有数字证书的 HTTPS 的请求流程,你可以参考下图:
- 与上述有两点改变:
服务器没有直接返回公钥给浏览器,而是返回了数字证书,而公钥正是包含在数字证书中的;在浏览器端多了一个证书校验的操作,验证了证书之后,才继续后续操作。
数字证书的申请和验证
如何申请数字证书?
通常分为以下几步:
首先需要准备公钥和私钥然后向CA机构提供公钥、公司、站点等信息并等待认证,这个认证可能是收费的。CA通过线上、线下等多种渠道验证所提供的信息的真实性,如公司是否存在,企业是否合法,域名是否归属该企业等;如信息审核通过,CA会向该企业/组织签发认证的数字证书,包含站点的公钥、组织信息、CA的信息、有效时间、证书序列号等,这些信息都是明文的,同时包含一个CA生成的签名。
首先 CA 使用 Hash 函数来计算极客时间提交的明文信息,并得出信息摘要;然后 CA 再使用它的私钥对信息摘要进行加密,加密后的密文就是 CA 颁给极客时间的数字签名。
浏览器如何验证数字证书
首先浏览器读取证书中相关的明文信息,采用CA签名时相同的Hash函数来计算并得到信息摘要A;然后再利用对应CA的公钥解密签名数据,得到信息摘要B;对比信息摘要A和信息摘要B,如果一致,则是合法的;同时浏览器还会校验证书相关的域名信息、有效时间等信息。
这时候相当于验证了CA是谁,但是这个 CA 可能比较小众,浏览器不知道该不该信任它,然后浏览器会继续查找给这个 CA 颁发证书的 CA,再以同样的方式验证它上级 CA 的可靠性。通常情况下,操作系统中会内置信任的顶级 CA 的证书信息(包含公钥),如果这个 CA 链中没有找到浏览器内置的顶级的 CA,证书也会被判定非法。
此文章为5月Day2学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net