Hosting gambar ASP.NET Core dengan Docker melalui HTTPS

Oleh Rick Anderson

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

Dokumen ini menjelaskan cara menjalankan gambar kontainer bawaan dengan HTTPS menggunakan antarmuka baris perintah .NET (CLI). Untuk petunjuk tentang cara menjalankan Docker dalam pengembangan dengan Visual Studio, lihat Mengembangkan aplikasi ASP.NET Core dengan Docker melalui HTTPS.

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

Prasyarat

.NET SDK saat 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 gambar bawaan melalui localhost. Instruksinya mirip dengan menggunakan sertifikat produksi. Sertifikat yang dihasilkan hanya dotnet dev-certs untuk digunakan dan localhost tidak boleh digunakan di lingkungan seperti Kubernetes. Untuk mendukung HTTPS dalam kluster Kubernetes, gunakan alat yang disediakan oleh Kelola Sertifikat TLS dalam Kluster untuk mengatur TLS dalam pod.

Gunakan dotnet dev-certs untuk membuat sertifikat yang ditandatangani sendiri untuk pengembangan dan pengujian.

Untuk sertifikasi produksi:

  • Alat dotnet dev-certs ini tidak diperlukan.
  • Sertifikat tidak perlu disimpan di lokasi yang digunakan dalam instruksi. Lokasi apa pun harus berfungsi, meskipun menyimpan sertifikat dalam direktori situs Anda tidak disarankan.

Instruksi yang terkandung dalam bagian sertifikat pemasangan volume berikut ke dalam kontainer menggunakan opsi baris perintah Docker -v . Anda dapat menambahkan sertifikat ke dalam gambar kontainer dengan COPY perintah di Dockerfile, tetapi tidak disarankan. Menyalin sertifikat ke dalam gambar tidak disarankan karena alasan berikut:

  • Sulit untuk menggunakan gambar yang sama untuk pengujian dengan sertifikat pengembang.
  • Sulit untuk menggunakan gambar yang sama untuk Hosting dengan sertifikat produksi.
  • Ada risiko signifikan dari pengungkapan sertifikat.

Menjalankan gambar kontainer bawaan dengan HTTPS

Gunakan instruksi berikut untuk konfigurasi sistem operasi Anda.

Windows menggunakan kontainer Linux

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.

Jalankan gambar kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS dalam shell perintah:

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

Dalam kode sebelumnya, ganti <CREDENTIAL_PLACEHOLDER> dengan kata sandi. Kata sandi harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Saat menggunakan PowerShell, ganti %USERPROFILE% dengan $env:USERPROFILE.

Catatan: Sertifikat dalam hal ini harus berupa .pfx file. Menggunakan .crt file atau .key dengan atau tanpa kata sandi tidak didukung dengan kontainer sampel. Misalnya, saat menentukan .crt file, kontainer dapat mengembalikan pesan kesalahan seperti 'SSL mode server harus menggunakan sertifikat dengan kunci privat terkait.'. Saat menggunakan WSL, validasi jalur pemasangan untuk memastikan bahwa sertifikat dimuat dengan benar.

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 sertifikasi 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.

Jalankan gambar kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

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

Dalam kode sebelumnya, ganti <CREDENTIAL_PLACEHOLDER> dengan kata sandi. Kata sandi harus cocok dengan kata sandi yang digunakan untuk sertifikat.

Windows yang 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. Saat menggunakan PowerShell, ganti %USERPROFILE% dengan $env:USERPROFILE.

Jalankan gambar kontainer dengan ASP.NET Core yang dikonfigurasi untuk HTTPS:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp

CATATAN:<CREDENTIAL_PLACEHOLDER> adalah tempat penampung untuk Kestrel kata sandi default sertifikat.

Kata sandi harus cocok dengan kata sandi yang digunakan untuk sertifikat. Saat menggunakan PowerShell, ganti %USERPROFILE% dengan $env:USERPROFILE.

Mengembangkan Aplikasi Inti ASP.NET dengan Docker melalui HTTPS

Lihat Mengembangkan aplikasi ASP.NET Core dengan Docker melalui HTTPS untuk informasi dan sampel tentang cara mengembangkan aplikasi ASP.NET Core dengan HTTPS dalam kontainer Docker.

Baca juga