【问题标题】:UDP with SSL Stream带有 SSL 流的 UDP
【发布时间】:2016-04-30 17:41:23
【问题描述】:

您好,我正在使用 C# 开发服务器/客户端项目,该项目同时使用 TCP(用于登录和其他内容)和 UDP(用于流式语音)。问题是我需要将 sslStream 用于 UDP,但据我所知,不可能使用无保证的协议进行 SSL 身份验证。那么有没有办法使用 TCP 进行身份验证,然后使用 sslStream 进行 UDP?

【问题讨论】:

    标签: c# ssl udp sslstream


    【解决方案1】:

    对C#和sslStream不太了解,但是:UDP是一种数据报协议,它不保证数据包的传递、顺序甚至会导致重复传递。相反,TCP 是一种流协议,可以保证交付等。TLS 仅在 TCP 之类的协议之上工作,而不是在 UDP 之上。

    对于 UDP,您需要改用 DTLS。根据Wikipedia,Microsoft TLS Stack SChannel 从 Windows 7 和 Windows 2008 R2 开始支持 DTLS 1.0。但是当searching for C# DTLS 出现很多问题但没有任何迹象表明C# 对DTLS 有本机支持时。但是一些第三方库出现在此搜索中,这可能有助于解决您的问题。

    【讨论】:

    • 感谢您的回答。是的,不幸的是,.Net 没有本机库,我刚刚找到了为 .Net 提供包装类的 openSSL,但是当他们支持它时,我在其文档中找不到任何关于 DTLS 的信息:(。你知道我可以从哪里开始学习它吗?
    • @farid_92:不幸的是,并非如此。如果您正在搜索 DTLS 示例,您会发现各种但主要是在 C 中,因此您需要以某种方式将其应用于 C#。我不知道 OpenSSL 绑定为 .NET 提供的 API,但即使是有关其 C API 的文档也缺乏很多,因此人们经常通过查看示例(如果可用)或源代码本身来学习:(
    • DTLS.Net 实现有限的 DTLS,请参阅自述文件。由于它没有CA验证,因此它使该项目仅适用于服务器-服务器通信。
    • @xmedeko: “由于它没有 CA 验证,所以它使该项目仅适用于服务器-服务器通信。” - 这句话在我的观点。 TLS/DTLS 中始终存在客户端角色和服务器角色,即客户端是发起 TLS 握手的一方,而服务器是接受客户端的一方。在 TLS/DTLS 中始终需要客户端对服务器端的身份验证,否则无法检测到中间人攻击。身份验证通常使用证书完成,但也可以通过其他方式完成,例如使用 PSK。
    • 不详细了解 DTLS.NET。 IMO 这意味着您必须在通信开始之前将客户端证书安全地传输到客户端计算机。这对于某些环境来说是可以接受的限制,而对于常见的公共客户端 - 服务器使用来说可能是一个障碍。
    猜你喜欢
    • 2013-10-18
    • 2022-08-22
    • 2017-11-25
    • 2014-05-18
    • 2015-01-05
    • 2018-12-04
    • 2012-04-02
    • 2014-01-21
    • 2016-02-17
    相关资源
    最近更新 更多