HTTPSをサポートしたHttplistener
質問
.NET HTTPListener を HTTPS 対応にすることに関して、多くの混乱した、時には矛盾した情報があるようです。私の理解は次のとおりです。
-
あるC#のコードには
https
のプレフィックスが必要です(例えばhttps://*:8443
) を付加することで、リスナーがこのポートで SSL リクエストを処理する必要があることを理解できるようになります。 -
実際のSSLハンドシェイクは隠れて行われ、以下のように処理されます
http.sys
によって処理されます (Windowsマシンのどこかに埋もれています)。C#のコードはSSLハンドシェイクを明示的に管理する必要はなく、カバーの下で行われるからです。 -
には"X.509 trusted certificate"が必要です。
httpListener
マシンに "X.509 trusted certificate" が必要で、何らかの方法でその証明書はポート 8443 (この例では) にバインドされる必要があります。
上記の私の理解は正しいでしょうか?もしそうでなければ、教えてください。
X.509証明書についてですが、私の理解では
-
使用方法
makecert
を使用して、X.509証明書を作成します。この証明書はパーソナル ストアに保存され、トラステッド ストアに移動する必要があります (これは HTTP リスナーが参照する場所です)。どうやらcertMgr
を使って移動させるか、あるいはmmc
を使って移動を実行することもできます。X.509 証明書の形式は 1 つだけではないみたいです (DER
,Base64
,pks
, pswdが保護されています。pks
private など)... 使用すべき好ましい形式はありますか?
証明書を信頼できるストアに入れたら、それを TCP ポートにバインドする必要があります。私は Windows 7 を使用しています。
httpcfg
または
netsh
?
どのように解決するのですか?
私は多くの宿題をやって、これを動作させることができました。.NET HttpListenerにSSLサポートを追加する手順は次のとおりです。
-
C#アプリケーションのコードを更新して
https
の接頭辞が付くようにします。例String[] prefixes = { "http://*:8089/","https://*:8443/" };
コード面では以上です。
-
証明書の面では Windows SDK コマンド コンソールまたは Visual Studio Professional コマンド コンソール
-
使用方法
makecert.exe
を使用して、認証局を作成します。例makecert -n "CN=vMargeCA" -r -sv vMargeCA.pvk vMargeCA.cer
-
使用方法
makecert.exe
を使用してSSL証明書を作成します。makecert -sk vMargeSignedByCA -iv vMargeCA.pvk -n "CN=vMargeSignedByCA" -ic vMargeCA.cer vMargeSignedByCA.cer -sr localmachine -ss My
-
MMC GUI を使用して、信頼できる認証局ストアに CA をインストールします。
- MMC GUI を使用して、個人用ストアに SSL 証明書をインストールします。
-
証明書のバインド先
IP address:port
とアプリケーションにバインドします。例netsh http add sslcert ipport=0.0.0.0:8443 certhash=585947f104b5bce53239f02d1c6fed06832f47dc appid={df8c8073-5a4b-4810-b469-5975a9c95230}
certhashは、SSL証明書のサムプリントです。これはmmcを使用して見つけることができます。 appidはVisual Studio...通常はassembly.csで、GUIDの値を探せば見つかります。
-
上記を実現する他の方法があるかもしれませんが、私はこれでうまくいきました。
関連
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] .net 4.5アップグレード後、System.Web.Httpが見つからない
-
[解決済み] asp.netでWebサービスのタイムアウト時間を長くする方法は?
-
[解決済み] .NET Framework 4 マルチターゲティングパックがアンインストールできない
-
[解決済み] このコンピュータには、.NET Framework 4.6またはそれ以降の更新プログラムがすでにインストールされています。
-
[解決済み] 文字列から数字を抽出する正規表現
-
[解決済み] System.Timers.Timer vs System.Threading.Timer
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?
-
[解決済み】HttpListenerのアクセスが拒否されました。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] gacutil.exeはどこですか?
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?
-
[解決済み】CERT/PEM証明書をPFX証明書に変換する方法
-
[解決済み] C#で簡単なプロキシを作成する方法は?
-
[解決済み] PKCS12エクスポート中にOpenSSLが "Loading 'screen' into random state" でハングアップする。
-
[解決済み] netsh.exeで使用するappidは何ですか?