【问题标题】:Best practice to store client certificates?存储客户端证书的最佳实践?
【发布时间】:2014-08-05 18:46:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 证书是公开信息。它们可以像电话簿中的电话号码一样发布。处理它们并没有真正的最佳实践。有时,您会看到一些与隐私相关的问题,例如服务器根据证书和日志文件等公共信息泄露其用户的信息。但这似乎不适用于这里。匹配的私钥(或 PKCS 12 文件)是另一回事。
  • 拥有客户证书并不安全,也没有特别的理由这样做。您需要验证的是证书的所有者 是否被授权 使用您的服务器。您不需要证书,只需要一个主题DN 表。当客户端更新时,拥有实际证书也会导致问题。

标签: security ssl certificate x509certificate mutual-authentication


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2010-12-04
    • 2020-04-05
    相关资源
    最近更新 更多