关于SSL protocols的法律lvl,有4种类型的消息:
完成握手并交换对称私钥后,客户端会将应用程序数据消息发送到服务器。
同样的服务器如何处理多个客户端,并且每个客户端都拥有自己的对称密钥。
服务器是否与所有客户端保持连接打开?如果不是,服务器如何知道用于传入连接的对称密钥? 应用程序数据协议是否提供某种会话ID,服务器可以使用它来映射到正确的密钥?
答案 0 :(得分:0)
服务器是否与所有客户端保持连接打开?
它可以,具体取决于服务器的实现方式。
服务器如何知道用于传入连接的对称密钥?
想象一下你有一个多人游戏。您的服务器代码通常如下所示:
sock = socket.listen(port)
clients = []
if sock.new_client_waiting:
new_client = sock.accept()
clients.append(new_client)
for client in clients:
if client.new_data_waiting:
data = client.read()
# handle incoming actions...
因此,如果有两个客户端,服务器将只知道这两个客户端并且两者都有套接字对象。你的答案就在于:操作系统(它的TCP堆栈)处理连接的概念,通过为你提供一个套接字,你可以从那个套接字读取/写入,你知道它来自哪个客户端(无论如何都要确定) )。
许多服务器的工作方式不同,例如Web服务器代码更像是这样:
sock = socket.listen(port)
while True: # infinitely loop...
client = sock.accept() # This call will block until a client is available
spawn_new_http_handler(client)
每当一个新人连接时,一个工作者线程会从那里拿起并管理事物。但是,它仍然有它的套接字可以读取和写入。
应用程序数据协议是否提供某种会话ID,服务器可以使用它来映射到正确的密钥?
我不清楚这些规格,但我很确定答案是不。会话恢复在握手阶段提前完成,适用于返回的客户端。例如。如果我在30分钟前连接到https://example.com并立即返回,它可能会有我的会话,我们不需要再次进行整个握手。它与告诉客户分开没有任何关系。