「X509Certificate2 で pfx ファイルを読み込むと「内部エラーが発生しました。
2023-07-28 12:27:21
質問
自己署名証明書を使おうとしています(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
私の開発マシンでは、読み込みはOKです。 cerファイルではなく、*.pfxを読み込むのは、秘密鍵のアクセスが必要だからです(cerファイルは問題なく読み込めます)。 私の開発機では、このようにpfxを作成しました。
makecert -r -n "CN=myhost.com, [email protected]" -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
は、"秘密鍵は現在のユーザストアではなく、ローカルコンピュータストアに保存されます"と記述されています。フラグなしのデフォルトは、ユーザー ストアに配置されます。
ディスクから証明書を読み込んでオブジェクトに保存していても、秘密鍵は Microsoft Cryptographic API Cryptographic Service Provider 鍵データベースに保存されます。ホスティングサーバー上では、ASP.NET プロセスはユーザー ストアにアクセスする権限を持っていません。
別のアプローチ (以下のいくつかのコメントによる) は、IIS 構成または App Pool ID を変更することで、これは動作します。 しかし、これは、これらの構成項目へのアクセスがあることを前提としており、そうでない場合もあります (たとえば、共有ホスティング環境において)。
関連
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] X509Certificate コンストラクタの例外