DTLS中的会话ID(OpenSSL)

时间:2011-05-29 10:48:50

标签: openssl dtls

我正在尝试使用OpenSSL实现DTLS服务器。我可以通过,但当客户端和服务器协商时,我注意到服务器上的session_id为空。

检查代码,更具体地说是ssl_sess.c,session_id_length明确地设置为零,注释引用RFC4507。

我的问题是,在协商连接时,我可以使用什么ID来唯一标识客户端?

我注意到在客户端,会话ID似乎是从票证中计算出来的,但这似乎不会发生在服务器上。

1 个答案:

答案 0 :(得分:4)

与使用任何基于数据报的应用程序相同。 Per RFC 4347(数据报传输层安全性):

  

请注意,与IPsec不同,DTLS记录   不包含任何关联   身份标识。申请必须   安排多路复用   关联。 使用UDP,这是   大概是用主机/端口号完成的。

(强调我的)


从您的评论中看起来,您实际上是在尝试维持“会话”(一个模糊但可能适用的描述符)的状态。跨“会话”维护状态是应用程序层问题。 (D)TLS是传输层(因此得名)。

严格地说,在(D)TLS上运行的应用程序需要有自己的“客户端ID”概念,它由客户端发送到服务器。有很多方法可以解决这个问题,具体取决于应用程序的性质和安全要求(用户名+密码当然是最常见的)。

另一种选择是使用客户端证书替代独立的应用程序层ID,但仍然需要应用程序层了解正在发生的事情并将客户端证书与永久状态信息相关联。令人讨厌的是,这需要为每个客户端管理单独的证书。这是足够繁重的,大多数人不采取这种方式。它确实具有优势,例如用户无法准确选择错误的密码或将其写在显示器上的便利贴上。另一方面,如果某人有权访问存储证书的文件,那么无论如何都是游戏。

当然,很多书都可以(而且频繁发生)写在安全和认证的主题上......