目录
1.与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源
HTTPS = HTTP+ 加密 + 认证 + 完整性保护
-
HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 协议代替而已;
-
通常, HTTP 直接和 TCP 通信。 当使用 SSL时, 则演变成先和 SSL通信, 再由 SSL和 TCP 通信了。
- 简言之, 所谓HTTPS, 其实就是身披SSL协议这层外壳的 HTTP。在采用 SSL后, HTTP 就拥有了 HTTPS 的加密、 证书和完整性保护这些功能。
混合加密机制
- HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 若密钥能够实现安全交换, 那么有可能会考虑仅使用公开密钥加密来通信。 但是公开密钥加密与共享密钥加密相比, 其处理速度要慢。
- 所以应充分利用两者各自的优势, 将多种方法组合起来用于通信:在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式。
- 详细流程可以看下郭神的这篇博客: blog.youkuaiyun.com/guolin_blog/article/details/104546558
通信过程 (包含SSL的四次握手)
先看一下HTTPS的通信步骤,如下图:
1. SSL四次握手建立连接
一次握手:
- 步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。 报文中包含客户端支持的 SSL的指定版本、 加密组件(Cipher Suite) 列表(所使用的加密算法及密钥长度等) 。
二次握手:
- 步骤 2: 服务器可进行 SSL通信时, 会以 Server Hello 报文作为应答。 和客户端一样, 在报文中包含 SSL版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
- 步骤 3: 之后服务器发送 Certificate 报文。 报文中包含公开密钥证书。
- 步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL握手协商部分结束。
三次握手:
- 步骤 5: 客户端以 Client Key Exchange 报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。 该报文已用步骤 3 中的公开密钥进行加密。
- 步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。 该报文会提示服务器, 在此报文之后的通信会采用Pre-master secret 密钥加密。
- 步骤 7: 客户端发送 Finished 报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准。
四次握手:
- 步骤 8: 服务器同样发送 Change Cipher Spec 报文。
- 步骤 9: 服务器同样发送 Finished 报文。
总的来说,SSL会话的建立完成了以下几个工作:
- 交换协议版本号,选择一个通信双方都支持的加密方式;对两端实现身份验证;密钥交换。
2. SSL连接完成后,建立TCP连接,发送HTTP请求
- 步骤 10: 服务器和客户端的 Finished 报文交换完毕之后, SSL连接就算建立完成,通信会受到 SSL的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP 请求。
- 步骤 11: 应用层协议通信, 即发送 HTTP 响应。
3. 通信完成后断开连接
- 步骤 12: 最后由客户端断开连接。 断开连接时, 发送 close_notify 报文。 上图做了一些省略, 这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。
在以上流程中, 应用层发送数据时会附加一种叫做 MAC(Message Authentication Code) 的报文摘要。 MAC 能够查知报文是否遭到篡改, 从而保护报文的完整性。
SSL会变慢吗?
通过上面的SSL四次握手我们可以知道,答案是肯定的,SSL的慢分两种:
1. 通信慢
- 和使用 HTTP 相比, 网络负载可能会变慢 2 到 100 倍。 除去和TCP 连接、 发送 HTTP 请求 • 响应以外, 还必须进行 SSL通信,因此整体上处理通信量不可避免会增加;
2. 处理速度慢
- 由于SSL必须进行加密处理,要大量消耗CPU 及内存等资源, 导致处理速度变慢。在服务器和客户端都需要进行加密和解密的运算处理。 因此从结果上讲, 比起 HTTP 会更多地消耗服务器和客户端的硬件资源, 导致负载增强。
HTTPS 安全又可靠, 为何不一直使用?
1.与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源
- 如果每次通信都加密, 会消耗相当多的资源, 平摊到一台计算机上时, 能够处理的请求数量必定也会随之减少。因此, 如果是非敏感信息则使用 HTTP 通信, 只有在包含个人信息等敏感数据时, 才利用 HTTPS 加密通信。特别是每当那些访问量较多的 Web 网站在进行加密处理时, 它们所承担着的负载不容小觑。 在进行加密处理时, 并非对所有内容都进行加密处理, 而是仅在那些需要信息隐藏时才会加密, 以节约资源。
2. 节约购买证书的开销
- 要进行 HTTPS 通信, 证书是必不可少的。 而使用的证书必须向认证机构(CA) 购买。 那些购买证书并不合算的服务以及一些个人网站,可能只会选择采用 HTTP 的通信方式。