簡體   English   中英

使用代碼在證書的私鑰上設置權限

[英]Setting permissions on private key for a certificate using code

我有以下代碼,其中SIGNED_FILENAME是一個常量,指向包含私鑰的現有pfx文件。

X509Certificate2 cert = new X509Certificate2(SIGNED_FILENAME, PASSWORD, X509KeyStorageFlags.MachineKeySet);
RSACryptoServiceProvider certRsa = cert.PrivateKey as RSACryptoServiceProvider; 

當我使用代碼向私鑰添加權限時,我發現它們是在certRsa.CspKeyContainerInfo.UniqueKeyContainerName中指定的文件上設置的。 當我在“證書” mmc管理單元中查看證書權限時,沒有設置新權限。

當我通過Certificates mmc管理單元手動設置密鑰時,我發現設置權限的私鑰與我在上面提到的UniqueContainerName屬性中找到的私鑰不同。

TLDR:每次我運行這兩行代碼時,密鑰容器文件都會更改。

為什么會發生這種情況?我如何在證書mmc管理單元中對同一密鑰設置權限?

顯然是因為每次重新生成密鑰容器(或某種東西)時,我都是從文件中打開它的。 這是有效的代碼:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2 c = store.Certificates
    .Find(X509FindType.FindBySubjectName, SIGNED_SUBJECT, true) 
    .Cast<X509Certificate2>()
    .FirstOrDefault();
    store.Close();

RSACryptoServiceProvider rsa = c.PrivateKey as RSACryptoServiceProvider;
Console.WriteLine("Certificate thumbprint:" + c.Thumbprint);
Console.WriteLine("From machine key store?: " + rsa.CspKeyContainerInfo.MachineKeyStore);
Console.WriteLine("Key container name: " + rsa.CspKeyContainerInfo.KeyContainerName);
Console.WriteLine("Key unique container name: " + rsa.CspKeyContainerInfo.UniqueKeyContainerName);  

以前,從我的原始帖子(在此處以文件形式打開證書)運行代碼段時,打印到控制台的關鍵信息每次都會更改。 每次運行修改后的代碼都會顯示相同的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM