我对 HTTPS 有疑问。我的一位前辈告诉我,Https 实际上并没有使用 SSL/TLS,而只是使用了它们的加密算法。他说,证书的握手过程是在传输层完成的,但实际有效载荷的安全密钥加密是在应用层完成的。而且他还说Https其实可以看成是一种表示层协议。
他是对的吗?
HTTPS 在RFC 2818中指定:“ HTTP Over TLS ”。
尽管该规范是关于 TLS 的(因为它是 IETF 规范,而 IETF 只使用“TLS”),但它实际上是关于 SSL 或 TLS,这取决于所使用的 SSL/TLS 的版本(请参阅SSL 和 TLS 之间的区别)。
所以是的,HTTPS 确实使用 SSL/TLS。正如 RFC 所说:
从概念上讲,HTTP/TLS 非常简单。只需使用 HTTP over TLS,就像使用 HTTP over TCP 一样。
本质上,加密密钥是在 SSL/TLS 握手期间协商的,HTTP 交换不知道这些密钥。
如果您不相信,请使用 Wireshark 查看一些浏览器流量。您将看到的只是一些 SSL/TLS 流量(交换的 HTTP 被它加密)。
如果您想分析一些流量,您可以设置自己的服务器并使用其私钥查看使用 Wireshark 在 SSL/TLS 之上的正常 HTTP 交换,如Wireshark SSL页面中所述。(您需要禁用 EDH 密码套件,因为它们提供完美的前向保密性,即使您拥有服务器私钥,也可以防止您破译嗅探到的流量。)此页面还有一些示例 HTTPS 数据,您可以下载并查看Wireshark,无需安装自己的服务器。
从浏览器的角度来看,您还可以在使用 HTTPS 时查看开发人员工具(Firebug 等)报告的流量,您只会看到普通的 HTTP 流量,因为 SSL/TLS 层由下面的 SSL/TLS 库。
一般来说,我不会对 OSI 层过分强调。它们在理论上的网络类中看起来不错,但实际上很难应用于 TCP/IP 堆栈(参见比较和“被认为有害的分层”),尤其是当您将 SSL/TLS 投入其中时,它被精确设计为不可见就应用层而言(SSL/TLS 通常位于 TCP 之上,就像 TCP 之上的任何其他应用程序协议一样,但它位于它所保护的任何应用程序协议之下)。
你的上级应该是你的下级。他不知道他在说什么。以后远离他。HTTPS 只是基于 SSL 的 HTTP,只添加了少量主机名检查以确保证书中的主机名与您连接的站点一致。
具体来说:
我的一位前辈告诉我,Https 实际上并没有使用 SSL/TLS,而只是他们的加密算法
错误的。
他说证书的握手过程是在传输层完成的
SSL 和 HTTPS 都是错误的。它由应用程序完成,通常在 OpenSSL 或 JSSE 等库中。传输层只做 TCP 部分,不做 SSL 部分。
但实际有效载荷的安全密钥加密是在应用层完成的。
又错了:有效载荷加密是在 SSL 和 HTTPS 的应用层中完成的。
而且他还说Https其实可以看成是一种表示层协议。
它是一个应用层协议。表示层协议的示例很少(想到 XDR 和 TN3270)。这不是其中之一。但我同意布鲁诺的观点。OSI 层不适用于 TCP/IP,它有自己的层模型,而且,由于 OSI 协议工作的彻底消亡,它们也不适用于其他任何东西。
来自维基百科:
HTTP 运行在 OSI 模型的最高层,即应用层;但是安全协议在较低的子层运行,在传输之前加密 HTTP 消息并在到达时解密消息。