能否使用PGP公钥/私钥创建SSL证书?

8
我有一组我的朋友信任的PGP公钥/私钥(RSA)对。我运行一个Web服务器,想生成一个SSL证书,其公钥与我的PGP公钥匹配。
这个有意义吗?可能吗?安全吗?

虽然两者都是公钥加密的形式,但它们是不同的。请访问 http://forums.comodo.com/digital-certificates-encryption-and-digital-signing/what-is-the-difference-between-ssl-public-key-and-pgp-public-key-t21909.0.html 了解详情。 - Eugene
是的,我明白它们有不同的目的(打包和预期使用)。然而,问题是你是否可以在这两种情况下使用相同的公钥。 - Sam Goto
那个链接相当令人困惑,很多人所谓的“PGP公钥”实际上是证书:http://www.pgpi.org/doc/pgpintro/ (话虽如此,PGP证书和X.509证书的目的确实不同。) - Bruno
你为什么需要那个?物理上,它是同样的密钥,但你不会使用它。 - Nickolay Olshevsky
2个回答

8
如果你的PGP密钥格式也支持X.509格式,那么是可以实现的,RSA就是其中之一。
这里有一个Java实现,使用BouncyCastle将PGP证书转换为自签名的X.509证书(需要在加载它之前加载BouncyCastle安全提供程序)。
请注意,大多数人所说的PGP公钥实际上是PGP证书。公钥本身是包含在这些证书中的RSA密钥(或其他格式)。因此,可以获取密钥材料并在另一个证书中使用它。然而,这样做会失去使PGP证书成为证书的信息:将密钥绑定到标识和由其他人添加的签名(遵循PGP模型)。
您可能可以将PGP证书的额外信息放入自己的扩展中的X.509证书中。
使用相同的密钥材料可能取决于您想要实现什么。再次使用相同的密钥材料或多或少意味着“您”(PGP证书背后的ID)和您的Web服务器成为同一个,因为如果一个私钥被泄露,另一个也会被泄露(例如,Apache Httpd要求私钥在存储在服务器上时不受密码保护,尽管通常只能由root用户访问)。此外,这对于访问网站的访客可能没有太大帮助,除非他们想深入研究“未知证书”警告框以检查公钥是否与您的匹配(他们可能知道)。

那就是我在寻找的答案,Bruno!它验证了我所想的,并提出了证书和身份之间的区别。谢谢! - Sam Goto
如果您创建了一个RSA密钥,用作服务器的X.509证书,并使用您个人的PGP密钥签署您的服务器密钥,表明您信任自己的服务器,那么信任网络是否应该让您的朋友信任您的服务器?我相信这或多或少是猴子球(由https://dev59.com/aVHTa4cB1Zd3GeqPSIb3#7629599提到)的工作原理。 - unhammer
1
@unhammer,您需要一种呈现方式。浏览器只使用X.509证书。 (有一个规范可直接使用OpenPGP证书与TLS,但实现非常少。)签名的不仅是密钥,还包括身份和密钥之间的绑定。把密钥单独签名而不考虑服务器身份和其他属性是没有意义的,那将有效地成为不同的证书。可惜的是,WoT模型还存在其它问题:这些模型很快就会变得非常复杂。 - Bruno
作为奖励,可以查看此链接 http://crypto.stackexchange.com/q/11582/9284,了解如何验证证书与相应的PGP密钥匹配。 - Daniele Ricci
@DanieleRicci,是的,在早期FOAF+SSL实验中,有一些代码需要将整个PGP密钥(包括其签名)作为二进制数据块存储在自定义扩展中。不确定那段代码现在还在哪里。 - Bruno
@Bruno 我知道,我目前正在我的项目中使用那段代码的一个派生版本 :-) - Daniele Ricci

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接