0

IIS6.0 で SSL に証明書を使用するために、Windows マイ ストアに証明書を展開しようとしています。アプリケーションの実行中は、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 に答える