我想使用OpenPGP authentication over TLS,但缺乏实现使我使用临时解决方案:OpenPGP / X.509桥接证书。
该方法与Foaf中使用的方法非常相似:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/PgpX509Bridge.java
基本上,您从转换后的PGP私钥开始创建证书请求,包括将转换后的PGP公钥转换为证书请求。然后使用转换后的PGP私钥对请求进行签名。
我正在使用“转换”这个词,因为OpenPGP和OpenSSL密钥格式不兼容:我必须从OpenPGP密钥中提取关键参数并使用它们来形成新的X.509-兼容(OpenSSL)密钥。然而,它按预期工作。
结果是X.509证书,其中包含在X.509证书的公钥中使用的PGP公钥参数,但没有用户ID和公钥签名,从而使其成为无法用于身份验证。
此处缺少的是服务器身份验证。服务器先前已签署用户的PGP公钥,但如何通过X.509网桥证书验证?
即使我使用我的PGP用户ID作为CN(公用名),如何证明它与原始OpenPGP密钥中使用的用户ID相同?
X.509网桥证书上没有公钥签名,只有相同的密钥参数。我能安全地检查一下吗?
虽然我必须在Python中执行此操作,但有关如何继续进行的任何建议都非常有用。
答案 0 :(得分:1)
我得到了关于加密的答案: https://crypto.stackexchange.com/a/11709/9284
如果您可以将整个PGP证书放在专有的非关键扩展中,那么您不需要在商店中找到PGP证书。此解决方案取决于您能够创建自己的OID并在扩展中插入PGP证书的条件。此外,服务器应该接受这样的证书,并包含验证PGP证书的方法。
CA可以接受或拒绝包含PGP证书的请求。它至少应该检查PGP证书中的密钥是否与签名请求中的密钥匹配。一种方法是验证PGP和X5.09公钥的模数是否匹配。