存储客户端SSL证书,但不会影响安全性

时间:2010-07-16 19:38:53

标签: ssl client certificate

我已将客户端SSL证书作为文件存储在数据库中,并将其私钥密码存储在需要证书的每个Web服务的列中(不使用证书存储区)。我之所以喜欢这样,我不必担心如果将代码移动到另一个服务器(Dev / QA / Prod),则访问证书的用户权限。由于证书存储在集中位置,我不必在每台机器上安装它。此外,商务人士可以随时上传证书,无需干预开发人员和证书,QA和生产环境将有所不同。现在我担心的是,在数据库中存储证书会破坏安全性而不是将其存储在证书存储中吗?

2 个答案:

答案 0 :(得分:1)

从安全的角度来看,将私钥和密码放在数据库中的策略赋予了数据库管理员,软件作者和系统管理员的所有密钥的权利。

将私钥的密码放在系统上但不放在数据库中只能将控制权交给系统管理员和软件作者。

另一种解决方案是将私钥存储在硬件设备(HSM)中,并仅存储数据库中的引用。然后,您的软件将使用硬件加密API(如PKCS#11)来执行SSL客户端握手加密,并且您的私钥永远不会出现在系统内存或磁盘上。

答案 1 :(得分:0)

我猜您的意思是“我已将客户端SSL证书存储在数据库中作为文件,其私钥和其私钥密码”。也许X.509证书及其私钥在一个容器中,可能是PKCS#12格式。 (或者你真的只想存储证书吗?只存储证书是好的,但为什么你也会存储私钥的密码。)

这不一定是错的,但你必须确保对这种基于数据的访问得到很好的保护。

通常,私钥就是:私有。一些认证机构甚至在其策略中强制要求最终用户不得知道私钥(至少在合理的保护下,例如在浏览器内或仅在他们知道密码的PKCS#12文件中)。 这在使用公钥和私钥时是有意义的。

我认为您需要仔细查看设计的所有角度。目前尚不清楚为什么要将私钥存储在数据库中供用户检索。将私钥存储在中心位置可能是有意义的,但这也可能会破坏使用客户端证书进行身份验证的程度(这实际上取决于完整的图片和您真正想要的安全程度)。

将所有用户的私钥存储在中央位置可能不如让每个用户使用自己的商店那么安全,但这可能是可以接受的。最终,它取决于您可能遇到的威胁。