代码之家  ›  专栏  ›  技术社区  ›  mahlatse

x509证书IIS私钥访问[重复]

  •  0
  • mahlatse  · 技术社区  · 7 年前

    我有以下代码,其中SIGNED\u FILENAME是一个常量,指向包含私钥的现有pfx文件。

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

    当我通过Certificates mmc管理单元手动设置密钥时,我发现它设置权限的私钥与我在上面提到的UniqueContainerName属性中找到的不同。

    TLDR:每次我运行这两行代码时,密钥容器文件都会发生变化。

    为什么会发生这种情况?我如何设置证书mmc管理单元对同一密钥的权限?

    0 回复  |  直到 12 年前
        1
  •  0
  •   Mike Cheel    12 年前

    显然是因为每次重新生成密钥容器(或其他)时,我都是从一个文件打开它。以下是有效的代码:

    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);  
    

    以前,当从我的原始文章(在这里我将证书作为文件打开)运行代码段时,每次打印到控制台的密钥信息都会更改。每次运行修改后的代码都会显示相同的信息。