2010-07-16 53 views
1

我已保存的用户SSL证书在数据库中的列的文件及其私有密钥的密码(不使用证书存储区),每个Web服务客户端的SSL证书,需要certificate.The原因,我更喜欢这个如果代码被移动到另一台服务器(Dev/QA/Prod),我不必担心用户权限来访问证书。由于证书存储在中央位置,因此我不必将其安装在每台机器上。此外,业务人员可以随时上传证书而无需介入开发人员,并且质量保证和生产环境下的证书会有所不同。现在我担心的是,在数据库中存储证书会危及安全性,而不是将其存储在证书存储中?存储与出影响安全性

+0

Repharsing这一行“我已存储的客户端SSL证书数据库文件及其私有密钥的密码”到“我已经存储了客户端的SSL证书在数据库文件和密码需要访问证书的内容”。 – Amzath 2010-07-19 15:26:40

回答

1

从安全的角度来看,你将私钥和密码的数据库的策略赠送权利,所有钥匙,数据库管理,软件作者和系统管理员。

在系统上放置的私有密钥的密码,但不是在数据库才动手总量控制的系统管理员和软件作者。

另一个解决方案是将私钥存储在硬件设备(HSM)中,并且只将参考存储在数据库中。然后,您的软件将使用像PKCS#11这样的硬件加密API执行SSL客户端握手加密,并且您的私钥永远不会存在系统内存或磁盘中。

0

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

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

一般来说,私钥是真的:私人。一些认证机构甚至要求在他们的政策中没有其他人知道最终用户可能知道私钥(至少具有合理的保护,例如在浏览器内或只有他们知道密码的PKCS#12文件中)。 使用公钥和私钥时有意义。

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

存储所有用户的私钥在一个中心位置可能不那么容易让每个用户使用自己的店作为安全的,但它是可以接受的。最终,这取决于你可能遇到的威胁。

+0

他需要私钥,因为他们是他的SSL客户端的身份。据推测,他有几个ssl服务器需要验证他的连接。 – IanNorton 2010-07-16 23:11:28

+0

当然,我想知道的是为什么使用客户端证书而不是Kerberos等替代系统。在那里,KDC也需要担保,但使用经过良好测试的KDC软件的风险似乎比开发定制服务来存储密钥和证书的风险更小。这种情况可能由于各种原因而不起作用(例如Kerberos不适用,也许如果你需要连接外部或其他原因)。我只是觉得我们可以提供更好的答案和更多关于环境的细节。 – Bruno 2010-07-17 00:37:31

+0

布鲁诺,我不是在数据库中存储私钥,而是存取私钥的密码。我正在使用.Net类X509Certificate2,构造函数(字节[],字符串)。此构造函数使用字节数组和访问证书数据所需的密码创建一个新的X509Certificate2对象。它与包含证书私钥的PKCS12(PFX)文件一起使用。使用正确的密码调用此构造函数将解密私钥并将其保存到密钥容器中。由于我们正在完善第三方Web服务,因此他们需要客户端SSL证书认证。 – Amzath 2010-07-19 15:21:37