4

我想通过 TLS 使用 OpenPGP 身份验证,但由于缺乏实现,我使用了一个临时解决方案: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 中执行此操作,但任何关于如何进行的建议都会非常有帮助。

4

1 回答 1

1

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

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

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

于 2013-11-13T15:46:56.343 回答