.net - 带有 Azure Key Vault 的 PKI

标签 .net azure certificate azure-keyvault pki

我发现自己处于需要颁发客户端证书以进行身份​​验证的情况。为此,我需要一个根证书或中间证书来签署客户端证书。这自然会导致需要安全存储签名证书。我有一个 Azure 订阅,它提供了一个 Key Vault,可以存储和创建证书。我对创建部分感到高兴,因为这意味着我的机器上不会有任何签名证书,甚至不会在内存中短暂存在。或者我是这么想的...

事实证明,Key Vault 不提供对证书对象的任何加密操作(例如 Key Vault - Key 提供)。这意味着我必须从保管库下载整个证书,让私钥离开“安全位置”。此时我正在质疑“安全”部分,因为根据我的理解,不应该导出私钥,但确实如此。

我需要一个 .Net 解决方案,所以我查看了 Azure SDK for .NetAzure Key Vault REST API但他们没有提供我需要的东西。

我看错地方了,还是 Azure Key Vault 不适合这样使用?

我最初想到的简化(我将省略对所有服务的身份验证)工作流程如下:

  1. 在保管库中创建根(或根和中间)
  2. 创建 key 对(例如 RSA.Create())
  3. 创建证书请求(例如 System.Security.Cryptography.X509Certificates.CertificateRequest)
  4. 通过 Azure SDK(或同等工具)将请求发送到 Vault,让 Root(或 Intermediate)签署请求
  5. 获取已签名的请求并使用它来创建已签名的客户端证书。

但是好像不太可能。

最佳答案

所以我找到的解决方案如下:

  1. 创建私钥(例如 openssl)
  2. 使用此 key 创建 pfx/p12 证书
  3. 将公共(public)证书部分上传为 Azure KeyVault Secret
  4. 将 key 上传为 Azure KeyVault Key 对象
  5. 为 RSA 或 ECDSA 创建自定义 X509SignatureGenerator,并使用 Azure SDK 和 KeyVault Key 对象进行签名(创建签名后请注意正确的 ASN.1 格式)。 .Net 6 代码是开源的,因此您可以查找标准 X509SignatureGenerator 的功能。
  6. 在 .Net 中创建证书请求并使用自定义 X509SignatureGenerator
  7. 按原样存储新创建的证书,或将其存储为带有公共(public)证书部分的 X509Certificate2Collection(之前上传到 Key Vault),以获得完整的信任链。

关于.net - 带有 Azure Key Vault 的 PKI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76182532/

相关文章:

C#:将单个自定义类数据绑定(bind)到表单控件(复选框?)

c# - NetMQ 未处理异常最佳实践

azure - 使用 Azure Devops Pipeline 将数据复制到没有公共(public)网络访问权限的存储帐户

java - 如何将证书从 PEM 转换为 JKS?

ssl - 证书链中中间证书的用途是什么?

c# - 在 C# 中验证 SSL 证书

c# - 如何在 .NET/ASMX 中更改 WebService 响应的标签名称?

.net - 在 .NET 中实现自定义 TraceListener

azure - Azure IoT 中心中的设备反欺骗如何工作?

azure - Azure 事件网格中的订阅验证事件消息架构是什么?