使用X509Certificate2与Windows证书存储、HSM和Azure Key Vault

4

我有很多像下面这样使用X509Certificate2.PrivateKey的方法

    public SomeValue DoSomething(X509Certificate2 cert)
    {
        // do something that needs the cert.PrivateKey
    }

到目前为止,它们与存储在Windows证书存储中、私钥可访问的证书一起很好地运作。现在的问题是,我需要支持存储在HSM设备和Azure Key Vault HSM中的证书,其中私钥无法加载到内存中(因此PrivateKey属性为null)。
我正在寻找一种方法来避免更改公共方法的签名。如果PrivateKey属性是虚拟的,我可以轻松地创建子类并返回适当的AsymmetricAlgorithm实现以用于每种存储类型(为了清楚起见,例如在Azure Key Vault HSM中,AsymmetricAlgorithm将是调用Azure Key Vault进行签名的实现)。顺便说一下,PrivateKey属性的setter不允许我设置自定义的AsymmetricAlgorithm。
另一个问题是,PrivateKey属性现在不再流行,推荐使用GetRSAPrivateKey扩展方法。
有没有任何技巧可以让X509Certificate2.PrivateKey或GetRSAPrivateKey扩展方法返回我想要的类型的AsymmetricAlgorithm?
1个回答

1
使用KV时,RSA私钥不会离开KV,当您从KV获取“密钥”时,实际上获得的是密钥ID,而不是密钥。您需要将证书导出为PFX文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接