'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
我有一个应用可以执行以下操作...
- 我创建了一个 RSACng 密钥并存储在内存中
- 我使用创建的 rsa 密钥创建了一个 csr 并将其提交给 public CA
var request = new CertificateRequest(
distinguishedName,
rsaKey,
HashAlgorithmName.SHA384,
RSASignaturePadding.Pkcs1);
- 我取回证书文件并保存到磁盘
- 然后我想为该证书创建一个 pkcs12 和如下所示的关联私钥,但出现“密钥无效..”错误
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");
我有一个应用可以执行以下操作...
- 我创建了一个 RSACng 密钥并存储在内存中
- 我使用创建的 rsa 密钥创建了一个 csr 并将其提交给 public CA
var request = new CertificateRequest(
distinguishedName,
rsaKey,
HashAlgorithmName.SHA384,
RSASignaturePadding.Pkcs1);
- 我取回证书文件并保存到磁盘
- 然后我想为该证书创建一个 pkcs12 和如下所示的关联私钥,但出现“密钥无效..”错误
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");