我正在尝试使用OpenSSL实现DTLS服务器.我可以通过,但当客户端和服务器协商时,我注意到服务器上的session_id为空.
检查代码,更具体地说是ssl_sess.c,session_id_length被明确设置为零,注释引用RFC4507.
我的问题是,在协商连接时,我可以使用什么ID来唯一标识客户端?
我注意到在客户端,会话ID似乎是从票证计算出来的,但这似乎不会在服务器上发生.
与任何基于数据报的应用程序相同。根据RFC 4347(数据报传输层安全):
请注意,与 IPsec 不同,DTLS 记录不包含任何关联标识符。应用程序必须安排在关联之间进行多路复用。 对于 UDP,这可能是通过主机/端口号完成的。
(强调我的)
从您的评论来看,您似乎实际上是在尝试跨“会话”(一个模糊但可能适用的描述符)维护状态。跨“会话”维护状态是一个应用程序层问题。(D)TLS 是传输层(因此得名)。
严格来说,通过 (D)TLS 运行的应用程序需要有自己的“客户端 ID”概念,该 ID 由客户端发送到服务器。有无数种方法可以处理这个问题,具体取决于应用程序的性质和安全要求(当然,用户名+密码是最常见的)。
另一种选择是使用客户端证书来替代独立的应用程序层 ID,但这仍然需要应用程序层了解正在发生的情况并将客户端的证书与永久状态信息相关联。令人烦恼的是,这需要为每个客户端管理单独的证书。这实在是太麻烦了,以至于大多数人都不会走这条路。它确实有优点,例如,用户无法准确选择错误的密码或将其写在显示器上的便签上。另一方面,如果有人可以访问存储证书的文件,那么游戏就结束了。
当然,许多书籍可以(并且已经非常频繁地)撰写关于安全和身份验证主题的书籍......
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |