Azure Key Vault 证书证书标识符、秘密标识符、密钥标识符之间的区别

Posted

技术标签:

【中文标题】Azure Key Vault 证书证书标识符、秘密标识符、密钥标识符之间的区别【英文标题】:Azure Key Vault Certificate Difference Between Certificate Identifier, Secret Identifier, Key Identifier 【发布时间】:2021-02-23 23:07:16 【问题描述】:

我使用过存储在 Azure Key Vault 中的机密,但这是第一次使用证书而不是机密进行身份验证。

我有一个存储在 Azure Key Vault 中的证书。我想使用此证书向 Azure AD 应用程序进行身份验证。

我了解,对于存储在 Azure Key Vault 中的机密,我们可以使用 @Microsoft.KeyVault(SecretUri='secretIdentifier') 通过应用程序设置在 Azure 函数中引用它们。

我注意到证书有三种类型的标识符:密钥、秘密和证书标识符。它们之间有什么区别,它们各自的用途是什么?

另外,我们可以使用 @Microsoft.KeyVault(SecretUri='Certificate's Secret Identifier') 通过秘密标识符访问证书并使用 if 进行身份验证吗?如果可以,这种方法有什么注意事项吗?

最后,为什么认为使用证书进行身份验证比使用机密更好?

到目前为止,我还没有找到一个对于以前没有使用过证书的人来说容易理解的解释。任何建议/解释将不胜感激。

【问题讨论】:

【参考方案1】:

关于 Keys、Secrets 和 Certificates 之间的区别,请参阅 Azure Key Vault 文档,在 Object Types 下:

https://docs.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates#object-types

将 Secrets 视为密码和连接字符串。密钥是可以使用各种算法生成的加密密钥。证书是具有可选策略(例如自动轮换)的密钥(或密钥对)。

使用证书而不是秘密进行身份验证有一个优势。优点是证书具有私钥和公钥部分。您的 API 调用的接收者可以仅使用证书的 public 部分验证您的身份,同时您可以安全地保护密钥库中的私有部分。秘密在主叫方和被叫方之间共享,并通过线路传输,因此泄露的机会更多。

【讨论】:

以上是关于Azure Key Vault 证书证书标识符、秘密标识符、密钥标识符之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Azure Key Vault 证书 - 创建基本约束 CA:True

如何使用 Azure Key Vault 中的证书/密钥对使用 Azure Pipelines 构建的代码进行签名?

如何在 Azure Key Vault 中序列化和反序列化 PFX 证书?

在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证

Azure Key Vault门户未显示秘密

将 Key Vault 证书(自签名)部署到 Web 应用程序时出现“错误请求”错误或“NoRegisteredProviderFound”