SSL / TLS在TCP层上运行。假设在SSL / TLS会话关闭之前终止TCP连接。 SSL / TLS如何了解这一点?
答案 0 :(得分:1)
TLS会话主要独立于底层TCP连接。
例如,您可以使用相同的TLS会话进行多个TCP连接,这些连接即使并行也可以共存。这实际上是在实践中使用,例如使用Web浏览器。甚至在FTPS的一些实现中需要控制和数据连接(不同的TCP连接)预期(重新)使用相同的TLS会话。请注意,会话不会简单地继续在另一个TCP连接中继续 - 仍然需要一个TLS握手来启动会话的“继续”,但只是一个缩写的握手。
类似的情况下,您可以在单个TCP连接中进行多个TLS会话,但只能在彼此之后:启动一个TLS会话,关闭它,启动下一个等等。虽然这不常用,但实际上TLS会话确实并不罕见仅在传输了一些纯文本数据(SMTP中为STARTTLS
,FTPS中为AUTH TLS
)或TLS关闭后才开始,然后更多数据以普通(FTPS中的CCC
)传输。 / p>
SSL / TLS如何了解这一点?
具体细节取决于TLS堆栈和此堆栈提供的API。但通常如果底层TCP连接关闭,则会以某种方式向TLS堆栈发出信号。例如,对于OpenSSL,SSL_read
将返回等于或小于0的值,您需要调用SSL_get_error
以获取有关所发生事件的更多详细信息。而且,TCP关闭不会隐式地使TLS会话无效。
答案 1 :(得分:0)
SSL / TLS在TCP层上运行。
正确。
假设在SSL / TLS会话关闭之前终止TCP连接。
然后(a)TCP连接已经结束,(b)SSL / TLS会话仍然存在。
SSL / TLS如何了解这一点?
它不需要知道这一点。它只需要知道TCP连接的结束,这是由TLS close_notify
消息发出的信号,以及会话结束时发生的,当它失效时。 TLS会话可以比TCP连接长,而反之亦然。
答案 2 :(得分:-1)
SSL / TLS使用心跳协议来检查连接是否仍然存在。因此,对于心跳请求,关闭的连接将响应否定。因此,SSL / TLS将知道TCP连接已关闭。