Skip to content

Introductie

Kerberos SSO (Single Sign-On) maakt een naadloze aanmelding voor uw agenten via Active Directory mogelijk, zonder dat wachtwoorden in platte tekst worden verzonden. In een op Docker gebaseerde OTOBO-installatie wordt hiervoor NGINX als webproxy gebruikt met de SPNEGO-module, die in een aparte "builder"-container wordt gecompileerd. Vervolgens wordt de dynamisch gegenereerde module (ngx_http_auth_spnego_module.so) overgenomen in de eigenlijke NGINX-container en wordt de standaardconfiguratie vervangen door een Kerberos-compatibele :contentReference[oaicite:0]{index=0}. Hiermee volgen we de best practices van het officiële OTOBO Docker-project, dat een duidelijke scheiding tussen build- en runtime-stages realiseert.

In dit artikel vindt u:

  • Een uitgebreid overzicht van de verschillen tussen OTOBO en Znuny in de context van Kerberos SSO.
  • Een stapsgewijze handleiding van de AD-voorbereiding via keytab-creatie tot de Docker-configuratie.
  • Tips voor debugging, browserinstellingen en best practices voor verschillende OTOBO-versies.

Verschillen tussen OTOBO en Znuny

Hoewel OTOBO en Znuny functioneel zeer vergelijkbaar zijn (beide stammen af van het oorspronkelijke OTRS-project), zijn er in de Kerberos-context de volgende fijne aanpassingen:

  • Configuratiepaden: OTOBO gebruikt standaard /opt/otobo-docker/nginx-conf/krb5.conf, Znuny gebruikt doorgaans /opt/znuny/nginx-conf/krb5.conf.
  • Template-bestanden: De NGINX-templates verschillen enigszins in namen en placeholder-syntax; OTOBO levert een bestand otobo_nginx-kerberos.conf.template, Znuny een vergelijkbaar genaamd znuny_nginx-kerberos.conf.template.
  • Versiebeheer: OTOBO 11.x brengt uitgebreide SSO-parameters ("KerberosAdminServer", "KerberosDefaultDomain") met zich mee, die in Znuny 6.x nog ontbreken.

Vereisten

  1. Active Directory met Kerberos (Realm en KDC reeds ingesteld).
  2. Een OTOBO Docker-setup volgens Officiële installatie met Docker :contentReference[oaicite:2]{index=2}.
  3. DNS-records:
    • Een A-record voor uw OTOBO FQDN (geen CNAME!), bijv. otobo.example.com → 192.0.2.10.
    • Reverse lookup voor de hostnaam, zodat Kerberos SPN-resoluties werken.

1. Active Directory Gebruikers en SPN

1.1 Gebruiker aanmaken

Maak in uw AD een speciale service-account aan, bijv. HTTP/otobo.example.com (UserPrincipalName). Let op:

  • Hoofdletters bij HTTP/; Kerberos verwacht exact dit voorvoegsel :contentReference[oaicite:3]{index=3}.
  • Geen speciale tekens in het wachtwoord (bijv. &).

1.2 SPN en Keytab genereren

Meld u aan op een DC met beheerdersrechten en gebruik ktpass.exe:

bash
ktpass.exe \
 -princ HTTP/otobo.example.com@EXAMPLE.COM \
 -mapUser EXAMPLE\\otobo-svc \
 -crypto All \
 -pass SvcUserPassword \
 -ptype KRB5_NT_PRINCIPAL \
 -out C:\krb5.keytab
  • -princ: SPN met Realm in hoofdletters.
  • -mapUser: SAM-accountnaam (pre-W2K), bijv. otobo-svc (doc.otobo.de).
  • -out: Pad naar de keytab op de DC.

Verplaats vervolgens de keytab naar de Docker-host:

bash
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab

2. NGINX met SPNEGO-module

2.1 Build-stage in Dockerfile

Het officiële Dockerfile gebruikt een aparte builder met de benodigde dev-pakketten:

dockerfile
FROM nginx:mainline AS builder-for-kerberos
...
RUN apt-get update && apt-get install -y gcc libc-dev make libpcre3-dev zlib1g-dev libkrb5-dev wget
WORKDIR /usr/src
RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \
 && wget https://github.com/stnoonan/spnego-http-auth-nginx-module/archive/${SPNEGO_AUTH_COMMIT_ID}.tar.gz
RUN tar -xzf nginx.tar.gz \
 && tar -xzf spnego-http-auth.tar.gz \
 && cd nginx-${NGINX_VERSION} \
 && ./configure --with-compat ${NGINX_CONFIG} --add-dynamic-module=../spnego-http-auth-nginx-module-${SPNEGO_AUTH_COMMIT_ID_FILE} \
 && make modules \
 && cp objs/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules/

Hiermee wordt de SPNEGO-module compatibel met uw NGINX-release gecompileerd (extras.getpagespeed.com).

2.2 Configuratie in de runtime-container

dockerfile
FROM nginx:mainline AS otobo-nginx-kerberos-webproxy

COPY --from=builder-for-kerberos /usr/lib/nginx/modules/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules

RUN apt-get update && apt-get install -y krb5-user libpam-krb5 libpam-ccreds krb5-multidev libkrb5-dev

COPY templates/ kerberos/templates
COPY docker-entrypoint.d/21-envsubst-on-krb5-conf.sh /docker-entrypoint.d/
RUN sed -i '4i load_module modules/ngx_http_auth_spnego_module.so;' /etc/nginx/nginx.conf
  • Module-load: load_module in regel 4 invoegen.
  • Envsubst-scripts genereren /etc/krb5.conf uit templategegevens.

3. Docker-volumes & nginx-templates

3.1 Aangepast volume aanmaken

bash
docker volume create otobo_nginx_custom_config
mp=$(docker volume inspect --format '{{ .Mountpoint }}' otobo_nginx_custom_config)
docker create --name tmp-nginx rotheross/otobo-nginx-webproxy:latest-11_0
docker cp tmp-nginx:/etc/nginx/templates/otobo_nginx-kerberos.conf.template.hidden $mp/otobo_nginx.conf.template
docker rm tmp-nginx

3.2 docker-compose-override

Maak docker-compose/otobo-nginx-custom-config.yml aan:

yaml
version: '3.7'
services:
  nginx:
    volumes:
      - otobo_nginx_custom_config:/etc/nginx/config/template-custom

Activeer in de hoofd .env:

dotenv
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom

4. .env-aanpassingen

  1. Maak een back-up van uw oude /opt/otobo-docker/.env:

    bash
    mv .env .env.bak
    cp .docker_compose_env_https_kerberos .env
  2. Voeg de Kerberos-variabelen toe:

    dotenv
    OTOBO_NGINX_KERBEROS_KEYTAB=/opt/otobo-docker/nginx-conf/krb5.keytab
    OTOBO_NGINX_KERBEROS_CONFIG=/opt/otobo-docker/nginx-conf/krb5.conf
    OTOBO_NGINX_KERBEROS_SERVICE_NAME=HTTP/otobo.example.com
    OTOBO_NGINX_KERBEROS_REALM=EXAMPLE.COM
    OTOBO_NGINX_KERBEROS_KDC=dc1.example.com
    OTOBO_NGINX_KERBEROS_ADMIN_SERVER=dc1.example.com
    OTOBO_NGINX_KERBEROS_DEFAULT_DOMAIN=example.com
  3. Neem SSL-certificaten en DB-wachtwoorden over uit uw oude .env.bak.

Start vervolgens met:

bash
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.

## 5. OTOBO-configuratie

### 5.1 Auth-module in `Kernel/Config.pm`

Commentaar uit LDAP/DB-auth en voeg toe in uw `Kernel/Config.pm`:
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';

Hiermee wordt REMOTE_USER correct geïnterpreteerd als login (doc.otobo.de).

5.2 Activering in het admin-interface

  • Systeemconfiguratie:

    • Customer::AuthModule instellen op HTTPBasicAuth.
    • AuthModule::HTTPBasicAuth::ReplaceRegExp overnemen.
  • Kernel/Config -> Deploy uitvoeren.

6. Browserinstellingen

Om SPNEGO te laten werken, moet uw browser de host als vertrouwd accepteren:

Chrome / Edge / IE

  • "Internetopties" → BeveiligingLokale Intranet-sitesSites
  • Domein https://otobo.example.com toevoegen en "Geïntegreerde Windows-authenticatie" inschakelen (doc.otobo.de).

Firefox

  • about:config in de adresbalk invoeren.
  • network.negotiate-auth.trusted-uris = https://otobo.example.com
  • network.negotiate-auth.delegation-uris = https://otobo.example.com

7. Debugging & Troubleshooting

  1. NGINX-logs controleren

    bash
    docker logs otobo_nginx_1 -f
  2. De container in gaan

    bash
    docker exec -it otobo_nginx_1 bash
    cat /etc/krb5.conf
    klist -e
  3. SPN-token ophalen

    bash
    env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
  4. Keytab testen

    bash
    kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM

    Foutmelding KDC cannot fulfill request → DNS/SPN onjuist (plugins.miniorange.com).

8. Best Practices & Beveiliging

  • Eigen Keytab: Gebruik nooit opnieuw het LDAP-sync-service-account, vermijd wachtwoordconflicten.
  • Least Privilege: Geef alleen de minimaal benodigde AD-rechten aan het SSO-account.
  • Keytab-rotatie: Vernieuw de keytab regelmatig, elke 90 dagen.
  • TLS voor KDC: Indien mogelijk, activeer ldaps:// of GSSAPI via TLS.
  • Monitoring: Monitor Kerberos-tickets geautomatiseerd met tools zoals klist en kvno.

Met deze uitgebreide handleiding is uw OTOBO Docker-instantie optimaal voorbereid op Kerberos SSO – veilige, onderhoudbare en schaalbare authenticatie inbegrepen!


Bronnen: