我有很多像下面这样使用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?