我正在尝试弄清我对数字签名和加密的使用。我了解有两种主要方法可以执行此操作:PGP方法和SSL方法。
我想知道是否可以对SSL证书和GnuPG使用相同的私钥,前提是这是RSA 2048位 key 。
我已经有一个由CA签名的SSL证书,因此我希望使用该证书的私钥作为GnuPG主私钥。
我知道我们不能通过这种方式在SSL和GnuPG之间进行断言,但是我只想拥有一个私钥(因此只需要保护一个数据即可)。
谢谢
最佳答案
您可以执行此操作,但这不一定是好的做法。
首先,当您说“SSL证书”时,您可能指的是“X.509证书”。 SSL/TLS大多数时候都使用X.509证书,但是它也可以使用OpenPGP certificates(据我所知,只有GnuTLS支持它们)。
请注意,我也在使用“OpenPGP证书”这个表达。大多数人称它们为“(开放)PGP公钥”,但实际上它们是证书:它们是公钥,标识符和某些属性的组合,并由其他为其签名的实体签名,以便形成整体证书。严格来说,它不仅仅是一个公钥。
X.509证书和PGP证书之间的主要区别在于X.509只能有一个签名(颁发者的签名),而多个签名可以添加到PGP证书上。 (PGP模型可以用于类似PKI的分层模型,而PKI模型不能用于处理信任网络模型。)
This Java code演示如何将一组PGP key “转换”为自签名X.509证书。原则上,您也可以将其转换为CSR,以从CA获得X.509证书。这样做是否一个好主意是另一回事。
首先,不时地重新生成新的 key 对通常是一个好主意。通常,这是用于SSL的X.509证书的有效期结束的原因之一(PGP签名也可以受时间限制)。
您还可以将所有鸡蛋有效地放在同一个篮子中。如果其中一个 key 被泄露,则您的X.509和PGP证书都将被泄露。
更重要的是,it's considered bad practice to re-use the same keys for signing and encryption:将它们用于两个不同的应用程序(SSL/TLS和GnuPG)只会使问题变得更糟。