【问题标题】:is it possible to create an ssl certificate out of a pgp public/private key? [closed]是否可以使用 pgp 公钥/私钥创建 ssl 证书? [关闭]
【发布时间】:2010-10-31 00:33:37
【问题描述】:

我有一个朋友信任的 pgp 公钥/私钥 (RSA) 密钥对。我有一个正在运行的网络服务器,我想生成一个 ssl 证书,其公钥与我的 pgp 公钥匹配。

这有意义吗?那可能吗 ?安全吗?

【问题讨论】:

  • 虽然两者都是公钥加密的一种形式,但它们是不同的。见forums.comodo.com/…
  • 是的,明白它们有不同的用途(包装和预期用途)。然而,问题是您是否可以在这两种情况下使用相同的公钥。
  • 那个链接很混乱,很多人所说的“PGP公钥”实际上是证书:pgpi.org/doc/pgpintro(这就是说,PGP证书的目的和X. 509 证书确实不同。)
  • 你为什么需要它?从物理上讲,这将是相同的密钥,但您不会使用它。

标签: ssl openssl pgp gnupg


【解决方案1】:

如果您的 PGP 密钥中的密钥格式也支持 X.509 格式,那么这是可能的。 RSA 就是其中之一。

这是一个 Java implementation,它使用 BouncyCastle 将 PGP 证书转换为自签名 X.509 证书(您需要在加载之前加载 BouncyCastle 安全提供程序)。

请注意,大多数人所说的 PGP 公钥 实际上是 PGP 证书。公钥本身就是包含在这些证书中的 RSA 密钥(或其他格式)。因此,可以获取密钥材料并在另一个材料中使用它。 但是,这样做会丢失使 PGP 证书成为证书的信息:密钥与身份的绑定以及其他人添加的签名(遵循 PGP 模型)。

您可能会将 PGP 证书的额外信息放入您自己的 X.509 证书扩展中。

这样做是否有意义可能取决于您想要实现的目标。重复使用相同的密钥材料或多或少意味着“您”(PGP 证书后面的 ID)和您的网络服务器成为一回事,因为如果一个私钥被泄露,另一个(例如 Apache Httpd,要求私钥在存储在服务器上时不受密码保护,尽管它通常只能由 root 用户访问)。 此外,这可能对访问该网站的访问者没有多大帮助,除非他们想在“未知证书”警告框中挖掘以检查公钥是否与您的公钥匹配(他们可能知道)。

【讨论】:

  • 这就是我正在寻找布鲁诺的答案!它验证了我的想法并提出了证书和身份之间的区别。谢谢!
  • 如果您创建一个 RSA 密钥供您的服务器用作其 X.509 证书,并使用您的个人 PGP 密钥签署您的服务器密钥,表明您信任自己的服务器,那么不应该信任网络让您的朋友信任您的服务器?我相信monkeysphere(*.com/a/7629599/69663提到的)或多或少是这样工作的。
  • @unhammer,你需要一种方式来展示它。浏览器仅使用 X.509 证书。 (有一个规范直接使用带有 TLS 的 OpenPGP 证书,但实现很少。)它不仅仅是您签署的密钥,而是身份和密钥之间的绑定。独立于服务器的身份和其他属性对密钥进行签名是没有意义的,这实际上是一个不同的证书。不幸的是,WoT 模型还有其他问题:模型很快就会变得非常复杂。
  • 作为奖励,请查看此crypto.stackexchange.com/q/11582/9284,了解如何证明证书与相应的 PGP 密钥匹配。
  • @DanieleRicci,是的,在早期的 FOAF+SSL 实验中,有些代码将整个 PGP 密钥(包括其签名)作为二进制数据块存储在自定义扩展中.不确定该代码保留在哪里。
【解决方案2】:

查看 MonkeySphere 项目: http://web.monkeysphere.info/

如何生成 SSL 证书的说明: http://web.monkeysphere.info/doc/host-keys/

它有一个 Firefox 扩展,所以你的朋友可以通过你的 PGP 密钥来验证它。

【讨论】:

    最近更新 更多