Introduction
Kerberos SSO (Single Sign-On) permet une connexion transparente pour vos agents via Active Directory, sans transfert de mots de passe en clair. Dans une installation OTOBO basée sur Docker, NGINX est utilisé comme proxy web avec le module SPNEGO, compilé dans un conteneur "builder" séparé. Le module généré dynamiquement (ngx_http_auth_spnego_module.so) est ensuite transféré dans le conteneur NGINX réel, et la configuration par défaut est remplacée par une configuration compatible Kerberos :contentReference[oaicite:0]{index=0}. Nous suivons ainsi la meilleure pratique du projet Docker OTOBO officiel, qui réalise une séparation claire entre les étapes de build et d'exécution.
Dans cet article, vous trouverez :
- Un aperçu complet des différences entre OTOBO et Znuny dans le contexte de Kerberos SSO.
- Un guide étape par étape, de la préparation AD à la création de keytab en passant par la configuration Docker.
- Des conseils pour le débogage, la configuration du navigateur et les meilleures pratiques pour différentes versions d'OTOBO.
Différences entre OTOBO et Znuny
Bien que OTOBO et Znuny soient fonctionnellement très similaires (tous deux dérivés 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, tandis que Znuny utilise généralement/opt/znuny/nginx-conf/krb5.conf. - Fichiers de template : Les templates NGINX diffèrent légèrement par leurs noms et leur syntaxe de placeholders ; OTOBO fournit un fichier
otobo_nginx-kerberos.conf.template, et Znuny un fichier nommé de manière similaireznuny_nginx-kerberos.conf.template. - Versionnement : OTOBO 11.x apporte des paramètres SSO étendus ("KerberosAdminServer", "KerberosDefaultDomain"), qui sont encore absents dans Znuny 6.x.
Prérequis
- Active Directory avec Kerberos (Realm et KDC déjà configurés).
- Un setup Docker OTOBO conformément à Installation officielle avec Docker :contentReference[oaicite:2]{index=2}.
- Enregistrements DNS :
- Un enregistrement A pour votre FQDN OTOBO (pas de CNAME !), par exemple
otobo.example.com → 192.0.2.10. - Recherche inversée pour le nom d'hôte, afin que les résolutions SPN Kerberos fonctionnent.
- Un enregistrement A pour votre FQDN OTOBO (pas de CNAME !), par exemple
1. Utilisateurs Active Directory et SPN
1.1 Créer un utilisateur
Créez un compte de service dédié dans votre AD, par exemple HTTP/otobo.example.com (UserPrincipalName). Notez :
- La casse 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 exemple
&).
1.2 Générer le SPN et la Keytab
Connectez-vous à un DC avec des droits d'administrateur et utilisez ktpass.exe :
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 le Realm en majuscules.-mapUser: Nom de compte SAM (pre-W2K), par exempleotobo-svc(doc.otobo.de).-out: Chemin vers la keytab sur le DC.
Déplacez ensuite la keytab sur l'hôte Docker :
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab2. NGINX avec module SPNEGO
2.1 Étape de build dans Dockerfile
Le Dockerfile officiel utilise un builder séparé avec les paquets Dev 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/Cela compile le module SPNEGO de manière compatible avec votre version NGINX (extras.getpagespeed.com).
2.2 Configuration dans le conteneur d'exécution
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- Chargement du module :
load_moduleinséré à la ligne 4. - Scripts Envsubst génèrent
/etc/krb5.confà partir des données du template.
3. Volumes Docker et templates nginx
3.1 Créer un volume personnalisé
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-nginx3.2 docker-compose-Override
Créez docker-compose/otobo-nginx-custom-config.yml :
version: '3.7'
services:
nginx:
volumes:
- otobo_nginx_custom_config:/etc/nginx/config/template-customActivez dans le .env principal :
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom4. Ajustements .env
Sauvegardez votre ancien
/opt/otobo-docker/.env:bashmv .env .env.bak cp .docker_compose_env_https_kerberos .envAjoutez les variables Kerberos :
dotenvOTOBO_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.comReprenez les certificats SSL et les mots de passe DB de votre ancien
.env.bak.
Démarrez ensuite avec :
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.
## 5. Configuration OTOBO
### 5.1 Module d'authentification 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'} = '^(.+?)@.+?$';Cela interprète correctement REMOTE_USER comme login (doc.otobo.de).
5.2 Activation dans l'interface Admin
Configuration système :
- Définir
Customer::AuthModulesurHTTPBasicAuth. - Reprendre
AuthModule::HTTPBasicAuth::ReplaceRegExp.
- Définir
Kernel/Config -> Exécuter Deploy.
6. Configuration du navigateur
Pour que SPNEGO fonctionne, votre navigateur doit accepter l'hôte comme fiable :
Chrome / Edge / IE
- "Options Internet" → Sécurité → Sites intranet locaux → Sites
- Ajoutez le domaine
https://otobo.example.comet activez "Authentification Windows intégrée" (doc.otobo.de).
Firefox
- Entrez
about:configdans la barre d'adresse. network.negotiate-auth.trusted-uris = https://otobo.example.comnetwork.negotiate-auth.delegation-uris = https://otobo.example.com
7. Débogage et dépannage
Vérifier les logs NGINX
bashdocker logs otobo_nginx_1 -fSe connecter au conteneur
bashdocker exec -it otobo_nginx_1 bash cat /etc/krb5.conf klist -eObtenir le token SPN
bashenv KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COMTester la Keytab
bashkinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COMErreur
KDC cannot fulfill request→ DNS/SPN incorrect (plugins.miniorange.com).
8. Meilleures pratiques et sécurité
- Keytab dédiée : Ne jamais réutiliser le compte de service de synchronisation LDAP, éviter les collisions de mots de passe.
- Moindre privilège : Attribuer uniquement les droits AD minimaux nécessaires au compte SSO.
- Rotation des Keytabs : Renouveler régulièrement la keytab tous les 90 jours.
- TLS pour KDC : Si possible, activer
ldaps://ou GSSAPI sur TLS. - Surveillance : Surveiller les tickets Kerberos de manière automatisée avec des outils comme
klistetkvno.
Avec ce guide complet, votre instance Docker OTOBO est parfaitement préparée pour Kerberos SSO – authentification sécurisée, maintenable et évolutive incluse !
Sources :
- rotheross/otobo-nginx-kerberos-webproxy sur Docker Hub (hub.docker.com)
- SPNEGO HTTP Auth NGINX Module (stnoonan) (extras.getpagespeed.com)
- Documentation officielle d'installation OTOBO (11.0 SSO Kerberos) (doc.otobo.de)
- Issue GitHub #81 : NGINX Kerberos broken (github.com)
- Guide miniOrange Kerberos SSO (plugins.miniorange.com)
- OTOBO Docker Override HTTPS-Kerberos (github.com)
- Manuels de développement et d'administration OTOBO
- Microsoft Docs : ktpass.exe (community.znuny.org)
- Mozilla MDN : SPNEGO dans Firefox (doc.otobo.de)
- Docs NGINX : modules dynamiques (extras.getpagespeed.com)