Skip to content

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

  1. Active Directory avec Kerberos (Realm et KDC déjà configurés).
  2. Un setup 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 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.

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 :

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 avec le Realm en majuscules.
  • -mapUser : Nom de compte SAM (pré-W2K), par exemple otobo-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 :

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 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 :

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/

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

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
  • 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é

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

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

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

Activez-le dans le fichier .env principal :

dotenv
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom

4. Modifications .env

  1. Sauvegardez votre ancien /opt/otobo-docker/.env :

    bash
    mv.env.env.bak
    cp.docker_compose_env_https_kerberos.env
  2. Ajoutez les variables Kerberos :

    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. Prenez les certificats SSL et les mots de passe de base de données de votre ancien .env.bak.

Démarrez ensuite avec :

bash
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"