Laden...

Docker-Container in Windowsdomänen-Netzwerk einbinden

Erstellt von emuuu vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.959 Views
emuuu Themenstarter:in
286 Beiträge seit 2011
vor 5 Jahren
Docker-Container in Windowsdomänen-Netzwerk einbinden

Guten Tag zusammen,

ich habe mal eine Frage bezüglich der Konfiguration einer Api (ASP.NET Core 2.1.0) in einem Windows-Container auf einem Windows-Host.

Der Container bzw. die Api laufen problemlos, allerdings soll die Api auch auf Netzwerkordner zugreifen können, welche von einer Domäne verwaltet werden und soll auf den Intranet-DNS-Server zugreifen können. Und das ist mein Problem. Einerseits habe ich noch keinen Weg gefunden wie ich den Container/die Api motivieren kann sich in der Domäne anzumelden (so wie ich z.B. bei einem IIS für eine App festlegen kann mit welcher Windows-Anmeldung diese läuft).

Des weiteren soll die Api andere Services ansprechen können. Hier ist das Problem, dass die HTTPS-Verbindungen mit Zertifikaten einer CA aus dem Intranet laufen und ich habe noch keinen Weg gefunden, dass der Container der CA traut.

Habt ihr hier evtl Ansätze?

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

16.835 Beiträge seit 2008
vor 5 Jahren
  1. Windows Domäne geht nur über eine Auth-Middleware
    Configure Windows authentication in ASP.NET Core

Wenn Du auf ein Windows-geschütztes Dateisystem zugreifen willst, dann brauchst Du Impersonation.
Docker bzw. der Host kann Dir das nicht abnehmen. Im IIS ist das ein spezielles Feature, das Du so in ASP.NET selbst nicht hast.

  1. Docker interessiert eigentlich Dein CA nicht.
    Docker deckt nur die TCP Ebene ab, nicht HTTPS.

Daher solltest Du problemlos auf die HTTPS Schnittstelle mit nicht-vertrauenswürdigem Zertifikat zugreifen können.

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 5 Jahren
  1. Docker interessiert eigentlich Dein CA nicht.
    Docker deckt nur die TCP Ebene ab, nicht HTTPS.

Habe das Problem eher fälschlicherweise Docker zugeordnet. Konkret habe ich zwei Probleme:

  1. Wenn ich die Api direkt aufrufe sagt mein Browser mir, dass ich ein ungültiges Zertifikat verwende, was erstmal nicht so dramatisch wäre aber
  2. Wenn die Api sich an den IdentityServer wenden will (der aktuell noch in einem IIS lebt) kriege ich einen Verbindungsfehler aufgrund eines "Untrusted Certificates".

Konkret müsste ich also zwei Dinge erreichen:

  1. Die Api muss beim starten ein von der CA ausgestelltes Zertifikat verwenden. Das versuche ich aktuell so zu lösen:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseKestrel(options =>
                {
                    options.Listen(IPAddress.Loopback, 5000, listenOptions =>
                    {
                        var configuration = (IConfiguration)options.ApplicationServices.GetService(typeof(IConfiguration));
                        listenOptions.UseHttps(@"C:\https\wildcard.pfx", "12345");
                    });
                })
                .UseStartup<Startup>();

(hardcoded Passwort bitte ich zu übersehen, in der finalen Variante isses durch eine enviroment variable ersetzt)
Das funktioniert aktuell noch nicht, da ich beim Mounten des C:\https-Ordners Probleme habe und der Service wegen FileNotFound gar nicht erst startet.

  1. Die Api muss dem Root-Zertifikat der CA vertrauen. Hier habe ich aktuell noch gar keinen Ansatz, da ich nicht weiß die Struktur innerhalb des Docker-Containers aussieht (ein Server mit IIS hätte z.B. einen Zertifikatsspeicher).

2+2=5( (für extrem große Werte von 2)

16.835 Beiträge seit 2008
vor 5 Jahren
  1. Wenn die Api sich an den IdentityServer wenden will (der aktuell noch in einem IIS lebt) kriege ich einen Verbindungsfehler aufgrund eines "Untrusted Certificates".

Was meinst Du mit "verwenden"? Die Authentication Middleware?

Kannst die HTTPS Pflicht deaktivieren

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 5 Jahren

Genau, wenn ich eine Anfrage an die Api sende stößt dies auf die AuthenticationMiddleware von wo aus der IdentityServer abgerufen wird. Konkret schmeißt die Api bei GET '~/.well-known/openid-configuration' einen Fehler, dass die Abfrage nicht ausgeführt werden konnte, da das Zertifikat untrusted ist. Eben dieses Zertifikat, dass der IIS verwendet um den IdentityServer zu hosten wurde von einer lokalen CA signiert, welche der Api in ihrem Docker-Container nicht bekannt zu sein scheint.

2+2=5( (für extrem große Werte von 2)

16.835 Beiträge seit 2008
vor 5 Jahren

Du hast also ein Self Signed Certificate für Deinen Identity Host, der in einem IIS läuft.

Das hat meines Wissens nichts mit Docker und nichts mit ASP.NET per se zutun, sondern mit der Authentication Pipeline.
Bin mir nicht sicher, ob Du aus Docker auf den Windows Cert Store zugreifen kannst; muss ja irgendwie. Sonst wären alle HTTPS Zugriffe aus Docker nicht möglich.
Evtl über ne Volume..?!

Du kannst aber manuell in die Zertifikatsvalidierung von ASP.NET Core eingreifen, um zB via Certificate Pinning die Gültigkeit selbst zu bestätigen.
Dafür brauchst einen IAuthorizationFilter, der auf OnAuthorization hört und das Zertifikat manuell validiert.

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 5 Jahren

Das hier scheint eine Lösung zu sein:
Import and bind an SSL cert in a Windows container using Powershell

Werd es morgen mal austesten.

2+2=5( (für extrem große Werte von 2)