Nazwy główne
Aby klient utworzył wzajemnie uwierzytelnianą sesję z programem serwera, musi podać oczekiwaną nazwę główną serwera. Niektóre protokoły, takie jak Kerberos, wymagają poprawnej głównej nazwy serwera dla każdej uwierzytelnionej sesji. Podmiot zabezpieczeń to jednostka rozpoznawana przez system zabezpieczeń. Obejmuje to użytkowników ludzkich, a także usługi systemowe. Wszystkie nazwy podmiotów zabezpieczeń mają podobny format dla danego dostawcy obsługi zabezpieczeń (SSP). Dostawcy usług udostępnionych to moduł oprogramowania, który przeprowadza walidację zabezpieczeń. Aby uzyskać więcej informacji, zobacz Omówienie architektury SSPI. Aby zachować jednolitość, dostawca zabezpieczeń zwykle udostępnia usługi systemowe podobne do nazw użytkowników. W przypadku niektórych dostawców zabezpieczeń usługi systemowe mogą nie mieć głównej nazwy.
Serwer rejestruje swoją główną nazwę dostawcy zabezpieczeń przy użyciu funkcji RpcServerRegisterAuthInfo. Dla każdego dostawcy zabezpieczeń może być używana tylko jedna główna nazwa serwera. Jeśli zarejestrowano więcej niż jedną nazwę, jedna nazwa jest wybierana losowo i używana. Dostawcy usług udostępnionych określają format nazwy głównej. Na przykład protokół Kerberos/Negotiate SSPs dla usługi systemowej wygląda mniej więcej tak: machine_name$@childdomain.parentdomain1.parentdomain2.COM.
Zalecaną procedurą generowania głównych nazw jest użycie udokumentowanych interfejsów API (takich jak funkcja DsMakeSpn), a nie łączenie głównej nazwy z ciągów. Korzystanie z udokumentowanych interfejsów API zwiększa przenośność między różnymi środowiskami wdrażania i eliminuje możliwość wystąpienia błędów.
Określenie nieprawidłowej głównej nazwy może uniemożliwić klientowi i serwerowi ustanowienie uwierzytelnionej sesji. Dostawca SSP SCHANNEL przyjmuje główne nazwy w jednej z dwóch form:
- Pierwszy formularz głównej nazwy SCHANNEL to formularz msstd. Nazwy w formularzu msstd zwykle są zgodne ze wzorcem msstd:servername@serverdomain.com. Jest to nazywane właściwością nazwy poczty e-mail. Jeśli certyfikat zawiera właściwość nazwy poczty e-mail i zawiera wartość pod znakiem (@), główna nazwa to msstd:email name. W przeciwnym razie musi zawierać właściwość nazwy pospolitej. Wewnętrzne ukośniki odwrotne są podwajane, podobnie jak w powiązaniach ciągów.
- Drugą główną nazwą SCHANNEL jest formularz fullsic. Jest to seria nazw zgodnych z RFC1779 ograniczonych nawiasami kątowymi i oddzielonych ukośnikami odwrotnymi. Zazwyczaj jest zgodny ze wzorcem fullsic:\<\Authority\SubAuthority\.....\Person> lub fullsic:\<\Authority\SubAuthority\.....\ServerProgram>.
Jeśli nazwa nie jest zgodna z certyfikatem, zostanie zwrócona ERROR_ACCESS_DENIED. Jeśli format nazwy jest nieprawidłowy, dostawca SSP SCHANNEL zwraca kod ERROR_INVALID_PARAMETER.
Aby wysłać zapytanie o główną nazwę serwera, aplikacje mogą wywoływać RpcMgmtInqServerPrincName. Spowoduje to przydzielenie ciągu o wartości null do przechowywania głównej nazwy. Zanim zakończy działanie, aplikacja musi wywołać RpcStringFree, aby zwolnić pamięć zajmowaną przez ten ciąg.
Wykonywanie zapytań o nazwę serwera w ten sposób nie jest bezpieczne i należy go unikać. W przypadku uwierzytelniania serwera program kliencki powinien wiedzieć, z którym serwerem nawiązuje połączenie i powinien utworzyć nazwę główną serwera od podstaw.