Introduction
Kerberos SSO (Single Sign-On) permet une connexion transparente de vos agents via Active Directory, sans transmettre les mots de passe en clair. Dans une installation OTOBO basée sur Docker, NGINX est utilisé comme proxy Web avec le module SPNEGO, qui est 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}.
Cela suit la procédure éprouvée du projet Docker OTOBO officiel, qui réalise une séparation claire entre les étapes de construction et d'exécution.
Dans cet article, vous obtiendrez :
- Une vue d'ensemble complète des différences entre OTOBO et Znuny dans le contexte de Kerberos SSO.
- Un guide étape par étape allant de la préparation AD à la création de Keytab et à 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 issus du projet OTRS original), il existe des ajustements fins 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 modèle : Les modèles NGINX diffèrent légèrement en nom et en syntaxe de placeholder ; OTOBO fournit un fichier
otobo_nginx-kerberos.conf.template
, tandis que Znuny fournit un fichier similairement nomméznuny_nginx-kerberos.conf.template
. - Version : OTOBO 11.x introduit des paramètres SSO étendus ( « KerberosAdminServer », « KerberosDefaultDomain »), qui sont absents dans Znuny 6.x.
Prérequis
- Active Directory avec Kerberos (Realm et KDC déjà configurés).
- Un setup 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 exemple
otobo.example.com → 192.0.2.10
. - Une recherche inverse 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. Utilisateur 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 :
- Majuscules pour
HTTP/
; Kerberos attend exactement ce préfixe :contentReference[oaicite:3]{index=3}. - Aucun caractère spécial dans le mot de passe (par exemple
&
).
1.2 Générer SPN et Keytab
Connectez-vous à un DC avec des droits d'administration 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 (pré-W2K), par exempleotobo-svc
([doc.otobo.de][1]).-out
: Chemin d'accès à la Keytab sur le DC.
Déplacez ensuite la Keytab vers 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.keytab
2. NGINX avec module SPNEGO
2.1 Étape de construction dans Dockerfile
Le Dockerfile officiel utilise un constructeur séparé avec les packages 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/
Cela compile le module SPNEGO de manière compatible avec votre version NGINX ([extras.getpagespeed.com][2]).
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_module
à la ligne 4. - Scripts envsubst : générer
/etc/krb5.conf
à partir de données de modèle.
3. Volumes Docker et modèles 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-nginx
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-custom
Activez-le dans le fichier .env
principal :
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom
4. Modifications .env
Sauvegardez votre ancien
/opt/otobo-docker/.env
:bashmv.env.env.bak cp.docker_compose_env_https_kerberos.env
Ajoutez 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.com
Prenez les certificats SSL et les mots de passe de base de données 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 connexion ([doc.otobo.de][1]).
### 5.2 Activation dans l'interface d'administration
* **Configuration du système** :
* `Customer::AuthModule` sur `HTTPBasicAuth`.
* `AuthModule::HTTPBasicAuth::ReplaceRegExp` à partir de la valeur ci-dessus.
* **Kernel/Config** -> **Déployer**.
## 6. Configuration du navigateur
Pour que SPNEGO fonctionne, votre navigateur doit accepter l'hôte comme **approuvé** :
### Chrome / Edge / IE
* « Options Internet » → **Sécurité** → **Sites du réseau local** → **Sites**
* Ajoutez le domaine `https://otobo.example.com` et activez « Authentification Windows intégrée » ([doc.otobo.de][1]).
### Firefox
* `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`
## 7. Débogage et résolution des problèmes
1. **Vérifiez les journaux NGINX**
```bash
docker logs otobo_nginx_1 -f
```
2. **Accédez au conteneur**
```bash
docker exec -it otobo_nginx_1 bash
cat /etc/krb5.conf
klist -e
```
3. **Obtenez un jeton SPN**
```bash
env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
```
4. **Testez la Keytab**
```bash
kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM
```
Une erreur `KDC cannot fulfill request` indique un problème DNS/SPN ([plugins.miniorange.com][3]).
## 8. Bonnes pratiques et sécurité
* **Keytab dédiée** : N'utilisez jamais le compte de service de synchronisation LDAP ; évitez les collisions de mots de passe.
* **Principe du moindre privilège** : Accordez uniquement les droits AD nécessaires pour le compte SSO.
* **Rotation de Keytab** : Renouvellez régulièrement la Keytab tous les 90 jours.
* **TLS pour KDC** : Activez `ldaps://` ou GSSAPI sur TLS si possible.
* **Supervision** : Surveillez les tickets Kerberos avec des outils comme `klist` et `kvno`.
---
Avec ce guide complet, votre instance OTOBO Docker est prête pour Kerberos SSO – authentification sécurisée, maintenable et scalable incluse!
---
**Références :**
* rotheross/otobo-nginx-kerberos-webproxy sur Docker Hub ([hub.docker.com][4])
* Module d'authentification SPNEGO HTTP NGINX (stnoonan) ([extras.getpagespeed.com][2])
* Documentation d'installation officielle OTOBO (11.0 SSO Kerberos) ([doc.otobo.de][1])
* Problème GitHub #81 : NGINX Kerberos cassé ([github.com][5])
* Guide de configuration Kerberos SSO de miniOrange ([plugins.miniorange.com][3])
* Surcharge OTOBO Docker pour HTTPS-Kerberos ([github.com][6])
* Manuels de développement et d'administration OTOBO
* Microsoft Docs : ktpass.exe ([community.znuny.org][7])
* Mozilla MDN : SPNEGO dans Firefox ([doc.otobo.de][1])
* Docs NGINX : modules dynamiques ([extras.getpagespeed.com][2])
[1]: https://doc.otobo.de/manual/installation/11.0/fr/content/sso-kerberos.html?utm_source=chatgpt.com "Kerberos Single Sign On dans l'installation OTOBO Docker"
[2]: https://extras.getpagespeed.com/redhat/9/x86_64/repoview/nginx-module-spnego-http-auth.html?utm_source=chatgpt.com "nginx-module-spnego-http-auth dans CentOS/RHEL 9 (x86_64)"
[3]: https://plugins.miniorange.com/guide-to-setup-kerberos-single-sign-sso?utm_source=chatgpt.com "Guide de configuration Kerberos SSO : un guide de configuration complet"
[4]: https://hub.docker.com/r/rotheross/otobo-nginx-kerberos-webproxy?utm_source=chatgpt.com "rotheross/otobo-nginx-kerberos-webproxy - Docker Hub"
[5]: https://github.com/RotherOSS/otobo-docker/issues/81?utm_source=chatgpt.com "NGINX Kerberos semble cassé · Problème #81 · RotherOSS/otobo-docker"
[6]: https://github.com/RotherOSS/otobo-docker/blob/rel-10_1/.docker_compose_env_https_kerberos?utm_source=chatgpt.com "otobo-docker/.docker_compose_env_https_kerberos à rel-10_1"
[7]: https://community.znuny.org/viewtopic.php?t=28160&utm_source=chatgpt.com "Authentification SSO client non fonctionnelle, Kerberos fonctionne"