4

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

现在我试图弄清楚存储这些客户端证书的最佳方式是什么。我在想我可以将它们存储在数据库或某种文件/blob 存储中,或者我知道它们也可以安装在机器的存储中?

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

存储客户端证书的最佳做法是什么?

编辑:我的服务器实际上是在带有 IIS 的 Windows 机器上运行其他用户将使用的服务。

4

1 回答 1

2

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

您可以将 X.509 证书存储在任何您想要的位置,让我们将该位置称为truststore。如果它在您的文件系统、数据库或其他地方。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. 

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

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

于 2014-08-29T17:41:29.433 回答