Przeszukując metody uwierzytelniania i protokoły Windows, postanowiłem zrozumieć dokładną różnicę między Negotiate, Kerberos i NTLM używaną w prostym pliku wykonywalnym, zanim polubię go za pomocą IIS i uwierzytelniania internetowego.Uwierzytelnianie plików wykonywalnych systemu Windows
Osiągnąłem dobre wyniki, ALE nadal potrzebuję więcej szczegółów na temat Negocjacji i Kerberos.
Mam następujący scenariusz:
Stworzyłem bardzo proste C# Windows tworzy aplikacją, która wyświetla okno komunikatu wyświetla wartość dla:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
Zauważ, że jestem użytkownik domeny z Administrator przywileje na moim komputerze lokalnym, mam następujące wyniki:
kiedy uruchomić plik exe (podwójne kliknięcie), a ja jestem aktywnie podłączony do gniazda DC, mam " Negocjować".
Po uruchomieniu pliku exe (uruchom jako inny użytkownik/użytkownik lokalny), gdy jestem aktywnie podłączony do DC, mam "NTLM".
Po uruchomieniu pliku exe przy użyciu opcji "Uruchom jako administrator" lub "Uruchom jako inny użytkownik" otrzymałem komunikat "Kerberos".
Po uruchomieniu pliku exe, gdy jestem zalogowany lokalnie przy użyciu konta lokalnego, mam "NTLM".
Rozumiem, że LSA użyje NTLM dla kont lokalnych. Rozumiem również, że usługa Active Directory używa Kerberos do uwierzytelniania użytkowników domeny i komputerów.
Moje pytanie brzmi: dlaczego uzyskuję Negocjuj Typ uwierzytelnienia, gdy uruchamiam plik exe przy użyciu mojego konta przez (podwójne kliknięcie) lub "uruchom jako inny użytkownik" przy użyciu tego samego konta?
Aktualizacja: zauważyłem następujące:
- Jeśli użytkownik lokalny działa exe to jest NTLM
- Jeśli użytkownik domeny uruchomić exe to jest Negocjuj (Jeśli jest to lokalny administrator), ale jest to Kerberos (jeśli ten użytkownik nie jest administratorem lokalnym)
- Jeśli domeny admin uruchom exe to jest Kerberos
Ja tylko wyjaśnienie na temat tego zachowania.
Pytanie jest niejasne. Pakiet uwierzytelniający użyty do uwierzytelnienia użytkownika różni się od protokołu używanego do uwierzytelnienia użytkownika, a każdy z nich jest odrębny od podmiotu, który wykonuje uwierzytelnienie. Nie ma relacji jeden do jednego (jeden do jednego). NTLM i Kerberos (i Negotiate) są istotne tylko podczas uwierzytelniania na komputerze zdalnym. Uwierzytelnianie na komputerze zdalnym w środowisku innym niż domena będzie używać NTLM, a uwierzytelnianie na komputerze zdalnym w domenie będzie korzystało z protokołu Kerberos lub NTLM. Co dokładnie próbujesz się dowiedzieć? – conio
To nie jest prawda. Lokalny komputer używa również pakietu uwierzytelniającego do uwierzytelnienia poświadczeń logowania zebranych przez Winlogon za pośrednictwem GINA. Winlogon wywołuje LsaLogonUser, który używa pakietu uwierzytelniającego do utworzenia sesji logowania. LSA używa NTLM (Msv1_0.dll), aby wyszukać konto w lokalnej maszynie SAM w przypadku lokalnego logowania; nie jest potrzebny zdalny komputer. – codekaizen
Nie jesteś nawet blisko. Fakt, że niektóre strony (takie jak te, które zostały połączone w odpowiedzi) nieprawidłowo opisują MSV1_0 jako "NTLM", nie oznacza, że używany jest protokół NTLM ** - ten opisany w [MS-NLMP]. (Prawidłowy opis to [Microsoft Authentication] (http://i.stack.imgur.com/k6rdD.png) [Package v1.0] (http://i.stack.imgur.com/313Y3.png), btw.) Nie wiem, jak mogę być bardziej jasne w tej kwestii. Kiedy uwierzytelnisz się na lokalnym SAM, nikt nie stwarza wyzwania i nikt nie tworzy odpowiedzi na to wyzwanie w oparciu o skróty LM lub NT hasła. – conio