如何将ECDSA公钥与其私钥配对

时间:2019-05-20 03:53:59

标签: c# x509certificate2

我已经使用certreq创建了ECDSA CSR,现在我想将证书导入到本地存储中并将其与私钥配对。我可以导入RSA公钥并对其进行配对,也可以导入ECDSA证书,但是它们缺少私钥...

我已经研究了我可以看到的每个类上的各种方法和属性-它们似乎都没有一种直接的方法来设置ECDsa时的“设置”私钥-一种有前途的方法是“ ECDsaCertificateExtensions.CopyWithPrivateKey “方法-但这显示为没有定义,我不想强​​迫使用此方法的人下载其他版本的.net等(我使用的是Windows 10)

certificate.PrivateKey = foundCSR.PrivateKey;

一旦在系统中找到CSR,就可以很好地用于设置RSA私钥。尝试将其作为ECDsa密钥时会引发错误“仅支持实现ICspAsymmetricAlgorithm的非对称密钥”

尝试将此密钥放入RSACryptoProvider blob中是不好的,因为它不是基于RSA的(我假设是)-GetECDsaPrivateKey方法仅获取该密钥-是否有等效于SetECDsaPrivateKey的密钥?

(我也愿意使用其他方式来获得certreq -accept的功能-这基本上是目标,导入证书,将其与私钥配对,删除csr)

1 个答案:

答案 0 :(得分:0)

CopyWithPrivateKey是唯一的内置方法。它带有.NET Framework 4.7.2,它内置于Windows 10 1803+中。

为了保持较低的依赖性,主要替代方法是P /调用CertGetCertificateContextProperty(和CertSetCertificateContextProperty)在CERT_KEY_PROV_INFO_PROP_ID属性上进行复制。这比使用CopyWithPrivateKey不太安全,因为它不检查密钥是否匹配或目标证书还没有被覆盖的属性。它对于临时密钥也不起作用。

第二种选择是复制method from .NET Coreits preconditions

我个人将4.7.2作为依赖项。