c# - 选择简单、安全、轻量级的网络协议(protocol)

标签 c# c++ security network-protocols

我正在构建一个可能需要通过网络发送和接收数据的应用程序(包括客户端和服务器端)。消息将很短,而且可能大部分是二进制的。即使在公共(public)网络上,我也需要安全连接。

我不想重新发明轮子,所以我希望协议(protocol)能够自行处理所有 session 管理开销(握手、处理丢失的数据包、发回 ACK 响应等)。如果它在 Windows、Linux 和 OS X 中自然受到支持(通过 .net 框架和 *NIX 内核),那也很好。

到目前为止,我已经考虑了几种选择:

  • HTTPS - 对上述所有方面都有很好的支持,但开销除外。如果消息很短,那么所有的 HTTP header 都是多余的。原生支持。
  • IPSEC - native 支持,但迫使我自己处理 session 。
  • Google 的基于 HTTPS 的 Protocol Buffers - 目前最好的选择,但需要一些实现工作。

我是网络编程领域的新手,所以任何建议或提示都将不胜感激。

最佳答案

我想你首先必须决定你想在哪个级别工作。 IPSEC 作为一种协议(protocol),其工作水平与 IP 大致相同;基本上,您必须一切自己做。 HTTPS 是一个级别更高的协议(protocol)。

HTTP/HTTPS 得到普遍支持,(需要一些工作)将通过代理等工作。HTTPS 为您提供隐私和可选的端点身份验证,只需很少的额外费用。操作系统甚至可能已经提供了您可以使用的 keystore 。

您也可以打开一个套接字,简单地来回推送加密数据;考虑 telnet 或 SSH(尽管 SSH 在协议(protocol)协商阶段相当重量级)。加密库在大多数框架中可用或适用于大多数框架,但您必须小心 key 管理和交换。但是,如果您可以接受使用预共享 key ,那么这根本就不是问题,真的;否则,X509 证书可能是一种很容易在许多平台上得到支持的可行方法。

关于c# - 选择简单、安全、轻量级的网络协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884213/

相关文章:

c# - 如何获得适合存放临时文件的路径?

c# - 日期月份显示不正确

c++ - 尽管找到了 cuda,CMAKE_CUDA_COMPILER 标志仍为 false

security - Plaid 访问 token 是 secret 吗?

security - 客户端身份验证对于 k8s 来说足够好吗?

c# - 具有重叠匹配的多行正则表达式

c# - 在轨迹栏 ValueChanged 上触发事件,但不在代码中

c++ - 将文本行提取到变量字符串中

c# - 如何将 wchar_t* 从 C++ 编码到 C# 作为输出参数或返回值?

security - 如何独立使用 mod_security?