存储客户端证书的最佳实践?

Gro*_*Man 6 security ssl certificate x509certificate mutual-authentication

我正在构建一个需要相互身份验证的应用程序。因此,我将允许我的用户上传一堆客户端证书,当他们拨打电话时,他们可以使用其中任何一个。我将匹配传入请求中的客户端证书,以查看它是否与已存储的任何证书匹配,如果匹配,则该请求将得到满足。

现在我正在尝试找出存储这些客户端证书的最佳方法。我在想我可以将它们存储在数据库中,或者某种文件/blob 存储中,或者我了解到它们也可以安装在机器的存储中?

这些选项中哪一个是理想的或被认为是最佳实践?

存储客户端证书的最佳实践是什么?

编辑:我的服务器实际上在带有 IIS 的 Windows 计算机上运行一项服务,其他用户将使用该服务。

Man*_*uel 3

1.)回答您的实际问题:

您可以将 X.509 证书存储在任何您想要的位置,我们将该位置称为信任库。如果它在您的文件系统、数据库或其他地方。X.509 证书可以向任何人公开,不包含任何敏感信息。X.509 证书中仅存储公钥/私钥对的公钥。

您只需确保没有其他人能够在您的信任库中添加/删除/修改证书。否则,恶意者将能够将X.509 证书添加到您的信任库中,您会立即信任他。

2.) 关于你的评论

I will match the client cert from the incoming request to see if it matches any of the ones already stored, and if it does, the request will be honored. 
Run Code Online (Sandbox Code Playgroud)

简单地比较证书是不够的。任何人都可以向您发送任何证书。有人向您发送证书这一事实并不能证明该人是与该证书相对应的私钥的所有者。

为了确保安全,向您发送请求(您的传入请求)的人需要针对传入请求生成签名。如果您收到带有签名的传入请求,则可以使用 X.509 证书检查签名是否有效。那里有很多签名方案,您需要弄清楚您想要使用哪个(有些很简单,有些更复杂)。