SSL 加密在哪里进行?

信息安全 加密 tls 网页浏览器 http
2021-08-26 21:35:50

我使用 Firebug 检查了 HTTPS 网站 (gmail.com) 的数据传输。但是我看不到对我提交的数据(用户名和密码)的任何加密。SSL 加密在哪里进行?

4个回答

SSL 协议被实现为围绕 HTTP 协议的透明包装器。OSI 模型而言,它有点灰色地带。它通常在应用层实现,但严格来说是在会话层。

可以这样想:

  1. 物理层(网线/wifi)
  2. 数据链路层(以太网)
  3. 网络层 (IPv4)
  4. 传输层 (TCP)
  5. 会话层 (SSL)
  6. 表示层(在这种情况下没有)
  7. 应用层 (HTTP)

请注意,SSL 位于 HTTP 和 TCP 之间。

如果您想查看它的实际效果,请使用Wireshark并通过 HTTP 浏览一个站点,然后通过 HTTPS 浏览另一个站点。您将看到您可以将 HTTP 版本上的请求和响应读取为纯文本,但不能读取 HTTPS 版本。您还可以从数据链路层向上查看数据包被拆分的层。

更新:有人指出(见评论)OSI 模型是一种过度概括,在这里不太适合。这是真实的。但是,使用此模型是为了证明 SSL 位于 TCP 和 HTTP 之间的“某处”。它并不严格准确,是对现实的模糊抽象。

使用 HTTPS,在 Web 浏览器和 Web 服务器之间进行加密。Firebug在浏览器本身上运行,因此它可以看到明文数据;退出浏览器时进行加密。

使用网络监控工具(例如Microsoft Network MonitorWireshark)观察加密流量。使用像Fiddler这样的中间人攻击产品来体验攻击者可以做什么(即:如果可以说服用户“忽略该死的浏览器警告”,则拦截连接并恢复数据是可行的关于不受信任的证书 - 所以不要忽略警告!)。

HTTPS 是基于 TLS 的 HTTP(或基于 SSL,这是TLS 先前版本的名称)。

SSL/TLS 配置正确时,通过可靠的传输(通常是 TCP)在两个通信应用程序(请参阅TLS 规范)之间提供隐私和数据完整性。

尽管 TLS 规范中没有提到 TCP 套接字,但 SSL 和 TLS 的设计目标是提供一个模型,该模型几乎可以像普通 TCP 套接字一样被应用程序程序员使用。除了一些边缘情况(例如,关闭套接字或者如果您希望您的应用程序知道重新协商),大多数情况下确实如此。SSL/TLS 堆栈通常提供包装器,使 SSL/TLS 套接字以与普通 TCP 套接字相同的方式可编程(一旦配置);例如 Java 的SSLSocketextends Socket

大多数应用程序依赖于现有的库来使用 SSL/TLS(例如 Java 中的 JSSE、SChannel、OpenSSL、Mozilla 的 NSS 库、OSX 的 CFNetwork,...)。只需对纯 TCP 代码(通常是证书和信任管理以及加密/密码套件设置(如果需要))进行少量修改,即可使用 SSL/TCP 套接字(或流,取决于 API 的类型)将纯文本交换为就应用而言。它是底层库,倾向于透明地进行加密工作。

当您查看浏览器的开发人员工具中的流量时,它就是在您看到的这些库之上交换的内容。要查看加密流量,您需要查看实际流量(例如使用 Wireshark)。

虽然所有的网络模型都不完美,但这个问题只能通过查看 SSL(TLS)的作用来回答。(1) 在可靠的网络流(OSI 第 4 层的 TCP)之上,它提供加​​密的双向流,并且(几乎总是)保证服务器和(可选)客户端的身份。身份验证客户端可以是进程、用户或其他可以正确回答所需身份验证挑战的实体。

TLS 表示传输层安全性。然而,由于它确实实现了会话身份、完整性、启动、拆除和管理,因此它非常属于会话层。维基百科页面声明这属于 OSI 表示层。这可能是错误的。表示层更关心将数据编组为不依赖网络的格式,并通过适当的应用程序在主机端对其进行解释。

静态加密(例如在数据库字段或电子邮件消息中)可能是表示层的候选者,但我建议它更接近于操作系统或应用程序安全性的一种形式。

因此,实际上 TLS 主要是会话层,因为它为传输 (TCP) 提供点对点会话安全性。在其他方面,它提供了明显是应用层(操作系统、实用程序或用户应用程序)的身份验证功能。

所以第 5 层很多,第 7 层很少。

祝你好运。