2010-01-14 299 views
2

如果使用ssl模块进行TCP通信,这似乎相当简单,但如何通过UDP完成加密通信?UDP数据包加密

ssl模块仍然可以使用吗?如果是这样,那么客户端和服务器需要执行哪些步骤才能处于可以像平常一样来回发送数据的位置?

回答

4

DTLS是一种TLS(aka SSL)衍生产品,设计用于数据报传输,如UDP。

OpenSSL支持从0.9.8开始的DTLS,使用DTLSv1_METHOD而不是SSLv23_METHODTLSv1_METHOD或类似的。

+0

它看起来并不怎么样,我现在正在讨论pyOpenSSL文档,并且DTLSv1_METHOD并未列在SSLv23和TLSv1方法旁边。 – 2010-01-14 16:04:10

+0

啊,你说得对。 ChangeLog意味着添加了DTLS常量,但我现在检出了源并且DTLSv1_METHOD不存在。不过,它看起来可能很容易添加。 [编辑] https://bugs.launchpad.net/pyopenssl/+bug/454737 – ephemient 2010-01-14 16:31:52

+0

现在,OpenSSL的DTLS实现看起来相当不可靠。我基于它创建了项目,并且遭受了DTLS会话不可避免的损失。 – ereOn 2011-02-27 19:16:09

1

您可以使用pyCrypto或ezPyCrypto手动加密/解密数据包。

+3

如何?每个数据包单独做这个?巨大的开销(特别是给定数据报的大小限制),每个数据包都包含公钥和密钥。在更高层次上工作并将结果分成多个数据包?不,UDP是不可靠的,丢弃/重新排序会破坏你的解密流。 – ephemient 2010-01-14 15:57:49

+0

不需要为每个数据包发送密钥...为什么不提前发送酒吧密钥? – 2012-11-11 19:17:44

+0

糟糕,应该只是上面的关键。 – 2012-11-15 05:37:45