问题标签 [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.
google-chrome - 在 Chrome 中解密 WebRTC 中的 SCTP-DTLS 流量
我正在尝试检查通过我本地计算机上的 chrome 中 webrtc 数据通道的 sctp 连接发送的数据包。我发现关于解密 DTLS-Traffic(例如通过 wireshark)的信息并不多。有没有办法访问为对等连接生成的证书?如果不是,如何通过其他方式解密流量?(例如,一些 mitm 代理,但大多数仅用于 TLS)。
android - Android 设备中的 DTLS 握手失败
我正在尝试使用openssl/bio.h
库在我的 Android 客户端中实现 DTLS。
同样在 iOS 中不会导致任何错误,而在 Android 中..DTLS 握手失败会给出以下错误
ssl3_write_pending:BIO_NOT_SET
我不明白这个错误,有没有人尝试过这个或者遇到过这个问题?通过谷歌没有找到太多帮助
java - 如何为身份验证创建 ECDSA 密钥?
我正在尝试根据来自Californium.Scandium的示例 java 文件在 Android 上设置 DTLS 服务器。最初我遇到了问题,因为密钥库和信任库是 jks 格式并且我没有密钥密码。因此,我使用 Portecle 创建了自己的 PKCS12 密钥库和信任库。
之后,代码在密钥库加载期间没有抛出任何错误,但在运行应用程序时我得到了这个:
编辑:我意识到我的密钥是使用 SHA 而不是 ECDSA 创建的。我对密钥库和密钥不是很熟悉,所以我假设我的密钥库现在是有效的,我只需要为系统生成适当的密钥并将它们植入密钥中。如何使用 ECDSA 创建密钥并将它们传输到我的密钥库?
security - DTLS 是否需要会话超时?
我试图找出最有效的数据使用方式来保护我们的 CoAP API。DTLS 似乎是正确的方法,但看看握手需要多少数据(并对需要发生的频率做出一些不知情的假设)似乎带有 X.509 证书的 DTLS 使 CoAP 的实际数据使用相形见绌本身。
最明显的解决方案是只使用在工厂编程的对称密钥,但我认为我不喜欢强加的安全风险。据我了解,除了在所有设备上手动安装新密钥外,没有办法从服务器端入侵中恢复。
我正在考虑提出的解决方案基本上是两者的混合,使用安全 CA 分发设备,让设备进行标准握手并建立“临时”对称密钥。然后为了节省设备的带宽,我将该密钥(会话?)存储在数据库中,以便设备一次持续数月或数年,但如果我们发现任何密钥已经泄露,仍然可以使密钥过期。
我知道我可以只使用标准会话恢复握手来恢复会话,但我不确定这是必需的,因为 DTLS 是无连接的,我可以假装“连接”总是打开的。如果我可以避免重复握手,这将降低数据消耗并可能降低服务器负载。
我不知道的是:DTLS 是否定义了会话可以保持打开状态的限制?或者是否存在超时,在一段时间不活动后必须删除会话?如果没有,DTLS 的实现是否自己定义了一个?
关于为什么这不起作用,我可能会忽略其他任何事情吗?还是有什么更简单的我没有想到的?
openssl - openssl 对 DTLS v1.2 的支持
我在 Ubuntu 14.04 中预装了 openssl 版本
这是 Ubuntu 中可用的最新版本。现在的问题是在我编译它显示的代码时SSL_library_init();
调用了它:DTLSv1_2_client_method();
但是如果我改为method = DTLSv1_client_method();
它只显示与演员表相关的警告
代码片段如下:
我也从 git 下载了 openssl 源代码并安装了,但 openssl 版本没有改变。而且我无法编译。任何人建议任何修复?
ssl - TLS/DTLS 心跳扩展的超时值
TLS(DTLS)心跳扩展的超时值到底是多少?我的理解是 TLS(DTLS) Heartbeat 扩展是检查服务器和客户端之间的活跃度,比如保持活动状态。这意味着,发送方定期发送心跳请求,接收方应向发送方响应心跳响应。但是,RFC 6520 中没有超时值的定义。如何设置超时值来实现这个功能?
ssl - DTLS 1.2 主密钥派生
我正在实施DTLS 1.2并使用密码TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
我正在使用以下步骤创建预主密钥和主密钥
1- 使用 API BCryptOpenAlgorithmProvider开放算法提供程序
2- 使用 API BCryptGenerateKeyPair生成密钥对
3- 比使用 API BCryptExportKey导出公钥
4- 比使用 API BCryptImportKeyPair导入对方公钥
5- 之后使用我的私钥和其他方公钥通过 API BCryptSecretAgreement生成秘密协议句柄
6- 最后使用 API BCryptDeriveKey获取密钥
我是否因为我的主密钥不正确而遗漏了什么。
nss - NSS DTLS 示例应用程序代码
是否有在某处可用的利用 NSS DTLS/SRTP 功能的示例独立“应用程序”代码?
有使用 NSS Mozilla 版本附带的 SSL3/TLS 功能的 cmd 和测试示例应用程序代码,但没有用于 DTLS 功能 - 尽管 nss/lib/ssl/ 代码中支持 DTLS,但这些是 SSL3/DTLS 内部的在职的。
我已经尝试谷歌搜索了几天,但无济于事。我已经尝试了几个星期来编写代码来访问这些内部代码,这需要大量的黑客攻击才能在 ssl/ 目录中创建内部挂钩,我认为这不是正确的方法,而且进展不顺利。但我根本无法在 dtlscon.c、ssl3con.c 等中找到一个合理的 API 供应用程序使用或遵循的示例应用程序。
有人可以提供一些提示或实际利用 NSS DTLS/SRTP 功能的独立客户端/服务器应用程序代码示例吗?
我在 NSS cmd/tests 下的 C 或 nss/jss/org/Mozilla/jss 下的 JAVA 中进行编码。
谢谢,
c - 为同一端口上现有 DTLS 连接上的传入 DTLS 连接获取 SSL_ERROR_SYSCALL
在现有的 DTLS 连接上,即 DTLS 握手已经在端口 5000 上成功完成,如果服务器获得传入的 DTLS 连接,即 DTLS 客户端 Hello 数据包,则 SSL_read 正在生成SSL_ERROR_SYSCALL
。
谁能给我一个关于为什么的线索。
场景是客户端在服务器的 5000 端口上与服务器建立了 DTLS 连接。客户端更改的 IP 地址可能是由于从 Wi-Fi 过渡到 3G 或反之亦然。因此,现在客户端将再次尝试在服务器的同一端口 5000 上与服务器建立 DTLS 连接。
请任何人告诉我
Q1。为什么 SSL_read 会生成错误 SSL_ERROR_SYSCALL 以及可以做些什么来继续?
Q2。我们是否可以在同一端口上的现有 DTLS 连接上处理另一个传入的 DTLS 连接,而无需清理已经存在的 DTLS 连接?
提前感谢您的帮助,Vineet Srivastava
openssl - 当 BIO 是内存 BIO 而不是套接字 BIO 时,BIO_read/BIO_write 和 SSL_read/SSL_write 有什么区别?
当 BIO 是内存 BIO 而不是套接字BIO 时,我对 BIO 例程BIO_read()
/BIO_write()
和SSL_read()
/之间的区别感到困惑。SSL_write()
我正在尝试编写libnice
用于 ICE 堆栈的 WebRTC 服务器和用于 DTLS 堆栈的 OpenSSL。ICE 堆栈具有到客户端的套接字连接,因此我不能在 OpenSSL 中使用基于套接字的 BIO。相反,我使用的是内存 BIO。
所以我使用的高级程序是,当我在 ICE 套接字上接收到来自客户端的 DTLS 消息时,我使用BIO_write()
. 然后,当 DTLS 堆栈有消息要发送给客户端时,我使用 ICE 获取该消息BIO_read()
并使用 ICE 套接字将其发送给客户端。
我已经看到了一些基本上执行此过程的源代码示例,但它们也在调用SSL_read()
后调用例程BIO_write()
。这对我来说毫无意义。为什么SSL_read()
在我基本上使用调用将客户端消息写入 DTLS 堆栈之后调用是必要的BIO_write()
?如果我在我的代码不起作用SSL_read()
后不打电话。BIO_write()
但是当我SSL_read()
在之后调用时BIO_write()
,这确实是在与浏览器客户端交换握手消息。
问题BIO_read()
:使用内存 BIO,和有什么区别SSL_read()
?
问题BIO_write()
:使用内存 BIO,和有什么区别SSL_write()
?
问题:默认内存BIO是阻塞的还是非阻塞的?我假设它是非阻塞的,因为它是基于内存的 BIO 而不是基于套接字的 BIO。
谢谢,
-安德烈斯