Konfiguracja uwierzytelniania Kerberos w 1C: serwer WWW na Linuxie, serwer aplikacji na Windows
Podczas publikowania bazy 1C na serwerze WWW pod Linuxem z serwerem aplikacji na Windows standardowe instrukcje konfiguracji uwierzytelniania często zawodzą. Nawet jeśli w dzienniku technologicznym serwera aplikacji wyświetla się konto użytkownika przekazywane z serwera WWW, platforma wyświetla monit o login/hasło. Źródłem problemu jest brak wpisu SPN dla konta, pod którym uruchomiony jest serwer aplikacji 1C.
Ten szczegół nie jest wspomniany w większości przewodników, w tym w popularnych artykułach na Infostart. Rozwiązanie znaleziono eksperymentalnie poprzez analizę uwierzytelniania Kerberos w systemach Linux i Windows.
Wymagania infrastrukturalne
Scenariusz zakłada:
- Serwer WWW (Apache/Nginx) na Linuxie z modułem do NTLM/Kerberos.
- Serwer aplikacji 1C na Windows Server.
- Katalog Active Directory (AD) do zarządzania kontami.
- IIS lub odpowiednik na serwerze 1C do obsługi żądań.
Wstępna konfiguracja obejmuje publikację bazy przez serwer WWW, ustawienie mod_auth_kerb (dla Apache) lub nginx ze skryptami lua do przekazywania nagłówków uwierzytelniania. W dzienniku 1C widać przekazywane konto, ale uwierzytelnianie się nie powodzi.
Diagnozowanie usterki
Sprawdź dziennik technologiczny serwera aplikacji (Parametry uruchomienia: -reg lub przez konsolę klastra). Szukaj wpisów typu:
{User: domain\username} from web-server
Jeśli konto jest widoczne, ale monit o dane uwierzytelniające się powtarza — problem leży w SPN.
Kroki diagnostyczne:
- Wykonaj
setspn -Q /dla konta usługi 1C (np.svc_1c). - Sprawdź brak SPN w wyniku.
- Przetestuj dostęp przez przeglądarkę z obsługą NTLM (IE/Edge w strefie Intranet).
- Logi serwera WWW:
grep -i kerberos /var/log/apache2/error.log.
Rozwiązanie: dodanie wpisu SPN
Utwórz wpis SPN dla konta, pod którym działa serwer aplikacji. Wartość SPN jest dowolna — nie jest używana w ruchu sieciowym, ale jest wymagana przez wewnętrzną logikę uwierzytelniania 1C.
Polecenie na DC lub maszynie z RSAT:
setspn -S HTTP/fakespn.svc_1c.domain.local svc_1c
Gdzie:
HTTP/fakespn.svc_1c.domain.local— fikcyjny SPN.svc_1c— konto usługi 1C.
Sprawdź: setspn -L svc_1c. Po dodaniu zrestartuj serwer aplikacji i przetestuj dostęp.
Uwierzytelnianie zadziała bez monitu o dane uwierzytelniające. Przyczyna: platforma 1C sprawdza obecność SPN przed akceptacją tokenu Kerberos/NTLM.
Dodatkowe ustawienia Kerberos
- Keytab na Linuxie:
ktutil, dodaj klucz dla service principalHTTP/webserver.domain.local. - krb5.conf: Określ realm, KDC w
/etc/krb5.conf.
[realms]
DOMAIN.LOCAL = {
kdc = dc.domain.local
}
- Konfiguracja Apache (mod_auth_kerb):
<Location /1c>
AuthType Kerberos
AuthName "Kerberos Login"
KrblAuthRealms DOMAIN.LOCAL
KrbMethodNegotiate On
KrbsaveCredentials Off
</Location>
Co jest ważne
- SPN jest obowiązkowy: Nawet fikcyjny SPN odblokuje uwierzytelnianie w 1C.
- Dzienniki do debugowania: Dziennik technologiczny 1C + error.log serwera WWW.
- Konto usługi: Uruchamiaj serwer 1C z konta domenowego z uprawnieniami.
- Testowanie: Użyj
kinitna Linuxie do sprawdzenia Kerberos. - Bezpieczeństwo: Ogranicz SPN tylko do niezbędnych usług.
— Editorial Team
Brak komentarzy.