OpenPGP/X.509 桥:如何验证公钥?

2024-03-15

我想用通过 TLS 的 OpenPGP 身份验证 https://www.rfc-editor.org/rfc/rfc6091,但由于缺乏实现,我使用了临时解决方案:OpenPGP/X.509 桥接证书。

该方法与 Foaf 中使用的方法非常相似:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/PgpX509Bridge.java https://svn.java.net/svn/sommer%7Esvn/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 中执行此操作,但任何有关如何继续操作的建议都会非常有帮助。


我得到了关于加密的答案:https://crypto.stackexchange.com/a/11709/9284 https://crypto.stackexchange.com/a/11709/9284

如果您可以将整个 PGP 证书放入专有的非关键扩展中,那么您不需要在商店中查找 PGP 证书。此解决方案取决于您能够创建自己的 OID 并将 PGP 证书插入扩展中的条件。此外,服务器应该接受这样的证书并包含验证 PGP 证书的方法。

CA 可以接受或拒绝包含 PGP 证书的请求。它至少应该检查 PGP 证书中的密钥是否与签名请求中的密钥匹配。执行此操作的一种方法是验证 PGP 的模数和 X5.09 公钥是否匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenPGP/X.509 桥:如何验证公钥? 的相关文章

随机推荐