備忘録と書く練習

駆け出しのWEBデザイナーです。雑多にいろんな話をします。

HTTP.sysを使う

docs.microsoft.com

①HTTP.sys を使用するように ASP.NET Core アプリを構成する
Windows Server を構成する


①はサンプルコードをそのままProgram.csに貼り付けました。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseHttpSys(options =>
            {
                options.AllowSynchronousIO = false;
                options.Authentication.Schemes = AuthenticationSchemes.None;
                options.Authentication.AllowAnonymous = true;
                options.MaxConnections = null;
                options.MaxRequestBodySize = 30000000;
                options.UrlPrefixes.Add("http://localhost:5005");
            });
            webBuilder.UseStartup<Startup>();
        });


問題は②。
順に追いかけます。

1. 使うポートを決めたら、ポート開きます。
2. X.509 証明書を取得してインストール

Windows の場合は、New-SelfSignedCertificate PowerShell コマンドレットを使用して自己署名証明書を作成します。
(中略)
自己署名証明書か CA 署名証明書のいずれかをサーバーの Local Machine>Personal ストアにインストールします。

これについては違うサイトも参考にしてみる。

docs.microsoft.com

自己署名ルート証明書をつくるには、PowerShellでこれを叩く。( `はコマンド途中で改行の意味)
どうもCertStoreLocationの内容によっては管理者権限で実行しないとアクセスが拒否されるっぽい(たぶん)。

$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-Subject "CN=Sample" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\LocalMachine\My" -KeyUsageProperty Sign -KeyUsage CertSign

以下はサンプルコードから変更してます。
Subjectは証明書の件名、CertStoreLocationは証明書を格納する場所。

Subject "CN=Sample"
 :
CertStoreLocation "Cert:\LocalMachine\My"

ここで作った証明書は、以下で確認できます。

docs.microsoft.com

ローカルデバイスの証明書を表示するには

  1. [スタート] メニューから [実行] を選択し、「certlm .msc」と入力します。ローカルデバイスの証明書マネージャーツールが表示されます。
  2. 証明書を表示するには、左側のウィンドウの [証明書-ローカルコンピューター ] で、表示する証明書の種類のディレクトリを展開します。

証明書の拇印を後で使うのでメモっておく。

3. アプリがフレームワークに依存する展開の場合は、必要物をインストール

VSでデバッグすることを目指すのでとりあえず無視。

4. アプリに URL とポートを構成

これはデフォルトのまま行きます。Program.csのこの部分。

options.UrlPrefixes.Add("http://localhost:5005");
5. サーバーで URL プレフィックスを事前登録

netsh.exe を使用して、URL プレフィックスを予約し、X.509 証明書を割り当てることができます。 ツールを使用するには管理者特権が必要です。

これはコマンドプロンプトでこんな感じで。

netsh http add urlacl url=http://localhost:5005/ user=Users

内容はこのコマンドで確認できます。

netsh http show urlacl

:
予約済み URL            : http://localhost:5005/
        ユーザー: BUILTIN\Users
            リッスン: Yes
            委任: No
            SDDL: D:(A;;GX;;;BU)
6. サーバーで (2. で取得した)X.509 証明書を登録

コマンドプロンプトでこれを叩く。
(構文なので単純にコピペしてもだめよ)

netsh http add sslcert ipport=: certhash= appid="{}"

参考をまたググる
docs.microsoft.com

Appidパラメーターは、所有しているアプリケーションを識別するために使用できる GUID です。

GUID=Globally Unique Identifier、128ビットの整数値からなる、データを一意に識別するために用いられる識別子のこと。
www.sophia-it.com

VSでGUIDを生成できるっぽいので、レジストリ形式で作りました。
tech.la-fra.com

で、生成したGUIDをアプリに格納する。

参照用に、この GUID をパッケージ タグとしてアプリに格納します。

  • Visual Studio:
    • ソリューション エクスプローラー内でアプリを右クリックし、 [プロパティ] をクリックして、アプリのプロジェクト プロパティを開きます。
    • [パッケージ] タブを選択します。
    • 作成した GUID を [タグ] フィールドに入力します。

Certhashパラメーターは、証明書の拇印を指定

これは↑でメモっておいた証明書の拇印のこと。

これを当てはめて、コマンドを実行。
うまくいけば「SSL 証明書を正常に追加しました」と返ってくる。

※ipportにlocalhostって入れてたら「パラメーターが違います」って返ってきてちょいはまったけど、ここは文字通り「IPアドレス」で書いてあげる。

アプリを実行

紆余曲折あったけど、特にうがったことはせずこの通りで動きました。
ふむふむ、まだ勉強不足だなあ。