'Key not valid for use in specified state' 在 .Net 5 中导出 X509Certificate2 时

'Key not valid for use in specified state' when exporting X509Certificate2 in .Net 5

我有一个应用可以执行以下操作...

var request = new CertificateRequest(
                distinguishedName,
                rsaKey,
                HashAlgorithmName.SHA384,
                RSASignaturePadding.Pkcs1);
var cert = new X509Certificate2(certFile).CopyWithPrivateKey(rsaKey);
cert.Export(X509ContentType.Pkcs12, "somepassphrase")

尝试指定可导出的私钥,但这没有帮助,不确定这是否是正确的方法,因为没有接受 rsa 对象的 X509Certificate2 构造函数

var cert = new X509Certificate2(certFile, "privateKeyPassphrase", X509KeyStorageFlags.Exportable).CopyWithPrivateKey(rsaKey);
cert.Export(X509ContentType.Pkcs12, "somepassphrase")

有谁知道可能是什么问题?

抛出错误是因为您的私钥不可导出。创建 RSACng 对象时必须指定导出策略(通过接受 CngKey 实例的构造函数)。

我现在有 pcks12,里面有这个证书和它的证书链。

var certsCollection = new X509Certificate2Collection();
certsCollection.Add(cert);
certsCollection.Add(rootCert);
File.WriteAllBytes(pkcs12File, certsCollection.Export(X509ContentType.Pkcs12, "somepassphrase"));

如果我按如下方式导入它并查看该证书的导出策略,它显示为 None,这是为什么?

 var colCerts = new X509Certificate2Collection();
 colCerts.Import(pkcs12File, "somepassphrase");