【解決方法】x509certificate2 を使用して秘密鍵を取得すると、cryptographicexception “invalid provider type specified” が発生する

プログラミングQA


みんな、

X509Certificate2 を使用して証明書ファイルから秘密鍵を取得する Web アプリケーションを開発しています。 コード スニペットは次のようになります。

C#
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

解決策 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();

コメント

タイトルとURLをコピーしました