1. ホーム
  2. .net

HTTPSをサポートしたHttplistener

2023-09-16 04:29:46

質問

.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サポートを追加する手順は次のとおりです。

  1. C#アプリケーションのコードを更新して https の接頭辞が付くようにします。例

    String[] prefixes = { "http://*:8089/","https://*:8443/" };
    
    

    コード面では以上です。

  2. 証明書の面では 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の値を探せば見つかります。

上記を実現する他の方法があるかもしれませんが、私はこれでうまくいきました。