问题标签 [dtls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 充气城堡给出未知的哈希算法
我正在尝试使用充气城堡DTLS Handshake
。
我已经按照这个链接生成了密钥。我正在通过扩展 DefaultTlsClient 来工作。它可以生成client_hello包。但是当 server_hello 数据包到达时,它给出了org.bouncycastle.crypto.tls.TlsFatalAlert: internal_error(80)
Caused by: java.lang.IllegalArgumentException: unknown HashAlgorithm
。任何人都可以给出任何提示吗?
更新:
来自 Wireshark:在证书请求中,有 9 个签名哈希算法。其中之一是rsa_pss_sha256(0x0804)
。在public static Digest createHash(short hashAlgorithm)
函数中TlsUtils.java
没有匹配它。这就是它给出未知哈希算法的原因。这意味着什么?使用 Bouncy Castle,是否可以与该服务器建立 DTLS?
这是加载密钥库的代码:
生成私钥和证书:
开始 DTLS 握手:
错误:
java - DTLS 状态共享
我有一个使用 DTLS 与
具有某种安全分布式存储的客户端通信的集群(...)
正如我们所知,DTLS 状态相当长。因此,在典型的负载平衡场景中,加密的数据包将被转发到无法解密的服务器
我不是指由于 NAT 绑定更改而导致 src ip 发生更改的情况(这是我们无法控制的)
所以我在想......
为了不对负载均衡器产生一些严重的限制(比如:总是将此 src ip 转发到该服务器并希望最好)并尽可能长时间地保持 DTLS 状态我应该如何使用DTLS?
是否(甚至)值得考虑使用一些 DTLS 会话参数的分布式缓存来扩展一些现有的 DTLS 库(如scandium)(以便任何节点都能够解密数据包)?
JDK>=9 是否可行(那里很难遵循 ssl 代码...)
security - CoAP 的 TinyDTLS 问题
我希望研究物联网中的安全协议以及它如何影响受限设备的性能。我的目标是使用 Cooja 模拟器比较 CoAP 与 CoAP(使用 DTLS 保护)。
我发现了 Contiki 3.0 的这个分支 https://github.com/rfuentess/contiki/tree/Contiki-CoAPS
在 contiki/examples/ipv6/CoAP-IDS/IPv6_HC06_TinyDTLS 文件夹中,有一个 CoAPs 客户端和服务器示例,使用诸如 TinyDTLS 0.8.2 之类的应用程序以及对 erbium-coap 的修改重命名为 er-coaps(带有 DTLS 序言)。
在 Cooja 中运行示例之前,我在应用程序文件夹中配置 tinydtls,启动命令 ./configure --with-contiki --without-ecc使用 PSK_WITH_AES_128_CCM 模式)
之后我在 Cooja 中部署了 3 个 wismote 节点:
1 6LoWPAN 边界路由器刷入固件 (contiki/examples/ipv6/rpl-border-router/border-router.c)
1 个 CoAPS 客户端使用固件刷新 (contiki/examples/ipv6/CoAP-IDS/IPv6_HC06_TinyDTLS/coaps-client.c)
1 台 CoAPS 服务器用固件刷新 (contiki/examples/ipv6/CoAP-IDS/IPv6_HC06_TinyDTLS/coaps-server.c)
我面临两个问题:
1)为什么客户端向服务器打招呼时会有几次重传试探性(在第二个10)(见下面的mote输出附件)?
2)查看客户端代码(contiki/examples/ipv6/CoAP-IDS/IPv6_HC06_TinyDTLS/coaps-client.c),该示例应该检索几个 CoAP 资源,但它在尝试检索第一个资源时卡住了(.well -已知/核心)。似乎程序在 COAP_BLOCKING_REQUEST() 期间冻结,并且不会继续检索其他资源。为什么?
我附上了微尘输出和 PCAP 文件。
谢谢
c++ - 如何在 DTLS 中检测收到的消息?
我在 C、C++ 上为 CoAP 实现 DTLS 协议。如我所见,我可以使用 OpenSSL 或 WolfSSL。例如 WolfSSL:
https://github.com/wolfSSL/wolfssl-examples/blob/master/dtls/client-dtls-nonblocking.c
但是我怎样才能检测到某些消息已发送给我呢?
dart - 在 Dart 中使用 DTLS
我正在开发一个需要使用 DTLS 进行通信的 Flutter 应用程序。据我所知,目前 Dart API 中不支持 DTLS,只有 TLS。
谁能推荐我能做什么?也许只是关于如何让 Flutter 应用程序在 DTLS 中通信的高级步骤?关于我应该注意什么的任何提示?
谢谢!
android - RCConnection 错误:setSDP 错误:无法设置远程提供 sip:使用没有 DTLS 指纹的 SDP 调用
我正在使用 Restcomm 的 Android SDK 并尝试将其配置到我们的服务器,但收到以下错误:
但是当我改回 Restcomm 服务器时,它工作正常。
我曾尝试在 Google 和 Git 上搜索它,但那里提供的解决方案没有帮助。知道如何解决这个问题(请详细解释,因为我是 WebRTC 的新手)?
编辑:
如果我从手机呼叫网络或从网络呼叫网络,它工作正常。仅当手机尝试接听电话时才会出现此问题。
c# - C# DTLS 实现(服务器/客户端)
我正在尝试让 dtls 在 c# 中工作。我发现有一个 bouncycastle c# 实现,但是,似乎没有任何关于如何使用它的文档或示例。
我查看了源代码管理中的测试应用程序,但看不到您在何处以及如何指定服务器可以侦听的端口。
有没有人有一些工作示例显示如何设置服务器以侦听特定端口?
非常感激!
dtls - 带有 SHA 的 DTLS AES 256 CBC,我如何计算最终加密的握手消息
我试图了解最终的加密握手消息是如何工作的
为此,我试图确保我的算法给出与此示例相同的结果:
https://www.cloudshark.org/captures/56acf0481a79
由于 0xFEFF 标头,我很确定 DTLS 1.0 遵循 RFC 4347。
已知的是
我正在执行以下步骤:
预大师秘密
premaster secret 的形成如下:如果 PSK 的长度为 N 个八位字节,则连接一个值为 N 的 uint16、N 个零八位字节、一个值为 N 的第二个 uint16 以及 PSK 本身。(RFC 4279 第 2 节)
master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random) [0..47];
PRF 被定义为结合两个不同的散列函数。RFC 2246 的第 5 节:
key_block = PRF(SecurityParameters.master_secret, "key expansion", ServerHello.random + ClientHello.Random) 根据 RFC4346第 6.3 节
- 客户端 MAC 密钥 (SHA1) 20 个字节
- 服务器 MAC 密钥 (SHA1) 20 个字节
- 32 字节的客户端加密密钥 (AES256)
- 32 字节的服务器加密密钥 (AES256)
- 客户端 IV 16 字节(AES 使用 128 位块)
- 服务器 IV 16 字节(AES 使用 128 位块)
在这种情况下,我们需要生成 136 字节
如果以上是正确的那么
因此,如果我用上面的密钥和 IV 解密客户端握手加密记录,我会得到
我如何获得上面的值?
我知道这需要进行散列(Client Hello + Sever Hello + Sever Hello Done + Client Key Exchange 的串联)
任何人都可以帮忙吗?
c++ - 使用 OpenSSL 内存 BIO 进行第二次 ClientHello 后验证方法未触发
我正在使用 OpenSSL 为 NodeJS 编写本机 DTLS 模块。它使用内存 BIO,因此节点自己的套接字可用于控制数据流。一切似乎都在工作,但我在 DOS 缓解方面遇到了一些问题。
根据规范,发送到服务器的初始 ClientHello 应该被拒绝,并且服务器将发送一个包含 cookie 的 HelloVerifyRequest 以从客户端重新发送回。这一切都很好,但是当客户端发回第二个 ClientHello 时,由于某种原因,DTLSv1_listen() 调用导致我的 cookie 生成方法第二次触发,而不是 cookie 验证方法。奇怪的是,如果我发回第二个 HelloVerifyRequest(与第一个完全相同的长度和内容),我最终会得到一个似乎触发验证方法的 ClientHello。
这是我写的一个小测试来说明我正在做的事情(不完全是,跳过了一些东西,比如导入证书/密钥、调用握手后检查读/写的结果代码、释放内存等)。
最后一个断言失败——在本例中为 -1,在我的实际代码中为 0(随后的 BIO_read 获取我的数据 [13] = 3 aka HelloVerifyRequest)但这里要注意的重要一点是,如果您附加调试器并将验证 lambda 上的断点不会被命中。
c++ - Botan DTLS 服务器错误:无法与客户端就密码套件达成一致
我写了一个小的 DTLS 服务器示例。在以下链接中有我的代码:
我使用 Qt DTLS 示例客户端和 botan-cli.exe 进行了尝试,可以使用可在 botan github 站点上下载的文件进行编译。
即使我将它编码为与 Linux 一起使用,它也会抛出相同的错误。有人可以给我一个提示来解决我的问题吗?
我也通过 Wireshark 嗅探了通信,结果如下:
我试图在 Botan::TLS::Policy 中重载 bool Acceptable_ciphersuite,这样它总是会返回 true,但它没有帮助。我用谷歌搜索了这个错误,但没有找到任何合适的解决方案。