0

我正在尝试将证书部署到 windows-my 商店中,以便在 IIS6.0 中将其用于 SSL。当应用程序运行时,我在 SSLDiag 输出中看不到任何错误,并且一切正常,但是一旦我关闭应用程序 SSLDiag 就会显示错误:

#WARNING: You have a private key that corresponds to this certificate 
but CryptAcquireCertificatePrivateKey failed

我检查了机器密钥集,并注意到在我关闭应用程序后,它会使用已创建的密钥删除文件。这是我检查的位置:

C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 

如何在机器密钥集中保留创建密钥文件?

这是我正在使用的代码:

        using(var openFileDialog = new OpenFileDialog())
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                var password = "password";
                var certificate = new X509Certificate2(openFileDialog.FileName, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
                var keystore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                keystore.Open(OpenFlags.MaxAllowed);
                keystore.Add(certificate);
                keystore.Close();
            }
        }

我尝试了 X509KeyStorageFlags 的不同变体,但一旦我关闭应用程序,该文件仍会从机器键集中删除。为什么文件被删除,我该如何防止它?

4

1 回答 1

0

我找到了解决方案:

certificate.PrivateKey.PersistKeyInCsp = true;

这使私钥保留在机器密钥集中。我想当 X509Certificate2 对象释放其资源时,密钥已被删除。

于 2012-10-18T15:48:28.790 回答