Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DTLS中的会话ID(OpenSSL)_Openssl_Dtls - Fatal编程技术网

DTLS中的会话ID(OpenSSL)

DTLS中的会话ID(OpenSSL),openssl,dtls,Openssl,Dtls,我正在尝试使用OpenSSL实现DTLS服务器。我可以通过获取应用程序数据,但当客户端和服务器协商后,我注意到服务器上的会话id为空 检查代码,更具体地说是ssl_sess.c,session_id_length显式设置为零,注释参考RFC4507 我的问题是,在协商连接时,我可以使用什么ID来唯一标识客户机 我注意到,在客户端,会话id似乎是从票据中计算出来的,但在服务器上似乎不是这样 与任何基于数据报的应用程序相同。Per(数据报传输层安全性): 请注意,与IPsec不同,DTLS记录 不包

我正在尝试使用OpenSSL实现DTLS服务器。我可以通过获取应用程序数据,但当客户端和服务器协商后,我注意到服务器上的会话id为空

检查代码,更具体地说是ssl_sess.c,session_id_length显式设置为零,注释参考RFC4507

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


我注意到,在客户端,会话id似乎是从票据中计算出来的,但在服务器上似乎不是这样

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

请注意,与IPsec不同,DTLS记录 不包含任何关联 标识符。申请必须 安排在多个 协会对于UDP,这是 大概是用主机/端口号完成的。

(强调矿山)


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

严格来说,在(D)TLS上运行的应用程序需要有自己的“客户机ID”概念,该ID由客户机发送到服务器。根据应用程序的性质和安全性要求(用户名+密码当然是最常见的),有无数种方法可以解决这个问题

另一种选择是使用客户端证书代替独立的应用程序层ID,但这仍然需要应用程序层了解正在发生的事情,并将客户端证书与永久状态信息关联起来。令人烦恼的是,这需要为每个客户端管理一个单独的证书。这是相当沉重的负担,大多数人不走这条路。它确实有一些优点,例如,用户不能准确地选择一个错误的密码或将其写在显示器上的便笺上。另一方面,如果有人访问了证书存储的文件,游戏就结束了


当然,很多关于安全性和身份验证的书都可以(而且已经非常频繁地)写…

谢谢你的回答!如果客户端更改了IP地址和/或源端口,则无法判断该客户端以前是否已连接?我想要的是能够为每个唯一的客户机提供一个状态(DTLS之外),当客户机返回时,我希望能够查看该状态。@Fredrik:我想我知道你现在挂断的地方了。检查我的最新答案。谢谢,我想我有点含糊不清。不管身份验证如何,如果我有一个会话ID,我会希望在一次简短的握手后会话ID是相同的。现在,据我所知,如果客户端进行了一次简短的握手,我就无法查找旧会话数据。使用会话ID,我可以在会话ID上键入应用程序数据并进行查找。如果你能证明我错了,你救了我一天!