[解決済み] ServerCertificateValidationCallbackの使用に関するベストプラクティス
質問
私は、2つのバックエンドサーバー間でいくつかのHTTP通信を使用するプロジェクトに取り組んでいます。サーバーは認証にX509証明書を使用しています。言うまでもなく、サーバーA(クライアント)がサーバーB(サーバー)に接続を確立するとき、使用される証明書が信頼できるサードパーティの権威からではないので、SSL/TLS検証エラーが発生します。
通常、これを処理する方法としては
ServicePointManager.ServerCertificateValidationCallback
などと言う。
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, error) =>
{
return cert.GetCertHashString() == "xxxxxxxxxxxxxxxx";
};
この方法は、理想的でないことを除けば、うまくいきます。これは本質的に、アプリケーションによって行われるすべてのhttpリクエストの検証手順をオーバーライドするものです。そのため、他のクラスがHTTPリクエストを実行しようとすると、失敗します。また、もし他のクラスが
ServicePointManager.ServerCertificateValidationCallback
を使用すると、突然通信に失敗するようになります。
唯一の解決策は、別の AppDomain クライアントの HTTP リクエストを実行するためです。しかし、1つのHTTPリクエストを実行するためだけに、そのようなことをしなければならないのは、本当に馬鹿げています。オーバーヘッドがとんでもないことになります。
このことを念頭に置いて、他のウェブクライアントに影響を与えずにクライアントのSSL/TLS検証を処理しながらウェブサービスにアクセスできる、.NETのより良い実践方法があるかどうか、誰か調査したことがありますか?
どのように解決するのですか?
.NET 4.5+で動作する許容できる(安全な)方法論としては
HttpWebRequest.ServerCertificateValidationCallback
. このコールバックを特定のリクエストのインスタンスに割り当てると、他のリクエストに影響を与えることなく、そのリクエストの検証ロジックだけが変更されます。
var request = (HttpWebRequest)WebRequest.Create("https://...");
request.ServerCertificateValidationCallback +=
(sender, cert, chain, error) =>
{
return cert.GetCertHashString() == "xxxxxxxxxxxxxxxx";
};
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] URLのPath.Combineは?
-
[解決済み】.NET 4.5でのデフォルトのSecurityProtocolについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] HttpClientを使用してhttpsを呼び出す