最近在面试中被问到了HTTP与HTTPS的一些问题,今天稍微学习了一下HTTP与HTTPS,在这里整理一下一些重要地方的理解。

参考文章

HTTP基础:
面试带你飞:这是一份全面的 计算机网络基础 总结攻略
计算机网络:这是一份全面& 详细 HTTP知识讲解
HTTP与HTTPS:
看图学HTTPS
你知道,HTTPS用的是对称加密还是非对称加密?
一分钟理解 HTTPS 到底解决了什么问题
主要对于证书与数字签名一些理解来自于这篇博客:
即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了

HTTP与HTTPS的区别

区别

对称加密与非对称加密

加密和解密用同一个秘钥的加密方式叫做对称加密。对于对称加密来说,服务器与客户端使用相同的加密方式,但是对于多个客户的系统来说,如果都采用同样的加密方式,那么一旦攻击者对于加密方式进行了破解,那么所有用户都将处于风险下。如果对不同用户使用不同方式进行加密,那么如果攻击者也对于加密方法进行拦截并破解,那么依然可能使用户暴露于安全风险下。

这时我们可以采用非对称加密的方法。 非对称加密会有一对秘钥:公钥和私钥公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的公钥都可以解开(当然是指和秘钥是一对的公钥)。 私钥只在服务器端且不公开,而公钥面向用户公开。这样,至少可以保证用户通过公钥加密的内容无法被攻击者破解(必须要拥有私钥才能解密)。

当然,这样依然会存在问题,公钥可能被中间人拿到篡改,偷偷换成他自己的公钥,这样客户使用假的公钥加密的内容将被中间人的私钥破解,然后肆意篡改。
示意图

公钥被掉包,是因为客户端无法分辨传回公钥的到底是中间人,还是服务器,这也是密码学中的身份验证问题。这样,我们就可以引入证书+数字签名的方法来解决这样的问题。

证书与数字签名

服务器可以通过第三方认证机构,可以让第三方机构对自己的公钥进行加密,然后将加密后的公钥发放给客户。那么,客户如何确定自己收到的第三方加密证书是真正的服务器发来的证书,而不是中间人自己通过向第三方机构申请获得的伪造证书呢?原来,在数字证书上还附有数字签名这一东西,用参考博客里的一句原话举例:

我们从现实中找灵感。比如你是HR,你手上拿到候选人的学历证书,证书上写了持证人,颁发机构,颁发时间等等,同时证书上,还写有一个最重要的:证书编号!我们怎么鉴别这张证书是的真伪呢?只要拿着这个证书编号上相关机构去查,如果证书上的持证人与现实的这个候选人一致,同时证书编号也能对应上,那么就说明这个证书是真实的。

现实中,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。并用公钥对证书上的内容进行解密,比对数字签名。由于数字签名这一东西是由服务端向第三方机构申请,并通过第三方机构私钥产生的,因此中间人不能伪造数字签名,以假装自己是真正的服务端,如果中间人使用了自己申请的伪造证书,那么在客户端对于证书内容解密后,会出现验证签名不匹配的情况,这样客户端就会提醒用户可能存在的安全风险了。

SSL与TLS

以下内容参考自:分分钟让你理解HTTPS

HTTPS是在通信接口部分用 TLS(Transport Layer Security 传输层安全性协议),TLS协议采用主从式架构模型,用于在两个应用程序间通过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。
图片

SSL和TLS的关系

传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。

网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。

IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与 RFC 6176 (2011年3月)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。

TLS/SSL 协议

HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

图片

SSL/TLS协议运行机制 可以看阮老师的SSL/TLS协议运行机制的概述

后话

由于使用了数字证书,加密解密这样的方法,导致HTTPS相比于普通的HTTP要慢得多,但是只有支持了 HTTPS,才能部署 HTTP/2,而 HTTP/2 协议会提升速度,能够有效减轻客户端和服务器端的压力,让响应更快速。这一点就要联系到HTTP不同版本之前的区别,以及HTTP的历史了。

HTTPS的整体实现过程
该图片中显示,服务端与客户端仍然使用公钥私钥,这部分实际上双方是通过对称加密生成的钥匙进行沟通的。由于非对称加密使用公钥私钥加密的计算量很大,消耗时间,所以事实上每一次对话,客户端和服务器端都生成一个”对话密钥“,用它来加密信息。由于”对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密”对话密钥”本身,这样就减少了加密运算的消耗时间。

如何理解呢,大致上就是说,我们把我们实际对话的对称加密密钥,用非对称加密的公钥加密一次,保证这个密钥的安全性,然后在实际对话中就可以放心的使用对称加密的密钥了。

评论