我对HTTPS有疑问。我的一位前辈告诉我,Https实际上并不使用SSL / TLS,而只使用加密算法。 他说,带有证书的握手过程是在传输层完成的,但实际有效负载的安全密钥加密是在Application层完成的。 他还说Https实际上可以被视为表示层协议。
他是对的吗?
答案 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消息并在到达时解密消息。