Skip to content

Inleiding

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

In dit artikel ontvangt u:

  • Een uitgebreid overzicht van de verschillen tussen OTOBO en Znuny in de context van Kerberos SSO.
  • Een stap-voor-stap-handleiding van de AD-voorbereiding tot de Docker-configuratie.
  • Tips voor debugging, browser-instellingen en best practices voor verschillende OTOBO-versies.

Verschillen tussen OTOBO en Znuny

Hoewel OTOBO en Znuny functioneel zeer vergelijkbaar zijn (beide komen voort uit het oorspronkelijke OTRS-project), zijn er in de Kerberos-context de volgende fijnafstemmingen:

  • Configuratiepaden: OTOBO gebruikt standaard /opt/otobo-docker/nginx-conf/krb5.conf, Znuny gebruikt in de regel /opt/znuny/nginx-conf/krb5.conf.
  • Sjabloonbestanden: De NGINX-sjablonen verschillen licht in naam en placeholder-syntaxis; OTOBO levert een bestand otobo_nginx-kerberos.conf.template, Znuny een soortgelijk benaamd bestand znuny_nginx-kerberos.conf.template.
  • Versiebeheer: OTOBO 11.x brengt uitgebreide SSO-parameters ("KerberosAdminServer", "KerberosDefaultDomain"), die in Znuny 6.x nog ontbreken.

Vereisten

  1. Active Directory met Kerberos (Realm en KDC reeds geconfigureerd).
  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-oplossingen werken.

1. Active Directory-gebruiker en SPN

1.1 Gebruiker aanmaken

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

  • Hoofdlettergevoeligheid bij HTTP/; Kerberos verwacht exact deze prefix :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][1]).
  • -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/

Daarmee wordt het SPNEGO-module gecompileerd dat compatibel is met uw NGINX-release ([extras.getpagespeed.com][2]).

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 sjabloondata.

3. Docker-volumes & nginx-sjablonen

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:

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

Activeer in het 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. Bewaar 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. SSL-certificaten en DB-wachtwoorden overnemen 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`

Commenteer LDAP/DB-auth uit en voeg in uw `Kernel/Config.pm` toe:
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';
```
Daarmee wordt `REMOTE_USER` correct geïnterpreteerd als login ([doc.otobo.de][1]).

### 5.2 Activatie in het Admin-Interface

* **Systeemconfiguratie**:

    * `Customer::AuthModule` op `HTTPBasicAuth` zetten.
    * `AuthModule::HTTPBasicAuth::ReplaceRegExp` overnemen.
* **Kernel/Config** -> **Deploy** uitvoeren.

## 6. Browser-instellingen

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

### Chrome / Edge / IE

* „Internetopties“ → **Beveiliging** → **Lokale intranetsites** → **Sites**
* Domein `https://otobo.example.com` toevoegen en „Geïntegreerde Windows-verificatie“ activeren ([doc.otobo.de][1]).

### 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. **In de container stappen**

   ```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
   ```
   Fout `KDC cannot fulfill request` → DNS/SPN onjuist ([plugins.miniorange.com][3]).

## 8. Best practices & Security

* **Eigen Keytab**: Gebruik nooit het LDAP-sync-service-account opnieuw, vermijd wachtwoordcollisies .
* **Least Privilege**: Verleen alleen minimale benodigde AD-rechten voor het SSO-account.
* **Keytab-rotatie**: Vernieuw het Keytab regelmatig om de 90 dagen.
* **TLS voor KDC**: Activeer `ldaps://` of GSSAPI via TLS als dat mogelijk is.
* **Monitoring**: Bewaak met tools als `klist` en `kvno` automatisch de Kerberos-tickets.

---

Met deze uitgebreide handleiding is uw OTOBO Docker-installatie optimaal voorbereid voor Kerberos SSO – veilige, onderhoudsvriendelijke en schaalbare authenticatie inclusief!

---

**Bronnen:**

* rotheross/otobo-nginx-kerberos-webproxy op Docker Hub ([hub.docker.com][4])
* SPNEGO HTTP Auth NGINX Module (stnoonan) ([extras.getpagespeed.com][2])
* Officiële OTOBO Installatie-Doku (11.0 SSO Kerberos) ([doc.otobo.de][1])
* GitHub Issue #81: NGINX Kerberos broken ([github.com][5])
* miniOrange Kerberos SSO Guide ([plugins.miniorange.com][3])
* OTOBO Docker Override HTTPS-Kerberos ([github.com][6])
* OTOBO Ontwikkelaars- en beheerdershandleidingen
* Microsoft Docs: ktpass.exe ([community.znuny.org][7])
* Mozilla MDN: SPNEGO in Firefox ([doc.otobo.de][1])
* NGINX Docs: dynamic modules ([extras.getpagespeed.com][2])