[ad_1]
みんな、
X509Certificate2 を使用して証明書ファイルから秘密鍵を取得する Web アプリケーションを開発しています。 コード スニペットは次のようになります。
public static RSACryptoServiceProvider GetSignProviderFromPfx() { var strFileName = "c:\cer\mycerfile.pfx"; var strPassword = "000000"; X509Certificate2 pc = new X509Certificate2(strFileName, strPassword, X509KeyStorageFlags.MachineKeySet); var ThePivateKey = pc.PrivateKey; return (RSACryptoServiceProvider)ThePivateKey; }
ただし、ステートメント pc.Privatekey により、 System.Security.Cryptography.CryptographicException “Invalid provider type specified” が発生します。 証明書ファイルに問題はないと確信しています。実際には秘密鍵があります。 また、プロパティ pc.HasPrivateKey も true を返します。
テスト環境は VS2013、window 7 です。
誰でも助けることができますか?
ありがとう。
私が試したこと:
私も次のことを試しました:
を。 VS2013でiis expressでデバッグしたところ、問題が発生しました。
b. 私と同じ環境の別のコンピューターでデバッグしましたが、問題も発生しました。
c. Windows Web Server 2008 R2 で実行されている iis を使用してアプリケーションをサーバーに発行しましたが、正常に動作しました。
d. アプリケーションを widows azure Web サイトに公開しましたが、問題なく動作しました。
したがって、コード スニペットに問題はないと思います。 例外が発生する主な理由は、実行環境に問題がある可能性があるためです。 異なる環境での認証ファイルの読み取り/書き込み権限を確認して比較したところ、すべて同じでした。
解決策 2
これをチェックして – CNG 証明書の X509Certificate2.PrivateKey にアクセスする際の「無効なプロバイダー タイプが指定されました」エラー – Decrypt my World[^].
解決策 3
var certificate = new X509Certificate2(certificateBytes, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
//^ここ
文字列 xml = “….”;
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.PreserveWhitespace = true;
xmlDocument.LoadXml(xml);
SignedXml signedXml = 新しい SignedXml(xmlDocument);
signedXml.SigningKey = certificate.GetRSAPrivateKey();
[ad_2]
コメント