我正在研究一个宠物项目(最终,当它完成时)允许安全的文件传输(除此之外还有更多,但其余的并不是特别相关).我想使用OpenSSL库,因为它似乎是最完整的免费加密库(我需要支持基本的对称加密和散列,以及SSL/TLS).
我正在寻求实现类似于 SSH 的安全方案.基本上,用户将使用TLSv1(SSLv3.1)连接到我的计算机.无论安全性如何,我都希望连接成功.然后,我希望能够检查用户使用的公钥(而不是整个证书).该密钥将与已知公钥进行比较,如果匹配,则允许用户访问某组命令.如果它不匹配,用户可以选择使用连接申请将他/她的公钥添加到我的集合中,但除此之外将无法访问我的服务.
我这里没有特别需要证书.如果我可以跳过所有证书详细信息并仅使用原始加密密钥,那对我来说会简单得多.这是因为此模型遵循Web信任模型,而不是大多数SSL/TLS连接使用的分层模型,因此我不需要任何CA或签名证书.
不幸的是,大多数OpenSSL的文档都是不存在的.我发现的所有相关文章似乎都在设置"标准"SSL/TLS连接,其中服务器的证书一直到一组根证书进行验证.这可能很有用,但我很难弄清楚如何启动和运行这些非传统的SSL连接.
任何人都可以建议任何可能帮助我弄清楚如何实现这一目标的文章或文档吗?
(OpenSSL的使用不是一成不变的,如果它能提供更好的方法来实现这一点,我可以切换到另一个库,以及散列[SHA-512]和对称加密[AES].我的目标是定位Linux,但如果最终产品可以移植到Windows那么会很好,所以我的朋友也可以使用它.)
为了扩展尤金的答案(我会把它作为评论,但有点长)......
使用FOAF+SSL 项目(后来更名为 WebID)完成此类操作后,坚持使用 X.509 证书可以使实施变得更容易,因为大多数 SSL/TLS 堆栈都是在设计时考虑到它们的(并且它们的 API 反映了这一点)。
上次我检查FOAF+SSL时,客户端仍然使用传统的PKI检查来检查服务器证书。另一种选择与 SSH 类似,是在第一次遇到公钥/证书时接受它,并在其更改时警告用户。无论如何,这或多或少就是 SSH 的工作方式(特别是,我猜很少有人在第一次看到密钥指纹时会真正检查它)。
仅考虑客户端证书的使用(尽管其中一些可以以类似的方式应用于服务器证书):
X509TrustManager在 Java 中)。openssl或keytool命令的用户来说很方便。下面是一个示例服务,它将使用用户想要的 SAN 颁发证书(如果您检查 FOAF+SSL/ WebID项目,可能会有更新的版本)。无论此类服务使用哪个私钥或颁发者名称都无关紧要,但由于浏览器是围绕传统 PKI 设计的,因此使用真正的自签名证书并不容易。在要求特定的客户证书时也存在问题。TLS 1.1 规范明确允许为空certification authorities(请参阅RFC 4346),而 TLS 1.0 对此主题保持沉默。实际上,即使使用 TLS 1.0,大多数客户端工具似乎也对空列表感到满意(它们只是提供更多选择)。如果您希望系统的证书易于识别,您可以对所有这些证书使用相同的颁发者 DN,即使它们实际上没有使用相同的私钥进行签名(同样,因为您会忽略签名)。
| 归档时间: |
|
| 查看次数: |
12448 次 |
| 最近记录: |