HTTPS 経由で Docker を使用して ASP.NET Core イメージをホストするHosting ASP.NET Core images with Docker over HTTPS

作成者: Rick AndersonBy Rick Anderson

既定では、ASP.NET Core で HTTPS が使用されます。ASP.NET Core uses HTTPS by default. HTTPS は、信頼、id、および暗号化のための 証明書 に依存します。HTTPS relies on certificates for trust, identity, and encryption.

このドキュメントでは、HTTPS で事前に構築されたコンテナーイメージを実行する方法について説明します。This document explains how to run pre-built container images with HTTPS.

開発シナリオについては、「 HTTPS 経由の Docker を使用した ASP.NET Core アプリケーションの開発 」を参照してください。See Developing ASP.NET Core Applications with Docker over HTTPS for development scenarios.

このサンプルでは、docker 17.06 以降の docker クライアントが必要です。This sample requires Docker 17.06 or later of the Docker client.

[前提条件]Prerequisites

このドキュメントの一部の手順では、 .Net Core 2.2 SDK 以降が必要です。The .NET Core 2.2 SDK or later is required for some of the instructions in this document.

証明書Certificates

ドメインの運用ホストには、証明機関からの証明書が必要です。A certificate from a certificate authority is required for production hosting for a domain. Let's Encrypt は、無料の証明書を提供する証明機関です。Let's Encrypt is a certificate authority that offers free certificates.

このドキュメントでは、事前に構築されたイメージをホストするために 自己署名の開発証明書 を使用 localhost します。This document uses self-signed development certificates for hosting pre-built images over localhost. 手順は、実稼働証明書の使用に似ています。The instructions are similar to using production certificates.

実稼働証明書の場合:For production certs:

  • dotnet dev-certsツールは必要ありません。The dotnet dev-certs tool is not required.
  • 手順で使用した場所に証明書を保存する必要はありません。Certificates do not need to be stored in the location used in the instructions. 任意の場所を使用できますが、証明書をサイトディレクトリ内に格納することはお勧めしません。Any location should work, although storing certs within your site directory is not recommended.

次のセクションに記載されている手順では、Docker のコマンドラインオプションを使用して証明書をコンテナーにマウントし -v ます。The instructions contained in the following section volume mount certificates into containers using Docker's -v command-line option. Dockerfile でコマンドを使用してコンテナーイメージに証明書を追加することもでき COPY ますが、この方法はお勧めしません。 DockerfileYou could add certificates into container images with a COPY command in a Dockerfile , but it's not recommended. 証明書をイメージにコピーすることは、次の理由から推奨されません。Copying certificates into an image isn't recommended for the following reasons:

  • 開発者の証明書を使用したテストで同じイメージを使用するのは困難です。It makes difficult to use the same image for testing with developer certificates.
  • 実稼働証明書を使用してホストする場合、同じイメージを使用するのは困難です。It makes difficult to use the same image for Hosting with production certificates.
  • 証明書の公開には大きなリスクがあります。There is significant risk of certificate disclosure.

HTTPS を使用した既成のコンテナーイメージの実行Running pre-built container images with HTTPS

オペレーティングシステムの構成については、次の手順に従います。Use the following instructions for your operating system configuration.

Linux コンテナーを使用した WindowsWindows using Linux containers

証明書を生成してローカルコンピューターを構成する:Generate certificate and configure local machine:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

上記のコマンドで、を { password here } パスワードに置き換えます。In the preceding commands, replace { password here } with a password.

コマンドシェルで HTTPS 用に構成された ASP.NET Core でコンテナーイメージを実行します。Run the container image with ASP.NET Core configured for HTTPS in a command shell:

docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/core/samples:aspnetapp

PowerShellを使用する場合は、を %USERPROFILE% に置き換え $env:USERPROFILE ます。When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.

パスワードは、証明書に使用されているパスワードと一致している必要があります。The password must match the password used for the certificate.

macOS または LinuxmacOS or Linux

証明書を生成してローカルコンピューターを構成する:Generate certificate and configure local machine:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

dotnet dev-certs https --trust は、macOS と Windows でのみサポートされています。dotnet dev-certs https --trust is only supported on macOS and Windows. ディストリビューションでサポートされている方法で、Linux 上の証明書を信頼する必要があります。You need to trust certs on Linux in the way that is supported by your distribution. ブラウザーで証明書を信頼する必要があると考えられます。It is likely that you need to trust the certificate in your browser.

上記のコマンドで、を { password here } パスワードに置き換えます。In the preceding commands, replace { password here } with a password.

HTTPS 用に構成された ASP.NET Core でコンテナーイメージを実行します。Run the container image with ASP.NET Core configured for HTTPS:

docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/core/samples:aspnetapp

パスワードは、証明書に使用されているパスワードと一致している必要があります。The password must match the password used for the certificate.

Windows コンテナーを使用した windowsWindows using Windows containers

証明書を生成してローカルコンピューターを構成する:Generate certificate and configure local machine:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust

上記のコマンドで、を { password here } パスワードに置き換えます。In the preceding commands, replace { password here } with a password. PowerShellを使用する場合は、を %USERPROFILE% に置き換え $env:USERPROFILE ます。When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.

HTTPS 用に構成された ASP.NET Core でコンテナーイメージを実行します。Run the container image with ASP.NET Core configured for HTTPS:

docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ mcr.microsoft.com/dotnet/core/samples:aspnetapp

パスワードは、証明書に使用されているパスワードと一致している必要があります。The password must match the password used for the certificate. PowerShellを使用する場合は、を %USERPROFILE% に置き換え $env:USERPROFILE ます。When using PowerShell, replace %USERPROFILE% with $env:USERPROFILE.