Sso Kerberos
Introduction
Section intitulée « Introduction »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.
Différences avec d’autres systèmes
Section intitulée « Différences avec d’autres systèmes »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 similaireznuny_nginx-kerberos.conf.template. - Versionnement : OTOBO 11.x apporte des paramètres SSO étendus (« KerberosAdminServer », « KerberosDefaultDomain »), qui manquent encore dans Znuny 6.x.
Prérequis
Section intitulée « Prérequis »- Active Directory avec Kerberos (Realm et KDC déjà configurés).
- Une installation OTOBO Docker conforme à l’Installation officielle avec Docker :contentReference[oaicite:2]{index="2"}.
- 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.
- Un enregistrement A pour votre FQDN OTOBO (pas de CNAME !), par ex.
1. Utilisateur Active Directory et SPN
Section intitulée « 1. Utilisateur Active Directory et SPN »1.1 Créer l’utilisateur
Section intitulée « 1.1 Créer l’utilisateur »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.
&).
1.2 Générer le SPN et le Keytab
Section intitulée « 1.2 Générer le SPN et le 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 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 :
docker_admin> mkdir -p /opt/otobo-docker/nginx-confdocker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab2. NGINX avec module SPNEGO
Section intitulée « 2. NGINX avec module SPNEGO »2.1 Build-Stage dans le Dockerfile
Section intitulée « 2.1 Build-Stage dans le Dockerfile »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 wgetWORKDIR /usr/srcRUN 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.gzRUN 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).
2.2 Configuration dans le conteneur Runtime
Section intitulée « 2.2 Configuration dans le conteneur Runtime »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/templatesCOPY 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.
3. Volumes Docker & templates nginx
Section intitulée « 3. Volumes Docker & templates nginx »3.1 Créer un volume personnalisé
Section intitulée « 3.1 Créer un volume personnalisé »docker volume create otobo_nginx_custom_configmp=$(docker volume inspect --format '{{ .Mountpoint }}' otobo_nginx_custom_config)docker create --name tmp-nginx rotheross/otobo-nginx-webproxy:latest-11_0docker cp tmp-nginx:/etc/nginx/templates/otobo_nginx-kerberos.conf.template.hidden $mp/otobo_nginx.conf.templatedocker rm tmp-nginx3.2 docker-compose-Override
Section intitulée « 3.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.ymlNGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom4. Ajustements du .env
Section intitulée « 4. Ajustements du .env »-
Sauvegardez votre ancien
/opt/otobo-docker/.env:Fenêtre de terminal mv .env .env.bakcp .docker_compose_env_https_kerberos .env -
Ajoutez les variables Kerberos :
OTOBO_NGINX_KERBEROS_KEYTAB=/opt/otobo-docker/nginx-conf/krb5.keytabOTOBO_NGINX_KERBEROS_CONFIG=/opt/otobo-docker/nginx-conf/krb5.confOTOBO_NGINX_KERBEROS_SERVICE_NAME=HTTP/otobo.example.comOTOBO_NGINX_KERBEROS_REALM=EXAMPLE.COMOTOBO_NGINX_KERBEROS_KDC=dc1.example.comOTOBO_NGINX_KERBEROS_ADMIN_SERVER=dc1.example.comOTOBO_NGINX_KERBEROS_DEFAULT_DOMAIN=example.com -
Reprenez 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 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).
5.2 Activation dans l’interface Admin
Section intitulée « 5.2 Activation dans l’interface Admin »-
Configuration système :
- Réglez
Customer::AuthModulesurHTTPBasicAuth. - Appliquez
AuthModule::HTTPBasicAuth::ReplaceRegExp.
- Réglez
-
Kernel/Config -> Exécutez Deploy.
6. Configuration du navigateur
Section intitulée « 6. Configuration du navigateur »Pour que SPNEGO fonctionne, votre navigateur doit accepter l’hôte comme trusted :
Chrome / Edge / IE
Section intitulée « 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).
- Saisissez
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 & Troubleshooting
Section intitulée « 7. Débogage & Troubleshooting »-
Vérifier les logs NGINX
Fenêtre de terminal docker logs otobo_nginx_1 -f -
Entrer dans le conteneur
Fenêtre de terminal docker exec -it otobo_nginx_1 bashcat /etc/krb5.confklist -e -
Récupérer le token SPN
Fenêtre de terminal env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM -
Tester le Keytab
Fenêtre de terminal kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COMErreur
KDC cannot fulfill request→ DNS/SPN incorrect (plugins.miniorange.com).
8. Best Practices & Sécurité
Section intitulée « 8. Best Practices & Sécurité »- 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
klistetkvno.
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 :
- rotheross/otobo-nginx-kerberos-webproxy sur Docker Hub (hub.docker.com)
- SPNEGO HTTP Auth NGINX Module (stnoonan) (extras.getpagespeed.com)
- Documentation d’installation officielle OTOBO (11.0 SSO Kerberos) (doc.otobo.de)
- GitHub Issue #81: NGINX Kerberos broken (github.com)
- miniOrange Kerberos SSO Guide (plugins.miniorange.com)
- OTOBO Docker Override HTTPS-Kerberos (github.com)
- Manuels développeur et administrateur OTOBO
- Microsoft Docs: ktpass.exe (community.znuny.org)
- Mozilla MDN: SPNEGO dans Firefox (doc.otobo.de)
- NGINX Docs: dynamic modules (extras.getpagespeed.com)