【问题标题】:Determine if the client certificate comes from a smarcard in mTLS确定客户端证书是否来自 mTLS 中的智能卡
【发布时间】:2022-12-10 19:48:25
【问题描述】:

我正在设计一个 Web 访问网关,它使用 mTLS 机制通过证书对用户进行身份验证。我希望能够识别使用智能卡访问系统的用户,并将他们与不使用智能卡的用户分开,以便授予不同级别的访问权限和特权。

当我在服务器上收到证书时,我可以访问证书的所有参数,但我不知道如何识别证书是否来自智能卡。乍一看,mTLS 过程是透明的,并且与证书的来源无关,但是,一些网站设法做出这种区分。

如果客户端证书来自智能卡(硬件证书)还是软件证书,如何从 Web 服务器以某种方式确定?

【问题讨论】:

  • 这看起来更像是一个编程问题而不是安全问题。还有很多你没有谈论的因素。你们发行智能卡或证书吗?您控制智能卡读卡器吗?您如何在身份验证时获得客户端证书?我们需要更多细节,这很可能会出现在 Stackoverflow 上。
  • @schroeder 这是安全性而不是编程,因为我询问了 mTLS 或 X509 证书提供的机制来识别来源,如果你注意到我没有谈论任何特定的语言或实现,也不需要你提到的任何东西,因为我问题已在第一个答案中成功解决。
  • 答案不在于安全,而在于服务流程和程序设计。如果您对这个答案感到满意,那么它确实是关于编程而不是关于安全性的。

标签: ssl authentication certificate x509 smartcard


【解决方案1】:

您需要在发行时处理此问题。为此有很多策略。例如,在 Windows 上,您可能需要使用来自 Microsoft 智能卡密钥存储提供商之一的密钥来颁发证书。或者您可以在颁发智能卡时颁发证书,并且您会知道密钥驻留在卡上。不幸的是,这可能是一个相当复杂的主题——您必须设计您的发行系统,以便您知道密钥是在智能卡上生成的并且不可导出(并且您必须选择能够生成强密钥的智能卡)。

您可以使用只向智能卡颁发密钥的 CA,或者添加特定于您的方案的 EKU(Windows 使用特定的 EKU 进行智能卡登录身份验证),或者向证书添加颁发策略 OID。无论您选择什么,这就是您在出示证书时要检查的内容,以确保它在智能卡上。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2020-11-13
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2011-02-15
    相关资源
    最近更新 更多