【发布时间】:2021-05-27 11:39:35
【问题描述】:
我有一个公钥证书和一个私钥。在添加到 x509store 之前,我想用密码保护私钥。
我的要求是,当我使用主题名称从商店中找到 x509certificate2 时,我应该使用私钥获取证书。但是私钥应该受到密码保护,没有任何 ui 提示。
创建 rsacryptoservice 提供程序时,我尝试将密钥密码附加到 csp 参数,我可以创建 rsacryptoserviceprovider 对象。我已将其附加到 x509certificate2 并添加到 Windows 商店。但是从存储私钥检索后抛出加密异常。
var cspParams = new CspParameters
{
ProviderType = 1,
Flags = CspProviderFlags.UseMachineKeyStore
};
string passphrase = "password";
char[] passPhrase = passphrase.ToCharArray();
SecureString keyPassword = new SecureString();
for (int i = 0; i < passPhrase.Length; i++)
{
keyPassword.AppendChar(passPhrase[i]);
}
cspParams.KeyPassword = keyPassword;
using (RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams))
{
rsaProvider.ImportParameters(rsaParam);
rsaProvider.PersistKeyInCsp = true;
X509Certificate2 x509Certificate = new X509Certificate2(Convert.FromBase64String(cryptoCertificate),
"123",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.PersistKeySet)
{PrivateKey = rsaProvider};
store.Add(x509Certificate);
}
【问题讨论】:
-
你得到了什么错误?
-
只有我一个人,但代码清单包含两个重复的代码部分?
-
对于 PrivateKey 字段,CspKeyContainerInfo、KeySize 和 PublicOnly 字段会抛出加密异常。
-
你能发布完整的异常和堆栈跟踪吗?
-
'((System.Security.Cryptography.RSACryptoServiceProvider)certificate.PrivateKey).CspKeyContainerInfo' 引发了“System.Security.Cryptography.CryptographicException”类型的异常
标签: c# rsa private-key x509certificate2