【发布时间】:2011-12-23 18:41:03
【问题描述】:
我正在从事一个宠物项目,该项目将(最终完成后)允许安全的文件传输(不仅限于此,但其余部分并不特别相关)。我想使用 OpenSSL 库,因为它似乎是最完整的免费密码库(除了 SSL/TLS 之外,我还需要支持基本的对称加密和散列)。
我正在寻求实现一种与 SSH 类似的安全方案。基本上,用户会使用 TLSv1 (SSLv3.1) 连接到我的计算机。无论安全性如何,我都希望连接成功。然后,我希望能够检查用户使用的公共 key(不是整个证书)。该密钥将与已知的公钥进行比较,如果匹配,则允许用户访问特定的命令集。如果不匹配,用户可以选择使用连接申请将他/她的公钥添加到我的收藏中,但除此之外将无法访问我的服务。
我在这里没有任何特别需要证书。如果我可以跳过所有证书详细信息并仅使用原始加密密钥,那对我来说会简单得多。这是因为此模型遵循网络信任模型,而不是大多数 SSL/TLS 连接使用的分层模型,因此我不需要任何 CA 或签名证书。
不幸的是,大部分 OpenSSL 的文档都不存在。我发现的所有相关文章似乎都在设置“标准”SSL/TLS 连接,其中服务器的证书一直经过验证,直到一组根证书。这可能很有用,但我很难弄清楚如何启动和运行这些非传统 SSL 连接。
任何人都可以提出任何文章或文档来帮助我弄清楚如何实现这一点吗?
(OpenSSL 的使用并不是一成不变的,如果它提供了更好的方法来实现这一点,以及散列 [SHA-512] 和对称加密 [AES],我可以切换到另一个库。我是目标是 Linux,但如果最终产品可以移植到 Windows 上就更好了,这样我的朋友们也可以使用它。)
【问题讨论】:
-
将公钥与公钥列表进行比较本质上是使用密码,这破坏了 https 和 ssl 的整个 PKI 特性。如果您同时控制客户端和服务器软件(因此您可以配置信任关系),那么创建和使用自签名证书的建议是一个很好的建议。
-
@AdamLiss,不,它与密码不同:用户不必发送私钥,而用户必须发送密码。 (并且比较列表中的自签名证书与比较它们的公钥几乎相同。)
-
我没有使用 PKI。这个想法是,如果你是我的“朋友”(我有你的公钥/证书),那么你可以从我的计算机下载文件(我指定的)以及我可以从我的朋友那里下载的文件。问题是你看不到文件来自哪里(也就是说,如果 A 和 B 是朋友,B 和 C 是朋友,A 可以通过 B 从 C 下载,但根本不知道 C) .至少,简而言之就是这个想法。 OneSwarm 给了我这个项目的灵感。
-
对了,你已经决定好语言了吗?您是否也查看过 LibNSS,它似乎有据可查 mozilla.org/projects/security/pki/nss/ref/ssl?
-
我还没有完全决定一种语言(我还在研究我想使用哪些库,以及程序/协议的规范),但我很可能会使用 C . 我可能改用 D。这真的取决于库比什么都重要——确切的语言对我来说并不重要。