在数据库中存储X509证书 - Yea还是Nay?

时间:2008-10-06 12:59:06

标签: windows certificate pki

我发现自己需要存储公钥证书,以及内部应用程序的单个私钥证书。

我们团队的一名成员建议将X509证书存储在数据库中,而不是将其存储在Windows证书存储中,就像我们一直在做的那样。我不喜欢重新发明轮子,但我必须至少考虑这个想法。这意味着保持我们的数据更集中,这是好的,我想。

我可以看到的最初障碍是:

  • 私钥仍然需要存放在某个地方,我不知道是否将它变成“公钥”表是一个好主意。我也不喜欢为单个元素设置表的想法。也许只是将私钥保存为本地文件? (例如.pfx文件)。
  • 撤销名单。我们可能不得不设置一个处理被撤销的公钥的过程。

我对X509证书没有太多经验,所以,我的问题是:在数据库中存储公钥证书时是否存在其他问题,而不是使用Windows证书存储?< / p>

值得注意的是,此应用程序将部署到多个业务客户端服务器上,因此将所有数据保存在一个位置将使备份更容易。哦,有问题的内部应用程序正在用C#开发..

谢谢!

2 个答案:

答案 0 :(得分:3)

申请的目的是什么?

如果您正在处理应用程序中的所有加密,并且可以引用PKCS#12证书+私钥文件,那么转到数据库路径可能没问题。

如果您需要使用Windows Crypto API来访问证书,那么您可能希望继续使用内置证书存储。您可以在此获得一些优势,因为您可以保护外部设备上的私钥,如智能卡或硬件安全模块(HSM)。

如果要将所有内容存储在本地磁盘上,您需要确保为保护私钥而付出巨大努力。请务必使用强大的密码并使用最佳做法来保护应用中的密码短语。

答案 1 :(得分:1)

除非真的有必要,否则我不愿意将私钥移动到任何其他位置。如果密钥用于签名则不需要,只有在密钥用于解密时才需要密钥,并且您希望将密钥存档以备将来使用。即使在这种情况下,颁发证书的证书颁发机构通常也能够处理归档和恢复。对于诸如微软和委托等更受欢迎的CA来说,情况确实如此。

如果必须存储它,则使用AES和您可以在HSM(硬件安全模块)或智能卡中保护的密钥对其进行加密。不要将此密钥保留为纯文本(在文件或注册表中)。

您还希望在其生成位置和中央数据库之间保护此密钥。 SSL或VPN等

撤销列表由证书颁发机构在大多数环境中发布,通常发布到LDAP或目录或两者。