2

リモート マシンの証明書ストアにインストールされている 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);
4

0 に答える 0