Https实际上是否使用传输层安全性

时间:2012-10-24 08:40:56

标签: https ssl

我对HTTPS有疑问。我的一位前辈告诉我,Https实际上并不使用SSL / TLS,而只使用加密算法。 他说,带有证书的握手过程是在传输层完成的,但实际有效负载的安全密钥加密是在Application层完成的。 他还说Https实际上可以被视为表示层协议。

他是对的吗?

3 个答案:

答案 0 :(得分:1)

RFC 2818中指定了HTTPS:“ HTTP Over TLS ”。

虽然规范是关于TLS(因为它是IETF规范,而IETF只使用“TLS”),但它实际上是关于SSL或TLS,具体取决于所使用的SSL / TLS的版本(参见difference between SSL and TLS

所以,是的,HTTPS确实使用SSL / TLS。正如RFC所说:

  

从概念上讲,HTTP / TLS非常简单。只需使用HTTP over TLS即可   正如您在TCP上使用HTTP一样。

基本上,加密密钥在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堆栈(请参阅comparison"layering considered harmful"),特别是当您将SSL / TLS投入其中时,这是精确设计的就应用层而言,它是一个不可见的层(SSL / TLS通常位于TCP之上,就像TCP之上的任何其他应用程序协议一样,但它位于它保护的任何应用程序协议之下)。

答案 1 :(得分:1)

你的大四学生应该是你的大三学生。他不知道他在说什么。将来要避开他。 HTTPS就是基于SSL的HTTP,只需添加少量主机名,以确保证书中的主机名与您连接的站点一致。

具体做法是:

  

我的一位前辈告诉我,Https实际上并没有使用SSL / TLS,只是他们的加密算法

错误。

  

他说使用证书的握手过程是在传输层完成的

SSL和HTTPS都错误。它由应用程序完成,通常在诸如OpenSSL或JSSE的库中完成。传输层仅执行TCP部分,而不执行SSL部分。

  

但实际有效负载的安全密钥加密是在应用层中完成的。

再次出错:在SSL和HTTPS的应用层中完成了有效负载加密。

  

他还说Https实际上可以被视为表示层协议。

这是一个应用层协议。表示层协议的例子很少(想到XDR和TN3270)。这不是其中之一。但我同意布鲁诺的观点。 OSI层不适用于具有自己的层模型的TCP / IP,并且,由于OSI协议工作的无效消失,它们也不适用于任何其他任何层。

答案 2 :(得分:0)

来自维基百科:

  

HTTP在OSI模型的最高层运行,即Application层;但是安全协议在较低的子层运行,在传输之前加密HTTP消息并在到达时解密消息。

https://en.wikipedia.org/wiki/Https#Network_layers