Azure Key Vault

h5qlskok  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(109)

我发现自己处于需要颁发客户端证书以进行身份验证的情况。为此,我需要一个根或中间证书,将签署客户端的。这会自动导致需要对签名证书进行安全存储。我有一个Azure订阅,它提供了一个密钥库,可以存储和创建证书。我对创建部分很满意,因为这意味着我的机器上没有任何签名证书,甚至在内存中也没有。或者我是这么想的。。
结果发现Key Vault不提供对证书对象的任何加密操作(例如Key Vault - Key)。这意味着我将不得不从保险库下载整个证书,让私钥离开“安全位置”。在这一点上,我质疑“安全”部分,因为在我的理解中,不应该有可能导出私钥,但它是。
我需要一个.Net解决方案,所以我看了Azure SDK for .Net和Azure Key Vault REST API,但它们没有提供我所需要的。
是在错误的地方寻找,还是Azure Key Vault不应该以这种方式使用?
我最初想到的简化的(我将省略对所有服务的身份验证)工作流类似于:
1.在Vault中创建根目录(或根目录和中间目录
1.创建密钥对(例如RSA.Create()
1.创建证书请求(例如System.Security.Cryptography.X509Certificates.CertificateRequest
1.通过Azure SDK(或其他类似工具)将请求发送到Vault,让Root(或中间用户)对请求进行签名
1.获取已签名的请求并使用它创建已签名的客户端证书。
但这似乎是不可能的。

hjzp0vay

hjzp0vay1#

所以我找到的解决方案如下:
1.创建一个私钥(例如openssl)
1.使用此密钥创建pfx/p12证书
1.将公共证书部分上载为Azure KeyVault Secret
1.将密钥作为Azure KeyVault密钥对象上载
1.为RSA或ECDSA创建自定义X509 SignatureGenerator,并使用Azure SDK和KeyVault Key对象进行签名(创建签名后请注意正确的ASN.1格式)。.Net 6代码是开源的,因此您可以查找标准X509 SignatureGenerator的功能。
1.在.Net中创建证书请求并使用自定义X509 SignatureGenerator
1.将新创建的证书按原样存储或存储为X509 Certificate 2Collection(带有公共证书部分,之前已上传到Key Vault),以获得完整的信任链。

相关问题