Die Bereitstellung einer ASP.NET Core HTTPS-Anwendung mit einem SSL-Zertifikat mag auf den ersten Blick trivial erscheinen, insbesondere mit Diensten wie Let's Encrypt, die Zertifikate kostenlos und zugänglich machen. In der Praxis kann dies jedoch schnell kompliziert werden, insbesondere wenn man diesen Prozess mit der Bereitstellung moderner Anwendungen in Containerumgebungen kombiniert.
Das Einrichten von SSL-Zertifikaten erfordert eine Reihe präziser Schritte: Sie müssen wissen, wie Sie die Zertifikatsdateien korrekt in einen DOCKER-Container einbinden, damit die Anwendung darauf zugreifen kann, Sie müssen Dateiformate wie PEM oder RSA verwalten, um sicherzustellen, dass sie mit Kestrel (dem integrierten Webserver von ASP .NET Core) kompatibel sind, und Sie müssen die Umgebungsvariablen entsprechend konfigurieren, damit die Anwendung sie korrekt verwenden kann. Jeder dieser Schritte kann, wenn er nicht sorgfältig ausgeführt wird, zu Fehlern oder Komplikationen führen.
In diesem Artikel konzentrieren wir uns ausschließlich auf den Prozess der HTTPS-Konfiguration einer ASP.NET Core-Anwendung mit einem von Let's Encrypt selbst erzeugten SSL-Zertifikat. Wir werden sehen, wie Sie Certbot installieren, das SSL-Zertifikat generieren, Kestrel für HTTPS konfigurieren und die Anwendung in einem Docker-Container bereitstellen. Um dieser Anleitung folgen zu können, benötigen Sie einen Linux-Server, auf dem Docker bereits installiert und konfiguriert ist, und Sie müssen die grundlegenden Befehle zum Erstellen und Verwalten von Images beherrschen. Wenn Sie diese Schritte befolgen, können Sie Ihre Anwendungen problemlos mit dem HTTPS-Protokoll konfigurieren.
Schritt 1- Installation von Certbot auf einem Linux-Server.
Der erste Schritt, um ein kostenloses SSL-Zertifikat von Let's Encrypt zu erhalten, ist die Installation von Certbot auf Ihrem Linux-Server. Certbot ist ein Kommandozeilen-Tool, das die Beantragung von SSL/TLS-Zertifikaten vereinfacht.
- Aktualisieren Sie den Server und installieren Sie Certbot.
# Für Ubuntu/Debian
sudo apt update
sudo apt install certbot-y
Schritt 2- Generierung des SSL-Zertifikats mit Let's Encrypt (CertBot).
Um ein SSL-Zertifikat mit Let's Encrypt unter Verwendung der DNS-01-Challenge zu erhalten, müssen Sie die Inhaberschaft Ihrer Domain nachweisen, indem Sie einen speziellen DNS-TXT-Eintrag erstellen. Hier erfahren Sie, wie Sie dabei vorgehen müssen:
- Generieren Sie ein SSL-Zertifikat mit der Challenge DNS-01:.
sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d ihre-domain.com --key-type rsa
Dieser Befehl verwendet certonly
, um nur das Zertifikat zu erhalten, ohne automatisch einen Webserver einzurichten, was uns die volle Kontrolle über seine Verwendung gibt, insbesondere bei benutzerdefinierten Einsätzen wie Docker.
Die Option --Manual
wird gewählt, um das Zertifikat über eine manuell verwaltete DNS-Challenge zu validieren, was nützlich ist, wenn der DNS-Anbieter keine Automatisierung unterstützt, und --Manual-auth-hook
gibt das Skript an, das dabei hilft, die Erstellung des erforderlichen DNS-Eintrags zu automatisieren.
Schließlich wird mit --preferred-challenges dns
angegeben, dass die DNS-01-Challenge bevorzugt wird, da sie in vielen Umgebungen flexibler ist.
Sobald dieser Befehl ausgeführt wurde, fordert Certbot Sie auf, einen bestimmten DNS-Eintrag zu erstellen, um die Domain-Eigenschaft zu bestätigen. Folgen Sie den bereitgestellten Anweisungen.
- Folgen Sie den Anweisungen von Certbot für die DNS-Challenge:.
Nachdem Sie den Certbot-Befehl ausgeführt haben, wird Certbot Sie auffordern, einen DNS-TXT-Eintrag zu erstellen, um die Inhaberschaft Ihrer Domain zu bestätigen. Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Please deploy a DNS TXT record under the name
_acme-challenge.ihre-domain.com with the following value:
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
- Fügen Sie den DNS-TXT-Eintrag hinzu.
Gehen Sie in den DNS-Verwaltungsbereich Ihres Domainanbieters und erstellen Sie einen neuen TXT-Eintrag mit den von Certbot bereitgestellten Details.
Typ: TXT
Name: _acme-challenge.dev
Wert: ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
- Validieren Sie die DNS-Challenge mit Certbot..
Kehren Sie zu Ihrem Terminal zurück, wo Sie Certbot gestartet haben, und drücken Sie die Eingabetaste, um fortzufahren. Let's Encrypt wird den DNS-Eintrag überprüfen und, wenn er richtig konfiguriert ist, das SSL-Zertifikat ausstellen.
💡Standardmäßig befinden sich die Zertifikate hier: /etc/letssencrypt/live/.
Schritt 3 - Überprüfung und Umwandlung des privaten Schlüssels.
Nachdem Sie das Zertifikat und den privaten Schlüssel erzeugt haben, ist es wichtig zu überprüfen, ob die Dateien im PEM-Format richtig formatiert und bereit für die Verwendung mit Kestrel sind.
- Überprüfen Sie den von Certbot erzeugten privaten Schlüssel:
sudo openssl rsa -in /etc/letsencrypt/live/ihre-domain.com/privkey.pem -check
- Konvertieren Sie den privaten Schlüssel bei Bedarf in ein anderes Format:.
Standardmäßig sind die von Let's Encrypt mit Certbot erzeugten Schlüssel im RSA-Format, das haben wir in Schritt 1 angegeben. Wenn Sie jedoch ein anderes Format angegeben oder ein anderes Werkzeug zur Erzeugung des Schlüssels verwendet haben, können Sie ihn mit dem folgenden Befehl in das von Kestrel erwartete RSA-Format konvertieren:
sudo openssl rsa -in /etc/letsencrypt/live/ihre-domain.com/privkey.pem -out /etc/letsencrypt/live/ihre-domain.com/privkey-rsa.pem
Diese Konvertierung stellt sicher, dass der Schlüssel das von Kestrel in der ASP.NET CORE-Anwendung erwartete Format hat.
Schritt 4- Führen Sie den Docker-Container mit den PEM-Dateien aus.
Wenn Sie Ihre Anwendung in einem Docker-Container bereitstellen, müssen Sie die PEM-Dateien für das Zertifikat und den privaten Schlüssel einbinden, damit Kestrel darauf zugreifen kann.
Verwenden Sie den folgenden Befehl, um den Docker-Container auf Ihrem Server auszuführen:
sudo docker run -it -p 443:81 -p 80:80 \
-e ASPNETCORE_URLS="https://*:81;http://*:80" \
-v /etc/letsencrypt:/cert \
-e ASPNETCORE_Kestrel__Certificates__Default__Path=/cert/live/ihre-domain.com/fullchain.pem \
-e ASPNETCORE_Kestrel__Certificates__Default__KeyPath=/cert/live/ihre-domain.com/privkey.pem \
-e mein-repos-docker/mein-image-docker:latest:latest
Dieser Befehl mountet den Ordner mit den PEM-Dateien (privater Schlüssel und Zertifikat) in den Docker-Container ( -v /etc/letsencrypt:/cert), sodass die Anwendung darauf zugreifen kann.
Die Umgebungsvariablen geben die Pfade zu den PEM-Dateien im Container an, damit Kestrel sie beim Start verwendet und so sichere HTTPS-Verbindungen gewährleistet.
Schritt 5- Führen Sie den Docker-Container mit den PEM-Dateien aus.
Nachdem Sie alle Schritte befolgt haben, ist es an der Zeit, Ihre Anwendung zu testen, um sicherzustellen, dass alles richtig funktioniert. Rufen Sie in Ihrem Webbrowser die Adresse https://ihre-domain.com auf. Wenn das SSL-Zertifikat ordnungsgemäß installiert und konfiguriert wurde, sollten Sie eine sichere Verbindung mit dem in der Adressleiste angezeigten Schlosssymbol sehen. Dies zeigt an, dass der Datenverkehr zwischen Ihrem Server und dem Client nun verschlüsselt und sicher ist.
Wenn alles richtig konfiguriert ist, wird Ihre ASP.NET-Anwendung nun erfolgreich in einer sicheren Umgebung mit Docker und einem SSL-Zertifikat von Let's Encrypt bereitgestellt.
Mit diesem Ansatz können Sie den Einsatz Ihrer .NET-Anwendungen in der Produktion leicht absichern und gleichzeitig von der Flexibilität und Effizienz von Docker profitieren, das einen portablen Einsatz in jeder Umgebung ermöglicht.
Quentin Destrade