我想使用OpenPGP身份验证通过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私钥签署请求。
我使用“converted”一词,因为OpenPGP和OpenSSL密钥格式不兼容:我必须从OpenPGP密钥中提取密钥参数,并使用它们形成新的X.509兼容(OpenSSL)密钥。尽管如此,它的表现符合预期。
结果是一个X.509证书,其中包含公钥的PGP公钥参数,但没有用户ID和公钥签名,因此无法用于身份验证目的。
缺失的部分是服务器身份验证。服务器先前已签署了用户的PGP公钥,但是如何通过X.509桥接证书进行验证?
即使我将我的PGP用户ID用作CN(通用名称),我如何证明它是源OpenPGP密钥中使用的相同用户ID? X.509桥接证书上没有公钥签名,只有相同的密钥参数。我可以安全地根据这些检查吗?
虽然我必须在Python中执行此操作,但一般而言如何继续进行的任何建议都将非常有帮助。
这种方法与Foaf中使用的方法非常相似:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/PgpX509Bridge.java 基本上,您可以从转换后的PGP私钥开始创建证书请求,将转换后的PGP公钥包含在证书请求中。然后,您使用转换后的PGP私钥签署请求。
我使用“converted”一词,因为OpenPGP和OpenSSL密钥格式不兼容:我必须从OpenPGP密钥中提取密钥参数,并使用它们形成新的X.509兼容(OpenSSL)密钥。尽管如此,它的表现符合预期。
结果是一个X.509证书,其中包含公钥的PGP公钥参数,但没有用户ID和公钥签名,因此无法用于身份验证目的。
缺失的部分是服务器身份验证。服务器先前已签署了用户的PGP公钥,但是如何通过X.509桥接证书进行验证?
即使我将我的PGP用户ID用作CN(通用名称),我如何证明它是源OpenPGP密钥中使用的相同用户ID? X.509桥接证书上没有公钥签名,只有相同的密钥参数。我可以安全地根据这些检查吗?
虽然我必须在Python中执行此操作,但一般而言如何继续进行的任何建议都将非常有帮助。