Azure Key Vault 是不是支持客户端证书?

Posted

技术标签:

【中文标题】Azure Key Vault 是不是支持客户端证书?【英文标题】:Does Azure Key Vault support Client Certificates?Azure Key Vault 是否支持客户端证书? 【发布时间】:2021-02-02 17:09:09 【问题描述】:

Azure Key Vault 是否支持存储客户端证书以进行 mTLS 身份验证?

示例:

我有一个 HTTP 触发的 Azure 函数 (Python) 在函数应用中启用了HTTPS: YesClient Certificates: Required 当用户向端点发送请求并传递他们的客户端证书时,我可以通过 X-ARR-ClientCert 标头读取证书 然后我想创建一个KeyVaultCertificate 客户端,它将提取我们为所述请求者存档的客户端证书并验证其属性 not_valid_before/after issuer common_name ocsp_responder_url

问题:

Key Vault 似乎只允许上传服务器证书,不允许上传客户端证书。 它只允许.pfx.pem 文件扩展名 如果我没记错的话,客户端证书永远不会采用 .pfx 格式,因为它包含私钥 我尝试将.pfx 文件拆分为.pem(实际证书)和.key,然后仅上传.pem,但Key Vault 不喜欢这种格式。

Key Vault 是否以这种方式处理客户端证书,还是我应该将它们保存为 KV 机密并完全避免使用 KV 证书?

【问题讨论】:

【参考方案1】:

如果我没记错的话,客户端证书永远不会在 .pfx 中

你错了,你所有的假设都不正确。双向 TLS 需要两组证书和私钥,一组用于服务器,另一组用于客户端。您不能使用两个证书和一个私钥设置双向 TLS(如您所描述的)。

Azure Key Vault 完美支持任何类型的证书,包括客户端和服务器身份验证。

【讨论】:

这就是我感到困惑的地方。我们期望外部实体与我们预先共享他们的客户证书,我们会将其存储在 Key Vault 中,以便在他们提出请求时进行比较。如果上述外部实体拥有第 3 方颁发的客户证书(例如来自 Digicert),他们究竟为什么要将他们的私钥连同他们的客户证书一起发送给我们? 好的,现在我明白了。您将这些证书用于身份记帐。那么 Azure Key Vault 不是正确的解决方案。 Key Vault 应该安全地存储密钥。你必须有一个身份数据库,所以考虑使用它来存储客户端证书(公共证书)并在证书和帐户之间进行映射。 感谢@Crypt32 的澄清和确认。我在 OP 中添加了一个粗略的白板草图以获得更多上下文。所以我猜答案是:如果我真的想使用 Key Vault 来存储这些公共客户端证书,我可以将它们存储为 KV Secrets,并根据需要将它们拉入。否则我可以将它们存储在任何数据库/表存储/等中。

以上是关于Azure Key Vault 是不是支持客户端证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Azure Key Vault 中的 blob 存储访问密钥

Azure Key Vault 使用Azure Portal创建和查看Azure Key Vault

将 appsettings.json 文件中的机密存储在 Azure Key Vault 上的 .Net 控制台应用程序中

Azure Key Vault 中的密钥和机密有啥区别?

使用 Azure Key Vault 轮换机密

Azure DevOps -> Pipelines -> Library -> 访问 Azure Key Vault -> Key Vault 不允许从所有网络访问