【发布时间】:2013-10-30 09:45:08
【问题描述】:
我想使用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 私钥签署请求。
我使用“converted”这个词,因为 OpenPGP 和 OpenSSL 密钥格式不兼容:我必须从 OpenPGP 密钥中提取密钥参数并使用它们来形成新的 X.509-兼容 (OpenSSL) 密钥。不过,它按预期工作。
结果是一个 X.509 证书,其中包含 X.509 证书的公钥中使用的 PGP 公钥参数,但没有用户 ID 和公钥签名,因此无法用于身份验证。
这里缺少的是服务器身份验证。服务器之前已经对用户的 PGP 公钥进行了签名,但是如何通过 X.509 桥接证书进行验证呢?
即使我使用我的 PGP 用户 ID 作为我的 CN(通用名称),我如何证明它与原始 OpenPGP 密钥中使用的用户 ID 相同?
X.509 网桥证书上没有公钥签名,只有相同的密钥参数。我可以安全地检查这些吗?
虽然我必须在 Python 中执行此操作,但任何有关如何进行的建议都会非常有帮助。
【问题讨论】:
标签: python authentication gnupg x509 openpgp