security - DTLS 是否需要 session 超时?

标签 security ssl networking dtls coap

我正在尝试找出数据使用效率最高的方法来保护我们的 CoAP API。 DTLS 似乎是正确的方法,但是看看握手需要多少数据(并做出一些不知情的假设需要多久发生一次)似乎带有 X.509 证书的 DTLS 使 CoAP 的实际数据使用相形见绌本身。

最明显的解决方案是只使用在工厂编程的对称 key ,但我认为我不喜欢强加的安全风险。据我所知,除了在所有设备上手动安装新 key 外,没有办法从服务器端入侵中恢复。

我正在考虑提出的解决方案基本上是两者的混合,使用安全 CA 分发设备,让设备进行标准握手并建立“临时”对称 key 。然后,为了节省设备的带宽,我将该 key ( session ?)存储在数据库中,以便设备一次持续数月或数年,但如果我们发现任何 key 已经泄露,它仍然能够使 key 过期。

我知道我可以只使用标准 session 恢复握手来恢复 session ,但我不确定是否需要这样做,因为 DTLS 是无连接的,我可以假装“连接”始终打开。如果我可以避免重复握手,那将降低数据消耗,并可能在一定程度上降低服务器负载。

我不知道的事情是:DTLS 是否定义了 session 可以保持打开状态的时间限制?或者是否有超时,在一段时间不活动后必须删除 session ?如果没有,DTLS 的实现是否自己定义了一个?

关于为什么这行不通,还有什么我可能忽略的吗?或者有没有我没有想到的更直接的东西?

最佳答案

超时是特定于应用程序的,您可以根据需要将它们设置得尽可能高,或者尽可能长时间地保持连接(例如,使用固定数量的可用连接,在出现新连接时超时最近最少使用的连接)一个打开了)。

只要双方同意恢复数据仍然有效(例如,没有基础证书已过期), session 恢复数据就可以保留。 session 恢复应该至少与手动安装的对称 key 一样便宜。

因此,一个明智的方法似乎是,如果发送方仍然打开 session ,则尝试继续 session ,如果出现错误,则返回 session 恢复,如果这不起作用,则再次进行完整的握手。这些都不一定需要商定时间。

关于security - DTLS 是否需要 session 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34726133/

相关文章:

java - 如何在Android SQLite数据库中使用SQLCipher或任何加解密技术

java - 将具有多个证书的 pem 转换为 java keystore

c# - Network Down 上的 TcpClient 连接状态问题

c++ - 通过 UDP 发送结构而不进行序列化

security - 尽管已设置 header ,但仍不允许 CORS 请求

windows - 如何授予帐户访问证书的权限?

security - OpenID Connect - 在这种情况下是否应该将 id token 发送到 protected 资源?

ssl - git 不能完全使用自签名证书

mysql - 将 SSL 证书添加到 mysql docker 容器

c# - 测试 UNC 路径的 "Accessability"