ASP.NET Core + HTTP.sys + Windows Authentication + SSL

ASP.NET Core + HTTP.sys + Windows Authentication + SSL
2019-07-09T10:05:16+02:00
2019-07-11T12:56:16+02:00
2022-10-15T21:40:59+02:00
m.tamas
Sziasztok!

A következő feladatra keresem a megoldást:
ASP.NET Core 2.1 webes felület Windows hitelesítés SSL használatával, IIS nélkül.

A Windows hitelesítés a HTTP.sys használatával működik SSL nélül.
Az SSL netsh http add sslcert regisztrálással működik.
Ha a fenti két megoldást egyszerre szeretném használni, akkor a böngészőben folyamatosan a login ablak jelenik meg (nem lehet belépni).

A megoldási javaslatokat előre is köszönöm!
Mutasd a teljes hozzászólást!
Látod, nem egy triviális probléma.

Úgy tűnik, ez egy Windows policy (Loopback Protection), ami alapértelmezetten szándékosan megakadályozza FQDN használatát localhost-on, részletek itt. Valamiért a vonatkozó KB-szócikk nem elérhető, de a benne levő registry beállítás hozzáadásával nekem működik (IE, Chrome tesztelve).

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa DisableLoopbackCheck (DWORD) - 1
Szerintem át kéne gondolni azt a bejelentkezési folyamatot.

Szerk.: másik szócikk, ahol figyelmeztetnek, hogy a fenti beállítás biztonsági kockázatot jelent, pl. ilyet.
Mutasd a teljes hozzászólást!

  • Úgy látom, hogy Authentication.Schemes = AuthenticationSchemes.Basic; esetén működik.
    így nem: Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate;
    Mutasd a teljes hozzászólást!
  • Helló!

    Én ezzel próbálnám:

    .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate; options.Authentication.AllowAnonymous = false;

    Bár figyelmeztetnek, hogy törhet dolgokat.

    Link1, link2
    Mutasd a teljes hozzászólást!
  • Szia!

    Én is ezzel kezdtem, de így csak SSL nélkül megy.
    Lásd előző 2 bejegyzés.
    Mutasd a teljes hozzászólást!
  • Ahogy nézem, ahhoz, hogy az SSL menjen HTTP.sys-szel, külön konfigurálni kell (hozzá kell adni a certificate-et netsh paranccsal). Tehát ez független lépés a .NET Core-tól.

    Ezt te megtetted?

    Szerk.: itt egy beszélgetés erről a konfigurációról, de a kérdező csak annyit írt, hogy a fenti link segített neki.
    Mutasd a teljes hozzászólást!
  • Igen, és működik is, lásd eredeti kérdés.

    Most ott tartok, hogy működik a dolog, de csak basic authentication esetén, NTLM auth. esetén nem (lásd második üzenet).
    Mutasd a teljes hozzászólást!
  • Legközelebb kicsit részletezhetnéd, pontosan mit tettél, nekem teljesen ismeretlen ez a terület.

    Én most ott tartok, hogy saját gépen, https://localhost:5001-en engem rendesen autentikál.

    Most fogom kipróbálni másik gépen.

    Ehhez képest te pontosan mit tapasztalsz? Már ez sem működik?
    Mutasd a teljes hozzászólást!
  • Referenciának leírom, hogyan konfiguráltam a HTTP.sys-t, mert egy hét múlva már nem fogok rá emlékezni.

    A VS létrehozza automatikusan a self-signed certificate-et, ebből kell nekünk a Thumbprint (ez lesz a $certHash).

    Utána PowerShell-ben az alábbi paraméterezéssel hozzá lehet adni a certificate-et a HTTP.sys-hez:

    PS C:\test> $guid = [guid]::NewGuid() PS C:\test> $certHash = "D06E...D526F6" PS C:\test> $ip = "0.0.0.0" PS C:\test> $port = "5001" PS C:\test> "http add sslcert ipport=$($ip):$port certhash=$certHash appid={$guid}" | netsh

    A GUID tetszőleges.

    Az alábbi DotNet tool segít a dev-certificate konfigurálásában:

    dotnet dev-certs https --help
    Az alábbival lehet lekérdezni, hogy létezik-e valid dev-cert:

    dotnet dev-certs https -c -v
    Mutasd a teljes hozzászólást!
  • Én is kb. ezt csináltam, azzal a különbséggel, hogy nekem nem önaláírt a tanúsítványom és azt is kézzel importáltam, illetve jogosultságot is kellett állítanom. Ez működik is, mint ahogyan az eredeti kérdésben írtam.
    Mutasd a teljes hozzászólást!
  • Kedves kolléga, ha segítséget vársz, akkor légy szíves, írd le pontosan, milyen kóddal, milyen konfigurációval, milyen környezetben tapasztalod a hibát. Minél részletesebben, ne félszavakból kelljen kitalálni ezeket.

    Ezt írtad:

    Ha a fenti két megoldást egyszerre szeretném használni, akkor a böngészőben folyamatosan a login ablak jelenik meg (nem lehet belépni).

    Nekem fejlesztői gépen, dev-cert-es SSL-es kapcsolaton, localhost-on a Windows hitelesítés a fenti kódokkal működik (tesztelve: Chrome, Firefox és Edge).

    Neked?
    Mutasd a teljes hozzászólást!
  • Update: kipróbáltam másik gépről. Ez is megy.

    Generáltam egy self-signed cert-et egy helyi névvel: desktop.local, ezzel host-oltam az app-ot, ezt importáltam egy másik gépre és onnan értem el a https://desktop.local:5001 címen. Kérte a nevet/jelszót, helyeset megadva kiírta a loginnevet (ASP.NET Core template-tel tesztelem).

    Chrome és Edge gond nélkül megy, Firefox-nak nem tetszik a self-signed cert, de ha továbbrugdosom, az is működött végül (egy F5 után). Felteszem, rendes certificate-nél ez a gond nem jelentkezik, de ki kéne próbálni.

    Viszont: saját gépen ezt a címet elérve (tehát nem localhost-tal) csak Edge-dzsel működik. Mind Chrome, mint Firefox dobálja fel a login prompt-ot, ami viselkedést eredetileg megjelöltél, hiába kap helyes bejelentkezési adatokat.
    Mutasd a teljes hozzászólást!
  • Sajnos nekem nem igen van időm fórumokat olvasgatni, pláne nem beírogatni. Örülök, hogy egyénileg is sikerült idáig eljutnod, mert nem igen lenne időm ezeket mind részletesen leírni. A kérdést szándékosan fogalmaztam úgy, hogy aki már találkozott ezzel, - és  a végére járt - az fogja tudni a megoldást is.

    A távoli elérés valóban működik, ezt meg tudom erősíteni.
    Az Edge esetén nálam ugyanaz az jelenség mint a többi böngészőnél, de IE a kötelező elvárás.

    A mostani helyzet tehát a következő:
    NTML használatával jól működik távoli eléréssel, de lokálisan csak Basic esetén megy.

    Sajnos a távoli elérést csak akkor nyitják meg, ha lokálisan működik (kb. 22-es csapdája)
    Azt fogom javasolni, hogy lokálisan használják SSL nélkül localhost-tal, távolról meg mehet az SSL+NTML.

    A nyitott kérdés így már csak az, hogy miért nem megy az adott domain névvel localhost-on SSL+NTML használatával?

    Köszönöm, hogy foglalkoztál a témával!
    Mutasd a teljes hozzászólást!
  • Látod, nem egy triviális probléma.

    Úgy tűnik, ez egy Windows policy (Loopback Protection), ami alapértelmezetten szándékosan megakadályozza FQDN használatát localhost-on, részletek itt. Valamiért a vonatkozó KB-szócikk nem elérhető, de a benne levő registry beállítás hozzáadásával nekem működik (IE, Chrome tesztelve).

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa DisableLoopbackCheck (DWORD) - 1
    Szerintem át kéne gondolni azt a bejelentkezési folyamatot.

    Szerk.: másik szócikk, ahol figyelmeztetnek, hogy a fenti beállítás biztonsági kockázatot jelent, pl. ilyet.
    Mutasd a teljes hozzászólást!
  • Köszönöm az utánajárást, működik!

    Annyival egészíteném ki, hogy a leírásból (számomra) úgy tűnik, mintha ez a helyi account-okra vonatkozna, de szerencsére az AD belépést is orvosolja.

    Szerintem át kéne gondolni azt a bejelentkezési folyamatot.

    A rendszer egy teljesen zárt hálózat, ahová csak többszöri ellenőrzés után jutnak be a felhasználók, így szerintem az SSL-re se lenne szükség, csak a megrendelő ragaszkodik hozzá.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd