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

标签 security ssl certificate x509certificate mutual-authentication

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

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

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

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

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

最佳答案

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 证书来检查签名是否有效。有很多签名方案,您需要弄清楚我们要使用的签名方案(有些简单,有些更复杂)。

关于security - 存储客户端证书的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146150/

相关文章:

web-services - 多个 Web 服务的集中身份验证和授权

c# - 如何使用 C# 控制台或 WinForms 应用程序中的 Windows 安全性确认证书弹出窗口选择证书?

mysql - 自动阻止 MySQL 暴力登录尝试

security - 加密 powershell 密码

ssl - 无法在 Laradock Nginx 中启动 Certbot 容器

wordpress - Firefox 51 标记 HTTP 登录,SSL 解决方案?

windows-7 - 本地机器 "Trusted roots"证书的私钥信任权限

security - PEM 文件格式在哪里指定?

asp.net - Web 身份验证状态 - session 与 Cookie?

web-services - 为什么我需要为 https 连接安装证书?