Freigeben über


Verwenden von SSL für containerisierte ASP.NET Core-Apps

SSL (Secure Sockets Layer) stellt sichere Verbindungen über HTTP (HTTPS) bereit. Diese Methode zum Schutz von Verbindungen nutzt ein Zertifikat, und in einer containerisierten App unterscheiden sich die Portzuordnungen geschützter und ungeschützter Einstiegspunkte.

Multicontainer-App-Architekturen variieren je nach Sicherheitsanforderungen. Einige App-Designs verwenden für externe Endpunkte HTTPS, während für die interne Kommunikation zwischen Containern jedoch HTTP verwendet wird. Hochsicherheitsumgebungen können HTTPS für die gesamte Kommunikationen nutzen – auch zwischen Containern, auf die nur innerhalb eines sicheren äußeren Umkreisnetzwerks zugegriffen werden kann.

Ports und Portzuordnungen

Die Dockerfile-Datei enthält Direktiven zum Verfügbarmachen von Ports für externen Datenverkehr über unsicheres HTTP oder sicheres HTTPS. Außerdem werden containerisierte Apps in .NET 8 und höher mit Berechtigungen eines typischen Benutzers ausgeführt, während containerisierte Apps in früheren .NET-Versionen mit Administratorberechtigungen ausgeführt werden. Wenn Apps mit Administratorberechtigungen ausgeführt werden, haben sie Zugriff auf den privilegierten Port 80 für HTTP-Datenverkehr und Port 443 für HTTPS-Datenverkehr. Wenn Apps mit Benutzerberechtigungen ohne erhöhte Rechte ausgeführt werden, verwenden sie Port 8080 für HTTP und Port 8081 für HTTPS. Die Ports werden in den EXPOSE-Befehlen in der Von Visual Studio generierten Dockerfile-Datei angezeigt. Die Ports im Container, die in der Dockerfile-Datei angegeben sind, werden mithilfe der in der Starteinstellungsdatei angegebenen Zuordnungen den Hostports zugeordnet. Siehe Starteinstellungen für Containertools. Wenn der Container ausgeführt wird, können Sie die Portzuordnungen im Fenster Container anzeigen. Siehe Anzeigen und Diagnostizieren von Containern.

Zertifikate

Containertools in Visual Studio unterstützen das Debuggen einer SSL-fähigen ASP.NET Core-App mit einem Entwicklungszertifikat, so wie Sie es auch ohne Container erwarten würden. Um dies zu erreichen, fügt Visual Studio einige weitere Schritte hinzu, um das Zertifikat zu exportieren und dem Container zur Verfügung zu stellen. Visual Studio erledigt beim Debuggen im Container Folgendes für Sie:

  1. Stellt mit dem Tool dev-certs sicher, dass das lokale Entwicklungszertifikat auf dem Hostcomputer vorhanden und vertrauenswürdig ist

  2. Exportiert das Zertifikat nach %APPDATA%\ASP.NET\Https und versieht es mit einem sicheren Kennwort, das im Speicher für Benutzergeheimnisse dieser bestimmten App gespeichert ist.

  3. Stellt die folgenden Verzeichnisse als Volumes bereit:

    • *%APPDATA%\Microsoft\UserSecrets
    • *%APPDATA%\ASP.NET\Https

ASP.NET Core sucht nach einem Zertifikat, das dem Assemblynamen im Ordner Https entspricht, weshalb es dem Container in diesem Pfad zugeordnet wird. Pfad und Kennwort des Zertifikats können alternativ über Umgebungsvariablen (d. h. ASPNETCORE_Kestrel__Certificates__Default__Path und ASPNETCORE_Kestrel__Certificates__Default__Password) oder in der JSON-Datei mit Benutzergeheimnissen definiert werden. Beispiel:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "c:\\app\\mycert.pfx",
        "Password": "strongpassword"
      }
    }
  }
}

Wenn Ihre Konfiguration sowohl containerisierte als auch nicht in Containern enthaltene Builds unterstützt, sollten Sie die Umgebungsvariablen verwenden, da die Pfade spezifisch für die Container Umgebung sind.

Weitere Informationen zur Verwendung von SSL mit ASP.NET Core-Apps in Containern finden Sie unter Hosten von ASP.NET Core-Images mit Docker über HTTPS.

Ein Codebeispiel, das das Erstellen von benutzerdefinierten Zertifikaten für eine App mit mehreren Diensten veranschaulicht, die auf dem Host und in den Containern für die HTTPS-Dienst-zu-Dienst-Kommunikation als vertrauenswürdig eingestuft sind, finden Sie unter CertExample.