SSL 与加密套接字

SSL verses Encrypted Socket

我正在构建一个开源 client/server 应用程序,但我不确定要使用什么,SSL(例如 OpenSSL)或普通套接字上的加密数据包。

我想我有几个问题:

希望这个问题的结构能够通过版主 :)

Is there any security implications using encrypted packets over plain sockets?

如果操作正确则不会。顺便说一句,SSL/TLS 是通过普通套接字加密的数据包。

Is there any 'suggested' setups? I know for a fact that OpenSSL has something like 1/2 million lines of code and had a lot of security issues.

建议的设置是使用已知良好的代码和算法。在任何情况下,您都不应发明自己的东西,尤其是在您对该主题了解不多的情况下。

Is there any features that (Open)SSL give me that would a) beneficial or b) detrimental.

SSL/TLS 标准可能满足您的所有需求。实施过去有问题,将来也可能有问题。您可能会看看 LibreSSL,它是 OpenSSL 的一个分支,其中包含许多繁琐和不必要的功能,并且还删除了一些薄弱的安全性。 NSS 看起来也像一个可靠的库,与 OpenSSL、GnuTLS、SChannel 和 SecureTransport 相比,它在过去几乎没有严重的问题。

但请注意,SSL/TLS 和其他加密并不简单,在将其用于正式代码之前,您应该熟悉其中的概念和陷阱。

除了@Steffen Ullrich(上图)之外,我还要补充一点,单纯的加密几乎从来都不是一个好的解决方案,您还需要:

  1. 数据完整性 - 没有它的加密容易受到位翻转攻击
  2. 身份验证 - 即使您拥有银河系中最好的加密技术,如果您与错误的人交谈也无济于事。例如。如果您连接到一个假装是您的银行的服务器 - 连接是否加密有关系吗?你会把你的凭据给这个冒名顶替者!
  3. 不可否认性 - 有时也很重要

简而言之:如果你认为你可以正确地实现你自己的(通过普通套接字)加密连接(并且你没有该领域的博士学位:))我建议重新考虑这个问题。即使 OpenSSL has/had 存在一些安全问题 - 它仍然比编写自己的加密连接好几个数量级。

希望对您有所帮助。