「内部エラーが発生しました。」X509Certificate2で​​PFXファイルをロードするとき

StackOverflow https://stackoverflow.com/questions/1345262

  •  20-09-2019
  •  | 
  •  

質問

私が使用し、自己署名証明書(C#)をしようとしています:

X509Certificate2 cert = new X509Certificate2(
    Server.MapPath("~/App_Data/myhost.pfx"), "pass");

共有ウェブホスティングサーバー上で、私はエラーを得ます:

System.Security.Cryptography.CryptographicException: An internal error occurred.

スタックトレースが

で終わります
System.Security.Cryptography.CryptographicException.
    ThrowCryptogaphicException(Int32 hr) +33
System.Security.Cryptography.X509Certificates.X509Utils.
    _LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, 
        Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
System.Security.Cryptography.X509Certificates.X509Certificate.
    LoadCertificateFromFile(String fileName, Object password, 
        X509KeyStorageFlags keyStorageFlags) +237
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(
    String fileName, String password) +131

私のdevのマシン上では、[OK]をロードします。 私は、秘密鍵アクセス(CERファイルがロードOK)を必要とするので、私は* .PFXない*の.cerファイルをロードした理由。 私はそのように私のdevのmochineにPFXを作っます:

makecert -r -n "CN=myhost.com, E=admin@myhost.com" -sky exchange -b 01/01/2009
    -pe -sv myhost.pvk myhost.cer
<b>pvk2pfx</b> -pvk myhost.pvk -spc myhost.cer -pfx myhost.pfx -po pass</code>

私はmakecertのバージョンv5.131.3790.0を使用しています。

役に立ちましたか?

解決

秘密鍵のローカルコンピュータストアを使用します:

X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet);

MachineKeySet には、以下のように記載されています「プライベートキーはローカルコンピュータストアではなく、現在のユーザーストアに格納されています」。フラグなしでのデフォルトは、ユーザーストアに配置することです。

あなたはディスクから証明書を読み、秘密鍵は、まだマイクロソフト暗号化API暗号化サービスプロバイダキーデータベースに格納されたオブジェクトに格納されているにもかかわらず。ホストしているサーバー上でASP.NETプロセスは、ユーザーストアにアクセスする権限がありません。

仕事をする -

(以下、いくつかのコメントによる)別のアプローチは、IISの設定またはアプリケーションプールのIDを変更することです。しかしながら、これは、(例えば、共有ホスティング環境での)場合ではないかもしれない、これらの設定項目へのアクセスがあることを前提としています。

他のヒント

私はMachineKeySetにそれを変えるのランディのソリューションを試してみましたが、その後エラーメッセージが表示されました

「キーを指定された状態で使用するための有効ではありません」

少しは周りのグーグルでの後、私はそれを変更することを提案ポスト見つけだからます:

var certificate = new X509Certificate2(certKeyFilePath, passCode, 
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet |       
X509KeyStorageFlags.PersistKeySet );

これは私の問題を整理。

私はまだIISの構成の設定アプリケーションプールの設定を変更する提案を試していません。行うにはこれは、trueに、「ロード・ユーザー・プロファイル」を設定し、サイトのアプリケーションプールの詳細設定にアクセスしてください。この設定がfalseの場合、キーコンテナは明らかにアクセスすることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top