Aller au contenu

Sso Kerberos

Le SSO (Single Sign-On) Kerberos permet une connexion transparente de vos agents via Active Directory, sans que les mots de passe ne soient transmis en clair. Dans une installation OTOBO basée sur Docker, NGINX est utilisé comme Webproxy avec le module SPNEGO, compilé dans un conteneur « builder » séparé. Ensuite, le module généré dynamiquement (ngx_http_auth_spnego_module.so) est transféré dans le conteneur NGINX réel et la configuration standard est remplacée par une configuration compatible Kerberos :contentReference[oaicite:0]{index="0"}.
Nous suivons ainsi la procédure éprouvée du projet officiel OTOBO Docker, qui réalise une séparation claire entre les stages de Build et de Runtime.

Dans cet article, vous trouverez :

  • Un aperçu complet des différences entre OTOBO et Znuny dans le contexte du SSO Kerberos.
  • Un guide étape par étape, de la préparation de l’AD à la création du Keytab jusqu’à la configuration Docker.
  • Des conseils sur le débogage, la configuration du navigateur et les Best Practices pour différentes versions d’OTOBO.

Bien que OTOBO et Znuny soient fonctionnellement très similaires (tous deux issus du projet OTRS original), il existe les ajustements suivants dans le contexte Kerberos :

  • Chemins de configuration : OTOBO utilise par défaut /opt/otobo-docker/nginx-conf/krb5.conf, Znuny utilise généralement /opt/znuny/nginx-conf/krb5.conf.
  • Fichiers Template : Les templates NGINX diffèrent légèrement en termes de noms et de syntaxe des placeholders ; OTOBO fournit un fichier otobo_nginx-kerberos.conf.template, Znuny un fichier nommé de manière similaire znuny_nginx-kerberos.conf.template.
  • Versionnement : OTOBO 11.x apporte des paramètres SSO étendus (« KerberosAdminServer », « KerberosDefaultDomain »), qui manquent encore dans Znuny 6.x.
  1. Active Directory avec Kerberos (Realm et KDC déjà configurés).
  2. Une installation OTOBO Docker conforme à l’Installation officielle avec Docker :contentReference[oaicite:2]{index="2"}.
  3. Enregistrements DNS :
    • Un enregistrement A pour votre FQDN OTOBO (pas de CNAME !), par ex. otobo.example.com → 192.0.2.10.
    • Reverse-Lookup pour le nom d’hôte, afin que les résolutions SPN Kerberos fonctionnent.

Créez un compte de service dédié dans votre AD, par ex. HTTP/otobo.example.com (UserPrincipalName). Notez :

  • Majuscules pour HTTP/ ; Kerberos attend exactement ce préfixe :contentReference[oaicite:3]{index="3"}.
  • Pas de caractères spéciaux dans le mot de passe (par ex. &).

Connectez-vous à un DC avec des droits d’administrateur et utilisez ktpass.exe :

Fenêtre de terminal
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 avec Realm en majuscules.
  • -mapUser : Nom de compte SAM (pre-W2K), par ex. otobo-svc (doc.otobo.de).
  • -out : Chemin vers le Keytab sur le DC.

Déplacez ensuite le Keytab vers l’hôte Docker :

Fenêtre de terminal
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab

Le Dockerfile officiel utilise un builder séparé avec les paquets de développement nécessaires :

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/

Le module SPNEGO est ainsi compilé de manière compatible avec votre release NGINX (extras.getpagespeed.com).

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 : insérer load_module à la ligne 4.
  • Scripts Envsubst : génèrent /etc/krb5.conf à partir des données de template.
Fenêtre de terminal
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

Créez docker-compose/otobo-nginx-custom-config.yml :

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

Activez dans le .env principal :

COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom
  1. Sauvegardez votre ancien /opt/otobo-docker/.env :

    Fenêtre de terminal
    mv .env .env.bak
    cp .docker_compose_env_https_kerberos .env
  2. Ajoutez les variables Kerberos :

    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. Reprenez les certificats SSL et les mots de passe DB de votre ancien .env.bak.

Démarrez ensuite avec :

Fenêtre de terminal
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.
## 5. Configuration OTOBO
### 5.1 Module Auth dans `Kernel/Config.pm`
Commentez l'authentification LDAP/DB et ajoutez dans votre `Kernel/Config.pm` :
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';

Ainsi, REMOTE_USER est correctement interprété comme login (doc.otobo.de).

  • Configuration système :

    • Réglez Customer::AuthModule sur HTTPBasicAuth.
    • Appliquez AuthModule::HTTPBasicAuth::ReplaceRegExp.
  • Kernel/Config -> Exécutez Deploy.

Pour que SPNEGO fonctionne, votre navigateur doit accepter l’hôte comme trusted :

  • « Options Internet » → SécuritéSites intranet locauxSites
  • Ajoutez le domaine https://otobo.example.com et activez « Authentification Windows intégrée » (doc.otobo.de).
  • Saisissez about:config dans la barre d’adresse.
  • network.negotiate-auth.trusted-uris = https://otobo.example.com
  • network.negotiate-auth.delegation-uris = https://otobo.example.com
  1. Vérifier les logs NGINX

    Fenêtre de terminal
    docker logs otobo_nginx_1 -f
  2. Entrer dans le conteneur

    Fenêtre de terminal
    docker exec -it otobo_nginx_1 bash
    cat /etc/krb5.conf
    klist -e
  3. Récupérer le token SPN

    Fenêtre de terminal
    env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
  4. Tester le Keytab

    Fenêtre de terminal
    kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM

    Erreur KDC cannot fulfill request → DNS/SPN incorrect (plugins.miniorange.com).

  • Keytab propre : Ne jamais réutiliser le compte de service de synchronisation LDAP, évitez les collisions de mots de passe.
  • Least Privilege : Attribution des droits AD minimaux nécessaires pour le compte SSO.
  • Rotation du Keytab : Renouvellement régulier du Keytab tous les 90 jours.
  • TLS pour KDC : Si possible, activez ldaps:// ou GSSAPI via TLS.
  • Monitoring : Surveillez les tickets Kerberos de manière automatisée avec des outils comme klist et kvno.

Avec ce guide complet, votre instance OTOBO Docker est parfaitement préparée pour le SSO Kerberos – incluant une authentification sécurisée, maintenable et évolutive !


Sources :