计网-HTTPS

本文最后更新于:14 天前

⚡什么是HTTPS?

HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer): 一般理解为 HTTP+SSL/TLS = HTTPS,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密

SSL:Secure Socket Layer,安全套接字层

TLS(Transport Layer Security,传输层安全): 其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0) 由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本.SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到.TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是 TLS 1.1、TLS 1.2

⚡浏览器在使用 HTTPS 传输数据的流程是什么? (六点)

  1. 首先客户端通过 URL 访问服务器建立 SSL 连接,客户端会将生成一个随机数(client random),以及客户端支持的加密方法发送给服务端

  2. 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含服务端的公钥)还有一个随机数(server random)传送一份给客户端

  3. 客户端的服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级

  4. 客户端的浏览器根据双方同意的安全等级,生新成一个随机数(Premaster secret),然后利用服务端的公钥将生成的新随机数加密,并传送给服务端

  5. 服务器利用自己的私钥解密得到新随机数(Premaster secret),用(client random,server random,Premaster secret)生成对话密钥(session key)

  6. 服务器利用会话密钥加密与客户端之间的通信

⚡为什么要用https? (三点)

  1. 参数明文传输,不安全

  2. 数据的完整性未校验,容易被篡改

  3. 没有验证对方身份,存在冒充危险

⚡HTTPS 的缺点?(三点)

  1. HTTPS 协议多次握手,导致页面的加载时间延长近50%

  2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗

  3. SSL 涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大

⚡HTTPS 和 HTTP 的区别?(三点)

  1. HTTPS 是 HTTP 协议的安全版本,HTTP 协议的数据传输是明文的,是不安全的,HTTPS 使用了 SSL/TLS 协议进行了加密处理

  2. HTTP 和 HTTPS 使用连接方式不同,默认端口也不一样,HTTP 是80,HTTPS 是443

  3. HTTP 属于应用层, HTTPS 由于加了 SSL,是应用层和传输层的结合

⚡对称加密和非对称加密?

加密和解密同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密

共享加密方式加密时必须将密钥也发给对方

在互联网上转发密钥时,如果通信被监听那么密钥就会落入攻击者之手,同时也就失去了加密的意义

公开密钥加密方式很好地解决了共享密钥加密的困难:

公开密钥加密使用一对非对称的密钥:一把叫做私有密钥,另一把叫做公开密钥

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密

利用这种方式,不需要发送用来解密的私有密钥,也不用担心密钥被攻击者窃听而盗走

HTTPS采用共享秘钥加密和公开秘钥加密两者并用的混合加密机制

若密钥能够实现安全交换,那么有可能会考虑仅适用公开密钥加密来通信

但是公开密钥加密和共享密钥加密相比,处理速度要慢

公开密钥加密方式还是存在一些问题的,那就是无法证明公开密钥本身就是货真价实的公开密钥

例如当服务器发送公钥时被截取,然后替换了公钥,那么就会出现问题,所以解决办法是:数字证书认证机构 CA 颁发的公开密钥证书 [1]

⚡为什么 HTTPS 要同时使用对称加密和非对称加密两种加密方式的混合模式?

因为对称加密速度比较快,但是对称加密无法保证加密密钥的安全传输,所以使用非对称密钥来将生成的对称密钥安全传输到双方,此后使用更快的对称加密密钥。

⚡为什么对称加密速度比较快?

对称加密主要的运算是位运算,速度是非常快的,例如 DES 算法(置换,位移,异或,迭代)。如果使用硬件速度会更快。

非对称加密计算一般都比较复杂,例如 RSA,它里面涉及到大数乘法、大数取模运算等等。

而幂运算的本质是乘法,乘法的基础单位是加法,也就是我们最常见的整数加。而在电路上实现加法比异或(XOR)要麻烦的多,况且后面还有一个模运算。因此非对称加密的速度自然而然是比不过对称加密的。

另外还有一个原因是,某些对称加密算法,例如 DES 算法中有些模式,如 ECB 模式等等,中间计算过程是可以并行计算的,更进一步提高加密解密的速度。

⚡如何保证 server 的公钥传到客户端时不被篡改呢?

答: 1. 可信的第三方 CA 机构 2. 非对称加密

HTTPS 中 RSA 非对称加密的两种模式:

  1. 加密模式,保证数据传输方的数据安全性(不可被其他人读)

    加密模式:私钥解密,公钥加密

  2. 认证模式,保证数据接受方的数据完整性(不可被其他人篡改)

    认证模式: 私钥签名(加密),公钥认证(解密)

CA 机构使用 CA 自己的私钥对 server 的公钥和 server 的一些信息统一加密/签名是,生成数字证书.

当 client 请求 server 时,server 将信息正文,有信息正文生成的数字签名[2]和数字证书[1:1]一起发送给 client.

这样,client 在接收时会根据浏览器内置的受信任的 CA 机构列表判断发来的签发证书的机构是否有效,如果有效,那么使用对应 CA 机构内置的 CA 的公钥解密/认证 CA 发送的证书,从中得到 server 的公钥,并且,使用 server 的公钥解密/认证数字签名,如果得到的结果和信息正文散列后的摘要一致,那么说明 server 的公钥是安全的,且信息正文没有被篡改.

因为,1. 如果 server 向 client 发送的信息中,server 的公钥被恶意第三方篡改,但是第三方无法拿到 CA 的私钥对数字证书重新加密认证;2. 而如果使用第三方自己的私钥加密认证,client 会提示这是不受信任的机构;3. 如果是只修改了信息正文,那么数字签名会不对应;4. 如果修改了信息正文并想重新生成对应的数字签名也是不可能的,因为加密摘要要使用 server 的私钥,第三方拿不到

  • 如果只是 server 自己签发数字签名和公钥以及信息正文,没有第三方 CA 机构:

    server 的公钥散列生成摘要,并使用自己的公钥对公钥和 server 的一些信息统一加密/认证,生成数字证书发送给 client

    但是中途还是有可能被第三方拦截,如果替换了 server 公钥还是无法察觉

  • 如果只是颁发数字证书,没有数字签名,信息正文可能会被篡改


  1. 数字证书: 信任的 CA 机构颁发,证书 = CA 使用自己的 CA 私钥加密/认证 server 的公钥以及一些 server 的其他信息后的结果 ↩︎ ↩︎

  2. 数字签名: 将信息散列[3]生成摘要[4],并使用自己的私钥对摘要加密,即生成数字签名 ↩︎

  3. 散列: 散列不同于加密,散列即不可逆 ↩︎

  4. 例如使用 MD5 算法将一个原值生成散列值,而这个散列值不可反推回原来的值 ↩︎