Hosting image ASP.NET Core dengan Docker Compose melalui HTTPS

ASP.NET Core menggunakan HTTPS secara default. HTTPS bergantung pada sertifikat untuk kepercayaan, identitas, dan enkripsi.

Dokumen ini menjelaskan cara menjalankan image kontainer yang sudah dibuat sebelumnya dengan HTTPS.

Lihat Mengembangkan Aplikasi ASP.NET Core dengan Docker melalui HTTPS untuk skenario pengembangan.

Sampel ini memerlukan klien Docker versi 17.06 atau yang lebih baru.

Prasyarat

.NET Core 2.2 SDK atau yang lebih baru diperlukan untuk beberapa instruksi dalam dokumen ini.

Sertifikat

Sertifikat dari otoritas sertifikat diperlukan untuk hosting produksi untuk domain. Let's Encrypt adalah otoritas sertifikat yang menawarkan sertifikat gratis.

Dokumen ini menggunakan sertifikat pengembangan yang ditandatangani sendiri untuk menghosting image siap pakai melalui localhost. Instruksinya mirip dengan menggunakan sertifikat produksi.

Untuk sertifikat produksi:

  • Alat dotnet dev-certs ini tidak diperlukan.
  • Sertifikat tidak perlu disimpan di lokasi yang digunakan dalam instruksi. Simpan sertifikat di lokasi mana pun di luar direktori situs.

Instruksi yang terdapat di bagian berikut menjelaskan cara me-mount sertifikat ke dalam kontainer sebagai volume menggunakan properti volumes di docker-compose.yml. Anda dapat menambahkan sertifikat ke dalam image kontainer dengan perintah COPY di Dockerfile, tetapi hal itu tidak disarankan. Menyalin sertifikat ke dalam gambar tidak disarankan karena alasan berikut:

  • Hal ini menyulitkan penggunaan gambar yang sama untuk pengujian dengan sertifikat pengembang.
  • Ini menyulitkan untuk menggunakan image yang sama untuk Hosting dengan sertifikat produksi.
  • Ada risiko signifikan dari kebocoran sertifikat.

Memulai kontainer dengan dukungan https menggunakan docker compose

Gunakan instruksi berikut untuk konfigurasi sistem operasi Anda.

Windows menggunakan kontainer Linux

Buat sertifikat dan konfigurasikan komputer lokal:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Perintah sebelumnya menggunakan .NET CLI:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Kata sandi yang ditentukan dalam file docker compose harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Mulai kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

macOS atau Linux

Buat sertifikat dan konfigurasikan komputer lokal:

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

Di Linux, dotnet dev-certs https --trust memerlukan .NET 9 atau SDK yang lebih baru. Untuk Linux di .NET 8.0.401 atau SDK yang lebih lama, lihat dokumentasi distribusi Linux Anda untuk mempercayai sertifikat.

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Kata sandi yang ditentukan dalam file docker compose harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Mulai kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Windows menggunakan kontainer Windows

Buat sertifikat dan konfigurasikan komputer lokal:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro

Kata sandi yang ditentukan dalam file docker compose harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Mulai kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Lihat juga

ASP.NET Core menggunakan HTTPS secara default. HTTPS bergantung pada sertifikat untuk kepercayaan, identitas, dan enkripsi.

Dokumen ini menjelaskan cara menjalankan image kontainer siap pakai dengan HTTPS.

Lihat Mengembangkan Aplikasi ASP.NET Core dengan Docker melalui HTTPS untuk skenario pengembangan.

Sampel ini memerlukan klien Docker versi 17.06 atau yang lebih baru.

Prasyarat

.NET Core 2.2 SDK atau yang lebih baru diperlukan untuk beberapa instruksi dalam dokumen ini.

Sertifikat-sertifikat

Sertifikat dari otoritas sertifikat diperlukan untuk hosting produksi untuk domain. Let's Encrypt adalah otoritas sertifikat yang menawarkan sertifikat gratis.

Dokumen ini menggunakan sertifikat pengembangan yang ditandatangani sendiri untuk menghosting image bawaan yang sudah dibuat sebelumnya melalui localhost. Instruksinya mirip dengan menggunakan sertifikat produksi.

Untuk sertifikat produksi:

  • Alat dotnet dev-certs ini tidak diperlukan.
  • Sertifikat tidak perlu disimpan di lokasi yang digunakan dalam instruksi. Simpan sertifikat di lokasi mana pun di luar direktori situs.

Instruksi yang terdapat di bagian berikut menjelaskan cara me-mount sertifikat ke dalam kontainer sebagai volume menggunakan atribut volumes di docker-compose.yml. Anda dapat menambahkan sertifikat ke dalam image kontainer dengan perintah COPY di Dockerfile, tetapi tidak disarankan. Menyalin sertifikat ke dalam gambar tidak disarankan karena alasan berikut:

  • Hal ini menyulitkan penggunaan gambar yang sama untuk pengujian dengan sertifikat pengembang.
  • Ini menyulitkan untuk menggunakan gambar yang sama untuk Hosting dengan sertifikat produksi.
  • Terdapat risiko signifikan terjadinya kebocoran sertifikat.

Memulai kontainer dengan dukungan https menggunakan docker compose

Gunakan instruksi berikut untuk konfigurasi sistem operasi Anda.

Windows dengan kontainer Linux

Buat sertifikat dan konfigurasikan komputer lokal:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Perintah sebelumnya menggunakan .NET CLI:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Kata sandi yang ditentukan dalam file docker compose harus cocok dengan kata sandi yang digunakan untuk sertifikat. Dalam perintah sebelumnya, ganti -\0pw- dengan kata sandi.

Mulai kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

macOS atau Linux

Buat sertifikat dan konfigurasikan komputer lokal:

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

dotnet dev-certs https --trust hanya didukung di macOS dan Windows. Anda perlu mempercayai sertifikat di Linux dengan cara yang didukung oleh distribusi Anda. Kemungkinan Anda perlu mempercayai sertifikat di browser Anda.

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

Kata sandi yang ditentukan dalam file docker compose harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Mulai kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Windows dengan kontainer Windows

Buat sertifikat dan konfigurasikan komputer lokal:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

Dalam perintah sebelumnya, ganti $CREDENTIAL_PLACEHOLDER$ dengan kata sandi.

Buat file docker-compose.debug.yml dengan konten berikut:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=-\0pw-
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro
The password specified in the docker compose file must match the password used for the certificate. In the preceding commands, replace `-\0pw-` with a password.


Start the container with ASP.NET Core configured for HTTPS:

```console
docker-compose -f "docker-compose.debug.yml" up -d

Lihat juga