Powrót do strony głównej

SPN do uwierzytelniania 1C na serwerze WWW Linux

Artykuł opisuje rozwiązanie problemu uwierzytelniania 1C przy serwerze WWW na Linux i serwerze aplikacji na Windows. Klucz — dodanie wpisu SPN dla konta usługowego. Podane polecenia setspn, konfiguracje krb5 i mod_auth_kerb.

Naprawa uwierzytelniania 1C: SPN na Linux+Windows
Advertisement 728x90

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:

Google AdInline article slot
  • 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.

Google AdInline article slot

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:

Google AdInline article slot
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 principal HTTP/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 kinit na Linuxie do sprawdzenia Kerberos.
  • Bezpieczeństwo: Ogranicz SPN tylko do niezbędnych usług.

— Editorial Team

Advertisement 728x90

Czytaj dalej