【问题标题】:Choosing a simple, secure and lightweight network protocol选择简单、安全、轻量级的网络协议
【发布时间】:2023-03-22 02:25:01
【问题描述】:
我正在构建一个可能需要通过网络发送和接收数据的应用程序(客户端和服务器端)。消息将很短,并且可能主要是二进制的。即使在公共网络上,我也需要确保连接安全。
我不打算重新发明轮子,所以我希望协议能够自己处理所有会话管理开销(握手、处理丢弃的数据包、发回 ACK 响应等)。如果 Windows、Linux 和 OS X(由 .net 框架和 *NIX 内核)自然支持它,那也很好。
到目前为止,我已经考虑了几个选项:
- HTTPS - 对上述所有内容都有很好的支持,除了开销。如果消息很短,那么所有 HTTP 标头都是多余的。本机支持。
- IPSEC - 本机支持,但强制我自己处理会话。
- Google 的基于 HTTPS 的协议缓冲区 - 目前最好的选择,但需要一些实施工作。
我是网络编程领域的新手,因此非常感谢任何建议或提示。
【问题讨论】:
标签:
c#
c++
security
network-protocols
【解决方案1】:
我认为您首先必须决定您想要工作的级别。 IPSEC 作为一种协议的工作原理与 IP 大致相同;基本上,你必须自己做所有的事情。 HTTPS 是一种更高级别的协议。
HTTP/HTTPS 得到普遍支持,(需要做一些工作)将通过代理等工作。HTTPS 为您提供隐私和可选的端点身份验证,而无需支付额外费用。操作系统甚至可能已经提供了一个您可以使用的密钥库。
您也可以打开一个套接字,简单地来回推送加密数据;想想 telnet 或 SSH(尽管 SSH 在协议协商阶段相当重量级)。大多数框架中都可以使用加密库,但您必须小心密钥管理和交换。但是,如果您可以使用预共享密钥,那么这根本不是问题,真的;否则,X509 证书可能是一种可行的方法,很容易在许多平台上得到支持。
【解决方案2】:
IPSec 在 IP 级别工作,用于保护系统级别的网络连接。它在应用程序级别上不可用。所以 SSL/TLS 是最好的选择,因为它是最流行和本机支持的等等。如果你想使用 UDP,有 DTLS 协议(TLS over UDP),但它不像常规 TLS 那样被广泛支持。
如果您根本不想处理套接字并更喜欢专注于业务逻辑,请查看我们的MsgConnect 产品。这是一个轻量级的跨平台的面向消息的中间件,它可以让你发送和接收消息,而 MsgConnect 将自己处理套接字。