リモート マシンの証明書ストアにインストールされている X509 証明書の秘密鍵にアクセスしようとしています。
リモート サーバー上の証明書ストアと証明書にアクセスできますが、X509Certificate2 オブジェクトの PrivateKey プロパティを呼び出すと、「System.Security.Cryptography.CryptographicException: Keyset does not exist」というエラーが表示されます。このエラーに対して与えられた回答を確認しましたが、どれもうまくいかないようです。コードを呼び出しているユーザーが、リモート マシン上の秘密鍵ファイルとフォルダーに対するアクセス許可を持っていることを確認しました。以下は私のコードです
string storeName = "My";
if (!string.IsNullOrEmpty(machineName))
{
storeName = string.Format(@"\\{0}\My", machineName);
}
IntPtr storeHandle = NativeMethods.CertOpenStore(NativeMethods.CERT_STORE_PROV_SYSTEM, 0, 0, NativeMethods.CERT_SYSTEM_STORE_LOCAL_MACHINE, storeName);
if (storeHandle == IntPtr.Zero)
{
throw new CryptographicException(string.Format("Cannot connect to certificate Store: {0}", machineName));
}
IntPtr currentCertContext = IntPtr.Zero;
currentCertContext = NativeMethods.CertEnumCertificatesInStore(storeHandle, currentCertContext);
if (currentCertContext != IntPtr.Zero)
{
var cert = new X509Certificate2(currentCertContext);
var key = cert.PrivateKey; //Throws error
}
NativeMethods.CertCloseStore(storeHandle, 0);