2011-01-16 117 views
3

HTTP是一种应用程序协议,可以在不影响HTTP应用程序(性能除外)的情况下关闭并重新打开底层TCP连接。
通过使用HTTP1.1,我们使用持久连接,但服务器或客户端仍然可以在任何时候关闭连接。
对于安全性,HTTP通过SSL/TLS使用TCP。
我的理解是,SSL的行为很像一个应用程序,至少这是TCP如何“查看”SSL。
我的问题是,如果基础TCP套接字在安全连接建立后的某一点关闭,这是否意味着SSL会话失效,各方应该重新开始ssl握手?
或者底层的TCP连接与TLS会话无关?http持久连接和ssl会话

谢谢!

回答

3

这是否意味着SSL会话失效,各方应该重新开始ssl握手?

是的,SSL/TLS会话结束并且握手必须重新建立。 TLS包含恢复会话的机制(仍然会执行一些操作,但少于完全握手),但并非所有应用程序都支持它。

请参阅http://ietf.org/rfc/rfc2246.txt,F.1.4关于恢复的技术细节。

+0

@Eugene:在握手之后,由于已经交换了安全细节(算法等),所以SSL对等部分具有建立安全通道(加密/解密)所需的信息。这部分据我所知,似乎与底层无关TCP连接,它获得加密块并通过套接字传输它们。如何关闭tcp连接,使之前同意的SSL方(客户端/服务器)的安全细节无效?这部分我不明白。请您详细说明一下吗? – Cratylus

+0

@ user384706从技术角度来看,SSL/TLS不关心连接,可以通过UDP使用(UDP使用TLS的修改,名为DTLS),命名管道,鸽子邮件等(我们曾经实现过它通过基于消息的通信信道)。但是,人们一致认为,为防止底层通道的某些攻击断开,SSL连接也会自动失效。一般来说,如果您同时实现通信的客户端和服务器端,并且您也控制SSL功能(例如使用我们的组件时),则不会强制您执行此操作。 –

+0

@Eugene:那么认为TLS会议无效的最佳做法是?它不是由任何RFC强制规定的,也不是由TLS RFC暗示的,对吗? – Cratylus

2

http://publib.boulder.ibm.com/httpserv/ihsdiag/ihs_performance.html#SSL

SSL会话是用于安全通信的客户端和Web服务器之间的逻辑连接。在建立SSL会话期间,使用公钥密码术来在客户端和服务器之间交换共享的秘密主密钥,并确定通信的其他特征,例如密码。随后使用在SSL握手期间创建的共享密钥,通过对称密钥加密对会话后面的数据传输进行加密和解密。

共享密钥的生成非常占用CPU资源。为了避免为每个TCP连接生成共享密钥,可以为多个连接重用相同的SSL会话。客户端必须请求在后续握手中重复使用相同的SSL会话,并且服务器必须缓存SSL会话标识符。满足这些要求时,后续TCP连接的握手需要的服务器CPU要少得多(在某些测试中,要少80%)。通常使用的所有Web浏览器都能够重用相同的SSL会话。但是,自定义Web客户端有时不具备必要的支持。