0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WSL2 + Docker + ASP.NET Core Web アプリを https で実行する

Posted at

はじめに

前回の以下の記事では、WSL2 上の Docker で ASP.NET Core Web アプリを実行し、Visual Studio 2022(Visual Studio Cdoe ではなく) でデバッグする方法を説明しました。

この記事では、実行したコンテナーへ http で接続を行っていたので、今回は、https で接続できるようにする方法を説明します。Windows 側の .NET CLI で自己署名証明書を作成し、WSL2 上のコンテナー起動時に同証明書を設定する方法を説明します。

前提条件

.NET CLI による自己署名証明書の作成

Windows 側で、dotnet dev-certs https -eq <PFX ファイル名> -p <PFX ファイルのパスワード> を実行し、自己署名証明書を作成します。以下の NetCoreWebAppOnWslDocker001.pfxPfxFilePassword の部分は、任意に指定してください。

cmd
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\NetCoreWebAppOnWslDocker001.pfx -p PfxFilePassword

カレントユーザーの証明書ストアの [個人] に、自己署名証明書が、フレンドリ名: ASP.NET Core HTTPS development certificate で登録され、%USERPROFILE%\.aspnet\https\ ディレクトリに、指定した名前の PFX ファイルが出力されます。

次に、dotnet dev-certs https --trust を実行し、自己署名証明書を信頼します。

cmd
dotnet dev-certs https --trust

[セキュリティ警告] - [はい] を選択します。カレントユーザーの証明書ストアの [信頼されたルート証明機関] に、自己署名証明書が登録されます。
image.png

Windows 環境変数を WSL へ共有

Windows 側で %USERPROFILE% 以下へ出力した PFX ファイルのパスを WSL で参照するために、環境変数 USERPROFILE を WSL 側へ共有します。
Windows 側で、setx <環境変数名> <値> を実行してください。カレントユーザーの環境変数に WSLENV、値 USERPROFILE/up を追加します。"/up" は、オプションで、Windows 側から、WSL 側へパスを変換して環境変数を共有します。

cmd
setx WSLENV USERPROFILE/up

上記のコマンド実行後、WSL のシェルを起動している場合は、ログアウトし、シェルを起動しなおしてください。Windows Terminal を使用している場合は、Windows Terminal を再起動するか、あたらしいプロセスを起動して以降の手順を実行してください。Windows Terminal のタブで、WSL のシェルを起動しても環境変数の共有が行われませんでした。

WSL のシェルを起動して、環境変数 USERPROFILE が共有されていることを確認します。

WSL
echo $USERPROFILE

次に、WSL 側から、環境変数を含めたパスで、Windows 側で作成した PFX が参照できることを確認します。

WSL
ls $USERPROFILE/.aspnet/https/

コンテナーの起動

docker run でコンテナーを起動します。
-v で、PFX ファイルの格納場所: $USERPROFILE/.aspnet/https/ をコンテナーの /https/ にマウントしています。
-e で、コンテナーの環境変数を設定しています。
ASPNETCORE_HTTPS_PORT では、HTTP 要求を HTTPS にリダイレクトする際のリダイレクト先のポートを指定しています。ASPNETCORE_Kestrel__Certificates__Default__Path では、マウントしたパスを起点とした PFX ファイルの場所、ASPNETCORE_Kestrel__Certificates__Default__Password では、PFX のパスワードを指定しています。

WSL
docker run -d --rm --name netcorewebapp001 \
-p 8080:80 -p 8081:443 \
-v $USERPROFILE/.aspnet/https/:/https/ \
-e ASPNETCORE_URLS="https://+;http://+" \
-e ASPNETCORE_HTTPS_PORT=8081 \
-e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/NetCoreWebAppOnWslDocker001.pfx \
-e ASPNETCORE_Kestrel__Certificates__Default__Password="PfxFilePassword" \
hiromasa/netcorewebapp001

https で Web アプリにアクセスして、正しく動作することを確認します。
image.png

まとめ

Windows 側の .NET CLI で自己署名証明書を %USERPROFILE% 以下に保存し、WSL 側から環境変数で参照できるようにしました。自己署名証明書の作成方法は、いくつかの方法があると思いますが、.NET CLI だと容易に作成できます。
また、作成した自己署名証明書をコンテナーイメージに含めず、コンテナー起動時に証明書を指定し、https で接続する方法も説明しました。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?