对于我正在编写的程序,我想使用TLS(或类似的东西)来封装我的应用程序的协议。这将尽量减少我必须做的工作量以及我可能意外创建的漏洞数量。通过TLS与Java中的Web of Trust进行加密和身份验证
我的程序设计为点对点,尽管一个或多个服务器提供一些服务来帮助一个用户找到另一个(它注册IP地址/端口组合),但除此之外别无其他。我想让这个系统非常容错,因此让这些服务器充当证书颁发机构是不可接受的,因为妥协服务器或其密钥会影响太多用户。因此我计划使用信任网。
使用TLS的主要问题是原始TLS 1.2规范(RFC 5246)没有规定使用OpenPGP证书。它似乎非常以x.509为中心。 RFC 6091废弃了RFC 5081并且扩展了RFC 5246,为我所需要的TLS的扩展做了规定。问题是我不认为BouncyCastle实现了这个扩展,我找不到一个Java加密库。我也不想写我自己/为卑诗省做出贡献,因为我不会犯错,而且我也很懒。
此问题的另一个问题是BouncyCastle提供了“轻量级客户端TLS API”,但由于该软件是P2P,服务器端API也是必需的,因此我可以使用TLS使其相信对等发起连接是客户端。我非常肯定,一旦握手完成,它就是一样的。
问题: 有没有什么办法可以使用TLS(我非常怀疑)?是否有像TLS这样的协议是为P2P设计的,或者至少可以以这种方式运行(比如我相信TLS可以),但是可以与OpenPGP证书一起使用?如果两者都不是这样,我是否应该追求在this question中解释的想法,并实施我自己的层从TLS的概念?
不幸的是,这是不正确的。 TLS握手需要解析证书。这是RFC 6091扩展到TLS的原因。 – Nikos 2011-04-20 07:52:28
实际上我实现了TLS客户端和服务器,它们本身并没有解析证书。所以这是可能的。当客户端收到服务器证书时,它将blob交给一个外部回调函数,后者发回公钥以供使用 - 在我的情况下,回调函数将blob解释为X.509证书(它被解析和验证),但它确实可以解释它们,否则甚至将它们丢弃并使用硬编码的服务器公钥,这在一些设置中是有效的。 – 2011-04-20 11:54:36
那么,您的实现将证书作为blob处理的事实并不能消除TLS解析这些证书的要求。你只是把它委托给一个回调,但仍然需要解析来完成协议。 – Nikos 2011-04-20 12:07:40