HTTPS笔记

摘自维基百科

超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在 1994 年首次提出,随后扩展到互联网上。

为什么需要HTTPS

HTTP传输面临的风险有:

  1. 窃听风险:黑客可以获知通信内容。
  2. 篡改风险:黑客可以修改通信内容。
  3. 冒充风险:黑客可以冒充他人身份参与通信。

SSL/TSL

如上图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

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。

加密算法

对称加密

有流式、分组两种,加密和解密都是使用的同一个密钥。

例如:DES、AES-GCM、ChaCha20-Poly1305等

非对称加密

加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

例如:RSA、DSA、ECDSA、 DH、ECDHE

协议设计演变过程

按照上面讲的三个HTTP的传输风险,先来解决第一个问题,然后再去想办法解决第二个问题

注:这是经过我个人理解后的想法,并不是真实的标准。

不完全解决窃听风险

如果我们单纯的使用对称加密算法,按照上图来简单的设计。来加密协议的数据,是不能做到防窃听的,因为第四步中间人是可以接收到服务器公钥,那么服务器发来的数据中间人就可以解密。

而且非对称加密性能较低,在大量数据的传输情况下,这种情况是不理想的,那么这两个问题如何解决?

答案是协议”握手”阶段使用非对称加密加密,之后使用对称加密来加密数据。

  1. 客户端给服务端发送请求
  2. 服务端返回客户端自己的公钥
  3. 客户端产生本次对话的对称密钥 SK,并用公钥 进行加密得到 SK后传给服务端
  4. 服务端收到 SK后用自己的私钥解密得到 SK;若成功,则返回客户端 OK,否则终止对话
  5. 接下来,客户端和服务端的对话均用 SK 加密后传输。

注:这只是一种广泛应用的加密方式,DH加密方式详细可以了解完全吃透 TLS/SSL

解决窃听、篡改、冒充风险

在 HTTPS 的握手阶段,一端向对端发送请求,对端返回自己的公钥;而一端未验证对方的身份和公钥,直接协商密钥。“中间人”看到了这个漏洞,夹在中间截获了对端的公钥,替换成了自己的公钥。正是这步“拿错了公钥”或者说“信错了对端”,使得 HTTPS 为加密(密钥协商的非对称加密和通信数据的对称加密)所做的努力全部泡汤。

这个时候就第三方权威认证机构来证明”服务器”是”可信”的。

那么如何证明服务器是可信的呢?

Mehr lesen