Introduction

o2Cloud IAM (Identity & Access Management) est une application web professionnelle de gestion de changement de mot de passe Active Directory. Elle offre une interface moderne et intuitive permettant aux utilisateurs de modifier leur mot de passe AD de manière sécurisée et autonome.

Objectifs

Note : Cette documentation couvre l'installation, la configuration et l'utilisation de o2Cloud IAM version 1.0. Pour toute question, contactez admin@o2cloud.fr

Prérequis

Serveur Web

Composant Version minimale Recommandation
PHP 8.0 8.1 ou supérieur
Extension PHP LDAP Requis php-ldap
Extension PHP OpenSSL Requis php-openssl
Composer 2.0 Dernière version
Serveur web - Apache 2.4 ou Nginx 1.18

Infrastructure Active Directory

Système d'exploitation

Compatible :
  • Windows Server 2012+ avec IIS ou Apache
  • Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+, RHEL 8+)

Fonctionnalités

Interface utilisateur

Sécurité

Gestion des accès

Gestion des mots de passe

Logs & Audit

Internationalisation

Installation

1Cloner le repository

Téléchargez les fichiers sources de o2Cloud IAM :

git clone https://github.com/o2Cloud-fr/o2Cloud-IAM.git
cd o2Cloud-IAM
Astuce : Si vous avez acheté la licence, vous recevrez une archive ZIP contenant tous les fichiers. Extrayez-la dans le répertoire de votre serveur web.

2Installer les dépendances

o2Cloud IAM utilise Composer pour gérer ses dépendances PHP :

composer install

Vérification des extensions PHP

Vérifiez que les extensions requises sont installées :

php -m | grep ldap
php -m | grep openssl

Installation des extensions manquantes

Ubuntu/Debian :
sudo apt-get update
sudo apt-get install php-ldap php-openssl php-mbstring
sudo systemctl restart apache2
CentOS/RHEL :
sudo yum install php-ldap php-openssl php-mbstring
sudo systemctl restart httpd
Windows/XAMPP :

Éditez C:\xampp\php\php.ini et décommentez :

extension=ldap
extension=openssl
extension=mbstring

Redémarrez Apache depuis le panneau de contrôle XAMPP.

3Configuration des certificats SSL (LDAPS)

Important : Cette étape est obligatoire pour utiliser LDAPS (port 636) ou STARTTLS (port 389). Sans configuration correcte des certificats, les connexions sécurisées échoueront.

Windows (XAMPP)

Étape 1 : Exporter le certificat CA depuis Active Directory

Sur le contrôleur de domaine Windows, ouvrez PowerShell en administrateur :

# Créer le dossier temporaire
New-Item -Path "C:\temp" -ItemType Directory -Force

# Exporter le certificat CA
$caName = "Votre-CA-Name"  # Ex: contoso-DC-CA
$cert = Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object {$_.Subject -match $caName}

if ($cert) {
    # Export en format Base64 (PEM)
    $base64 = [System.Convert]::ToBase64String($cert.RawData)
    
    # Créer le fichier PEM
    $pem = "-----BEGIN CERTIFICATE-----`r`n"
    for ($i = 0; $i -lt $base64.Length; $i += 64) {
        $len = [Math]::Min(64, $base64.Length - $i)
        $pem += $base64.Substring($i, $len) + "`r`n"
    }
    $pem += "-----END CERTIFICATE-----`r`n"
    
    # Sauvegarder
    [System.IO.File]::WriteAllText("C:\temp\ca-cert.pem", $pem)
    
    Write-Host " Certificat exporté dans C:\temp\ca-cert.pem" -ForegroundColor Green
} else {
    Write-Host " Certificat CA introuvable" -ForegroundColor Red
}

Étape 2 : Installer le certificat dans XAMPP/PHP

REM Créer le dossier de configuration OpenLDAP
mkdir C:\openldap\sysconf

REM Copier le certificat
copy C:\temp\ca-cert.pem C:\openldap\sysconf\cacert.pem

REM Créer le fichier de configuration
notepad C:\openldap\sysconf\ldap.conf

Contenu du fichier C:\openldap\sysconf\ldap.conf :

# Configuration OpenLDAP pour XAMPP
TLS_CACERT C:/openldap/sysconf/cacert.pem
TLS_REQCERT demand
TLS_PROTOCOL_MIN 3.1
Production : En production, utilisez toujours TLS_REQCERT demand pour valider les certificats.
Développement uniquement : Pour ignorer la validation (NE JAMAIS utiliser en production) :
TLS_REQCERT never

Linux (Ubuntu/Debian)

# Copier le certificat CA
sudo mkdir -p /etc/ldap
sudo cp ca-cert.pem /etc/ldap/cacert.pem

# Créer le fichier de configuration
sudo nano /etc/ldap/ldap.conf

Contenu de /etc/ldap/ldap.conf :

TLS_CACERT /etc/ldap/cacert.pem
TLS_REQCERT demand

Linux (RedHat/CentOS)

# Copier le certificat CA
sudo mkdir -p /etc/openldap/certs
sudo cp ca-cert.pem /etc/openldap/certs/cacert.pem

# Créer le fichier de configuration
sudo nano /etc/openldap/ldap.conf

Contenu de /etc/openldap/ldap.conf :

TLS_CACERT /etc/openldap/certs/cacert.pem
TLS_REQCERT demand

Redémarrer le serveur web :

sudo systemctl restart apache2  # Ubuntu/Debian
sudo systemctl restart httpd     # CentOS/RHEL

4Configuration du serveur web

Apache

Créez un VirtualHost pour o2Cloud IAM :

<VirtualHost *:443>
    ServerName iam.o2cloud.fr
    DocumentRoot /var/www/o2Cloud-IAM/public
    
    <Directory /var/www/o2Cloud-IAM/public>
        AllowOverride All
        Require all granted
    </Directory>
    
    SSLEngine on
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/private.key
    SSLCertificateChainFile /path/to/chain.crt
    
    ErrorLog ${APACHE_LOG_DIR}/o2cloud_iam_error.log
    CustomLog ${APACHE_LOG_DIR}/o2cloud_iam_access.log combined
</VirtualHost>

Activez le VirtualHost et les modules nécessaires :

sudo a2enmod rewrite ssl
sudo a2ensite o2cloud-iam.conf
sudo systemctl reload apache2

Nginx

Créez un fichier de configuration dans /etc/nginx/sites-available/o2cloud-iam :

server {
    listen 443 ssl http2;
    server_name iam.o2cloud.fr;
    root /var/www/o2Cloud-IAM/public;
    index index.php;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    location ~ /\.ht {
        deny all;
    }
    
    access_log /var/log/nginx/o2cloud_iam_access.log;
    error_log /var/log/nginx/o2cloud_iam_error.log;
}

Activez la configuration :

sudo ln -s /etc/nginx/sites-available/o2cloud-iam /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

IIS (Windows Server)

Configuration via le gestionnaire IIS :

  1. Ouvrez le Gestionnaire IIS
  2. Clic droit sur Sites → Ajouter un site web
  3. Configurez :
    • Nom du site : o2Cloud IAM
    • Chemin physique : C:\inetpub\wwwroot\o2Cloud-IAM\public
    • Liaison : HTTPS, port 443
    • Certificat SSL : Sélectionnez votre certificat
  4. Dans Gestionnaire de réécriture d'URL, importez les règles depuis .htaccess

5Permissions des fichiers

Linux

# Définir les permissions appropriées
sudo chmod 755 /var/www/o2Cloud-IAM
sudo chmod 755 /var/www/o2Cloud-IAM/public
sudo chmod 644 /var/www/o2Cloud-IAM/public/index.php

# Créer et sécuriser les dossiers
sudo mkdir -p /var/www/o2Cloud-IAM/config
sudo mkdir -p /var/www/o2Cloud-IAM/logs
sudo chmod 775 /var/www/o2Cloud-IAM/config
sudo chmod 775 /var/www/o2Cloud-IAM/logs

# Propriétaire : utilisateur du serveur web
sudo chown -R www-data:www-data /var/www/o2Cloud-IAM  # Ubuntu/Debian
sudo chown -R apache:apache /var/www/o2Cloud-IAM      # CentOS/RHEL

Windows

Configurez les permissions via l'explorateur Windows :

  1. Clic droit sur le dossier o2Cloud-IAM → Propriétés → Sécurité
  2. Ajoutez l'utilisateur IIS_IUSRS ou IUSR
  3. Accordez les permissions :
    • Lecture & Exécution
    • Afficher le contenu du dossier
    • Lecture
  4. Pour le dossier config et logs, ajoutez également Écriture
Sécurité : Le fichier config/config.php contient des informations sensibles (mot de passe du compte de service). Assurez-vous qu'il n'est pas accessible publiquement et qu'il a des permissions restrictives (chmod 600 sur Linux).

6Installation via l'interface web

Une fois le serveur web configuré, accédez à l'assistant d'installation :

https://iam.o2cloud.fr/install.php

Étape 1 : Configuration Active Directory

Étape 2 : Configuration de la sécurité

Étape 3 : Politique de mot de passe

Étape 4 : Paramètres de l'application

Test de connexion : Utilisez le bouton "Tester la connexion" avant de sauvegarder pour valider votre configuration AD.

Validation de l'installation

L'assistant testera automatiquement :

Une fois validé, cliquez sur "Enregistrer et terminer". Le fichier config/config.php sera généré automatiquement.

Configuration Active Directory

Structure de configuration

Les paramètres Active Directory sont stockés dans config/config.php :

'ad' => [
    'server' => 'dc.contoso.com',           // FQDN du contrôleur de domaine
    'port' => 636,                          // 636 = LDAPS, 389 = LDAP
    'use_ssl' => true,                      // true = LDAPS, false = LDAP
    'base_dn' => 'DC=contoso,DC=com',      // Distinguished Name de base
    'service_account_dn' => 'CN=Service PWD Reset,OU=Service Accounts,DC=contoso,DC=com',
    'service_account_password' => 'MotDePasseSecurise123!',
],

Choix du protocole

Protocole Port use_ssl Description
LDAPS 636 true Connexion SSL/TLS directe (recommandé)
LDAP+STARTTLS 389 false Chiffrement après connexion initiale
Important : Le changement de mot de passe Active Directory nécessite obligatoirement une connexion chiffrée (LDAPS ou STARTTLS). Une connexion LDAP non sécurisée (port 389 sans STARTTLS) sera refusée par Active Directory.

Compte de service Active Directory

Création du compte

Le compte de service est un compte AD utilisé par o2Cloud IAM pour se connecter à Active Directory et effectuer les changements de mots de passe.

Étape 1 : Créer le compte dans AD

  1. Ouvrez Active Directory Users and Computers
  2. Naviguez vers l'OU Service Accounts (créez-la si nécessaire)
  3. Clic droit → Nouveau → Utilisateur
  4. Configurez :
    • Prénom : Service
    • Nom : PWD Reset
    • Nom d'ouverture de session : srv_pwd_reset
  5. Définissez un mot de passe fort et complexe
  6. Cochez :
    • Le mot de passe n'expire jamais
    • L'utilisateur ne peut pas changer de mot de passe

Étape 2 : Récupérer le Distinguished Name

Ouvrez les propriétés du compte → onglet Éditeur d'attributs → copiez la valeur de distinguishedName

Exemple : CN=srv_pwd_reset,OU=Service Accounts,DC=contoso,DC=com

Permissions requises

Le compte de service doit avoir les permissions suivantes :

Permission Portée Usage
Read Base DN et sous-objets Rechercher les utilisateurs dans l'annuaire
Reset Password Objets utilisateurs Réinitialiser les mots de passe
Read Members Groupe d'autorisation Vérifier l'appartenance au groupe
Sécurité : Le compte de service ne doit avoir que les permissions nécessaires. N'accordez pas de droits d'administrateur de domaine.

Délégation de contrôle

Pour accorder les permissions au compte de service :

Méthode 1 : Assistant de délégation (recommandé)

  1. Ouvrez Active Directory Users and Computers
  2. Clic droit sur l'OU contenant les utilisateurs → Déléguer le contrôle
  3. Cliquez sur Suivant
  4. Cliquez sur Ajouter et sélectionnez le compte de service
  5. Cliquez sur Suivant
  6. Sélectionnez "Réinitialiser les mots de passe utilisateur et forcer le changement de mot de passe à l'ouverture de session suivante"
  7. Cliquez sur Suivant puis Terminer

Méthode 2 : Permissions avancées (manuel)

  1. Clic droit sur l'OU → Propriétés → onglet Sécurité
  2. Cliquez sur Avancé
  3. Cliquez sur Ajouter
  4. Sélectionnez le compte de service
  5. Dans Type : Autoriser
  6. Dans S'applique à : Objets utilisateur descendants
  7. Cochez les permissions :
    • Réinitialiser le mot de passe
    • Lire toutes les propriétés
  8. Cliquez sur OK pour appliquer
Astuce : Pour tester les permissions, essayez de réinitialiser manuellement le mot de passe d'un utilisateur test en vous connectant avec le compte de service.

Groupe d'autorisation (optionnel)

Le groupe d'autorisation permet de contrôler qui peut utiliser o2Cloud IAM.

Création du groupe

  1. Ouvrez Active Directory Users and Computers
  2. Naviguez vers l'OU Security/Grps (créez-la si nécessaire)
  3. Clic droit → Nouveau → Groupe
  4. Configurez :
    • Nom du groupe : Reset_Password_Web
    • Type de groupe : Sécurité
    • Étendue du groupe : Globale
  5. Ajoutez une description : "Utilisateurs autorisés à changer leur mot de passe via le portail web"

Ajout des membres

Double-cliquez sur le groupe → onglet Membres → Ajouter → Sélectionnez les utilisateurs

Récupération du Distinguished Name

Propriétés du groupe → Éditeur d'attributs → copiez distinguishedName

Exemple : CN=Reset_Password_Web,OU=Grps,OU=Security,DC=contoso,DC=com

Important : Si le contrôle par groupe est activé dans o2Cloud IAM, seuls les membres de ce groupe pourront se connecter et changer leur mot de passe.

Désactivation du contrôle par groupe

Pour permettre à tous les utilisateurs AD d'utiliser o2Cloud IAM, éditez config/config.php :

'security' => [
    'group_enabled' => false,  // Désactiver le contrôle par groupe
    // ...
],

Configuration de la sécurité

Les paramètres de sécurité dans config/config.php :

'security' => [
    'group_enabled' => true,
    'authorized_group_dn' => 'CN=Reset_Password_Web,OU=Security,OU=Grps,DC=contoso,DC=com',
    'session_timeout' => 900,        // 15 minutes
    'max_login_attempts' => 5,        // 5 tentatives avant blocage
],

Session timeout

Durée d'inactivité avant expiration de la session (en secondes) :

Tentatives de connexion

Nombre de tentatives de connexion échouées avant blocage temporaire (15 minutes) :

Blocage temporaire : Après avoir atteint le nombre maximum de tentatives, l'utilisateur est bloqué pendant 15 minutes. Cette durée n'est pas configurable pour des raisons de sécurité.

Politique de mots de passe

o2Cloud IAM applique ses propres règles de complexité en plus des règles Active Directory.

'password_policy' => [
    'min_length' => 12,                   // Longueur minimale
    'require_uppercase' => true,          // Au moins une majuscule
    'require_lowercase' => true,          // Au moins une minuscule  
    'require_numbers' => true,            // Au moins un chiffre
    'require_special_chars' => true,      // Au moins un caractère spécial
],

Recommandations ANSSI

L'Agence Nationale de la Sécurité des Systèmes d'Information (ANSSI) recommande :

Configuration recommandée

Contexte min_length Complexité
Standard entreprise 12 Tous les critères activés
Haute sécurité 16 Tous les critères activés
Utilisateurs avancés 20 Complexité optionnelle
Attention : Les règles définies dans o2Cloud IAM s'ajoutent aux règles Active Directory. Un mot de passe doit satisfaire les deux politiques pour être accepté.

Configuration manuelle

Si vous préférez configurer manuellement sans utiliser l'assistant, créez le fichier config/config.php :

<?php
/**
 * Configuration o2Cloud IAM
 * Généré manuellement
 */

return [
    'ad' => [
        'server' => 'dc.contoso.com',
        'port' => 636,
        'use_ssl' => true,
        'base_dn' => 'DC=contoso,DC=com',
        'service_account_dn' => 'CN=srv_pwd_reset,OU=Service Accounts,DC=contoso,DC=com',
        'service_account_password' => 'VotreMotDePasseSecurise123!',
    ],

    'security' => [
        'group_enabled' => true,
        'authorized_group_dn' => 'CN=Reset_Password_Web,OU=Security,OU=Grps,DC=contoso,DC=com',
        'session_timeout' => 900,
        'max_login_attempts' => 5,
    ],

    'app' => [
        'name' => 'o2Cloud IAM',
        'locale' => 'fr',
        'timezone' => 'Europe/Paris',
    ],

    'password_policy' => [
        'min_length' => 12,
        'require_uppercase' => true,
        'require_lowercase' => true,
        'require_numbers' => true,
        'require_special_chars' => true,
    ],
];

Permissions du fichier

IMPORTANT : Le fichier config/config.php contient des informations sensibles. Protégez-le avec des permissions restrictives :
# Linux
chmod 600 config/config.php
chown www-data:www-data config/config.php

Sur Windows, restreignez l'accès au compte IIS uniquement.

Bonnes pratiques de sécurité

Implémentées par o2Cloud IAM

Recommandations de déploiement

1. HTTPS obligatoire

CRITIQUE : Déployez toujours o2Cloud IAM avec un certificat SSL/TLS valide. N'utilisez jamais HTTP en production.

2. Firewall et segmentation réseau

# Exemple iptables (Linux)
# Autoriser uniquement le serveur web à se connecter au DC
iptables -A OUTPUT -p tcp -d 10.0.0.10 --dport 636 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 636 -j DROP

3. Validation des certificats

Production : En production, utilisez toujours TLS_REQCERT demand dans ldap.conf pour valider les certificats.

4. Compte de service

5. Fichier de configuration

# Linux - Permissions restrictives
chmod 600 config/config.php
chown www-data:www-data config/config.php

# Vérifier que le fichier n'est pas accessible via le web
curl https://iam.o2cloud.fr/config/config.php
# Doit retourner 403 Forbidden

6. Surveillance des logs

7. Mises à jour

8. Sauvegarde

LDAPS - Configuration détaillée

Pourquoi LDAPS ?

Active Directory refuse les modifications de mots de passe sur une connexion non chiffrée. LDAPS (ou STARTTLS) est donc obligatoire pour o2Cloud IAM.

LDAPS vs LDAP+STARTTLS

Protocole Port Avantages Inconvénients
LDAPS 636 • Chiffrement dès la connexion
• Plus simple à configurer
• Standard de facto
• Nécessite un port dédié
STARTTLS 389 • Utilise le port LDAP standard
• Moins de ports firewall
• Connexion initiale non chiffrée
• Légèrement plus complexe
Recommandation : Utilisez LDAPS (port 636) pour une configuration plus simple et un chiffrement immédiat.

Vérification de la configuration LDAPS

Test de connectivité

# Tester l'accès au port LDAPS
telnet dc.contoso.com 636

# Ou avec openssl
openssl s_client -connect dc.contoso.com:636 -showcerts

Test avec ldapsearch

# Linux - Test LDAPS
ldapsearch -H ldaps://dc.contoso.com:636 \
  -D "CN=srv_pwd_reset,OU=Service Accounts,DC=contoso,DC=com" \
  -W -b "DC=contoso,DC=com" "(objectClass=user)" cn

# Test STARTTLS
ldapsearch -H ldap://dc.contoso.com:389 -ZZ \
  -D "CN=srv_pwd_reset,OU=Service Accounts,DC=contoso,DC=com" \
  -W -b "DC=contoso,DC=com" "(objectClass=user)" cn

Résolution des problèmes de certificat

Erreur "Can't contact LDAP server"

Cause : Le certificat CA n'est pas reconnu par le système.

Solution :

  1. Vérifiez que le fichier CA est au bon emplacement :
    • Windows : C:\openldap\sysconf\cacert.pem
    • Linux : /etc/ldap/cacert.pem ou /etc/openldap/certs/cacert.pem
  2. Vérifiez le contenu du fichier ldap.conf
  3. Redémarrez le serveur web après modification

Erreur "certificate verify failed"

Cause : Le certificat du serveur AD ne correspond pas au certificat CA.

Solution :

Contournement temporaire (DEV uniquement)

DANGER : N'utilisez JAMAIS en production !
# ldap.conf - DEV UNIQUEMENT
TLS_REQCERT never

Logs & Audit

o2Cloud IAM génère trois types de logs dans le dossier logs/ :

1. access.log

Enregistre toutes les tentatives de connexion (réussies et échouées).

[2026-01-03 14:23:45] [192.168.1.100] Authentification réussie pour: jdupont@contoso.com
[2026-01-03 14:25:12] [192.168.1.101] Échec d'authentification pour: mmartin@contoso.com
[2026-01-03 14:26:33] [192.168.1.100] Authentification réussie pour: sdurand@contoso.com

Surveillance

2. password_changes.log

Enregistre tous les changements de mots de passe.

[2026-01-03 14:30:15] [192.168.1.100] Tentative de modification pour: CN=Jean Dupont,OU=Users,DC=contoso,DC=com
[2026-01-03 14:30:16] [192.168.1.100] Mot de passe modifié avec succès pour: CN=Jean Dupont,OU=Users,DC=contoso,DC=com
[2026-01-03 14:32:45] [192.168.1.102] Tentative de modification pour: CN=Sophie Durand,OU=Users,DC=contoso,DC=com
[2026-01-03 14:32:46] [192.168.1.102] Mot de passe modifié avec succès pour: CN=Sophie Durand,OU=Users,DC=contoso,DC=com

Conformité

3. errors.log

Enregistre toutes les erreurs applicatives et LDAP.

[2026-01-03 14:35:22] [192.168.1.103] Impossible de se connecter au serveur LDAP: dc.contoso.com
[2026-01-03 14:36:45] [192.168.1.104] Échec de modification du mot de passe pour CN=Test User,DC=contoso,DC=com - Erreur LDAP #53: Server is unwilling to perform
[2026-01-03 14:38:12] [192.168.1.105] Erreur 53: Le serveur ne veut pas effectuer l'opération. Vérifiez que LDAPS est utilisé.

Dépannage

Rotation des logs

Pour éviter que les logs ne deviennent trop volumineux, configurez une rotation :

Linux (logrotate)

Créez /etc/logrotate.d/o2cloud-iam :

/var/www/o2Cloud-IAM/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    sharedscripts
}

Windows (PowerShell)

Créez une tâche planifiée qui exécute ce script :

# Rotate-O2CloudLogs.ps1
$logsPath = "C:\inetpub\wwwroot\o2Cloud-IAM\logs"
$maxAge = 30  # jours

Get-ChildItem -Path $logsPath -Filter "*.log" | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$maxAge) } |
    Remove-Item -Force

Analyse des logs

Exemples de commandes utiles :

# Linux - Compter les connexions réussies aujourd'hui
grep "$(date +%Y-%m-%d)" logs/access.log | grep "réussie" | wc -l

# Compter les échecs aujourd'hui
grep "$(date +%Y-%m-%d)" logs/access.log | grep "Échec" | wc -l

# Lister les changements de mot de passe
grep "succès" logs/password_changes.log | tail -n 20

# Trouver les erreurs LDAP
grep "Erreur LDAP" logs/errors.log | tail -n 10

Dépannage

Erreur : Cannot connect to LDAP server

Message complet : Cannot connect to LDAP server

Causes possibles

  1. Le serveur AD n'est pas accessible
  2. Le port LDAP/LDAPS est bloqué
  3. Extension PHP LDAP manquante
  4. Pare-feu bloque la connexion

Solutions

1. Vérifier la connectivité réseau

# Ping du serveur AD
ping dc.contoso.com

# Test du port LDAPS
telnet dc.contoso.com 636

# Ou avec nmap
nmap -p 636 dc.contoso.com

2. Vérifier l'extension LDAP

php -m | grep ldap

Si aucune sortie, installez l'extension (voir section Installation).

3. Vérifier la configuration DNS

# Résolution DNS du serveur AD
nslookup dc.contoso.com

# Doit retourner une adresse IP valide

4. Vérifier les logs du serveur web

# Apache
tail -f /var/log/apache2/error.log

# Nginx
tail -f /var/log/nginx/error.log

Erreur : Can't contact LDAP server (Code: -1)

Message complet : Can't contact LDAP server (Code: -1)

Cause

Le certificat CA n'est pas reconnu par PHP/OpenLDAP.

Solutions

1. Vérifier l'emplacement du certificat

# Windows
dir C:\openldap\sysconf\cacert.pem

# Linux (Ubuntu/Debian)
ls -la /etc/ldap/cacert.pem

# Linux (RHEL/CentOS)
ls -la /etc/openldap/certs/cacert.pem

2. Vérifier le contenu de ldap.conf

# Windows
type C:\openldap\sysconf\ldap.conf

# Linux
cat /etc/ldap/ldap.conf

Le fichier doit contenir :

TLS_CACERT /chemin/vers/cacert.pem
TLS_REQCERT demand

3. Vérifier le format du certificat

Le certificat doit être au format PEM :

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKB...
(contenu base64)
-----END CERTIFICATE-----

4. Redémarrer le serveur web

# Apache (Ubuntu)
sudo systemctl restart apache2

# Apache (CentOS)
sudo systemctl restart httpd

# Windows/XAMPP
Redémarrer depuis le panneau de contrôle XAMPP

5. Test avec openssl

openssl s_client -connect dc.contoso.com:636 -CAfile /chemin/vers/cacert.pem

6. Solution temporaire (DEV uniquement)

Développement uniquement :
# ldap.conf - NE PAS UTILISER EN PRODUCTION
TLS_REQCERT never

7. Alternative : Utiliser STARTTLS sur port 389

Si LDAPS pose trop de problèmes de certificats, utilisez STARTTLS :

'ad' => [
    'server' => 'dc.contoso.com',
    'port' => 389,              // Port LDAP standard
    'use_ssl' => false,         // STARTTLS s'activera automatiquement
    // ...
],

Erreur : Server is unwilling to perform (Code: 53)

Message complet : Server is unwilling to perform (Code: 53)

Cause

Active Directory refuse le changement de mot de passe car la connexion n'est pas chiffrée.

Solutions

1. Vérifier que LDAPS est utilisé

Dans config/config.php :

'ad' => [
    'server' => 'dc.contoso.com',
    'port' => 636,              // Doit être 636 pour LDAPS
    'use_ssl' => true,          // Doit être true
    // ...
],

2. Vérifier que le certificat CA est configuré

Voir la section "Configuration des certificats SSL".

3. Tester avec ldapmodify

# Créer un fichier test.ldif
cat > test.ldif << 'EOF'
dn: CN=Test User,OU=Users,DC=contoso,DC=com
changetype: modify
replace: unicodePwd
unicodePwd::IgBOAGUAdwBQAGEAcwBzAHcAbwByAGQAMQAyADMAIQAiAA==
EOF

# Tester avec ldapmodify
ldapmodify -H ldaps://dc.contoso.com:636 \
  -D "CN=srv_pwd_reset,OU=Service Accounts,DC=contoso,DC=com" \
  -W -f test.ldif

Erreur : Constraint violation (Code: 19)

Message complet : Constraint violation (Code: 19)

Cause

Le mot de passe ne respecte pas la politique Active Directory.

Solutions

Erreur : Insufficient access rights (Code: 50)

Message complet : Insufficient access rights (Code: 50)

Cause

Le compte de service n'a pas les permissions pour réinitialiser les mots de passe.

Solutions

  1. Vérifiez que le compte de service existe et est actif dans AD
  2. Vérifiez la délégation de contrôle (voir section "Délégation de contrôle")
  3. Accordez la permission "Reset Password" sur l'OU contenant les utilisateurs
  4. Testez manuellement avec le compte de service :
    # Se connecter avec le compte de service
    runas /user:contoso\srv_pwd_reset "dsa.msc"
    
    # Essayer de réinitialiser manuellement un mot de passe

Erreur : User is not authorized to change passwords

Message complet : User is not authorized to change passwords

Cause

L'utilisateur n'est pas membre du groupe d'autorisation configuré.

Solutions

1. Vérifier l'appartenance au groupe

# PowerShell - Vérifier les groupes d'un utilisateur
Get-ADUser -Identity "jdupont" -Properties MemberOf | 
  Select-Object -ExpandProperty MemberOf

2. Ajouter l'utilisateur au groupe

# PowerShell
Add-ADGroupMember -Identity "Reset_Password_Web" -Members "jdupont"

3. Désactiver le contrôle par groupe (temporairement)

Dans config/config.php :

'security' => [
    'group_enabled' => false,  // Désactive le contrôle
    // ...
],

4. Vérifier le DN du groupe

Le DN dans la configuration doit correspondre exactement au DN dans AD :

# PowerShell - Récupérer le DN du groupe
Get-ADGroup -Identity "Reset_Password_Web" | 
  Select-Object -ExpandProperty DistinguishedName

Page de diagnostic

o2Cloud IAM inclut une page de diagnostic complète accessible à :

https://iam.o2cloud.fr/diagnostic.php

Informations fournies

Utilisation

  1. Accédez à /diagnostic.php
  2. Lisez attentivement les messages d'erreur
  3. Corrigez les problèmes signalés
  4. Rafraîchissez la page pour re-tester
Sécurité : La page de diagnostic affiche des informations sensibles. En production, protégez-la avec une authentification ou supprimez-la après validation.

Protection de la page de diagnostic

Méthode 1 : Suppression (recommandé)

# Linux
rm /var/www/o2Cloud-IAM/public/diagnostic.php

# Windows
del C:\inetpub\wwwroot\o2Cloud-IAM\public\diagnostic.php

Méthode 2 : Protection par IP (Apache)

Ajoutez dans .htaccess :

<Files "diagnostic.php">
    Order deny,allow
    Deny from all
    Allow from 192.168.1.0/24
    Allow from 127.0.0.1
</Files>

Méthode 3 : Protection par IP (Nginx)

location = /diagnostic.php {
    allow 192.168.1.0/24;
    allow 127.0.0.1;
    deny all;
    
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

FAQ - Questions fréquentes

Général

Q : Quelle est la différence entre LDAP et LDAPS ?

R : LDAP (port 389) est le protocole standard non chiffré. LDAPS (port 636) est la version chiffrée avec SSL/TLS. Pour changer les mots de passe Active Directory, vous devez utiliser LDAPS ou LDAP+STARTTLS.

Q : Puis-je utiliser o2Cloud IAM sans groupe d'autorisation ?

R : Oui, définissez 'group_enabled' => false dans la configuration. Tous les utilisateurs AD pourront alors utiliser l'application.

Q : Combien d'utilisateurs peuvent utiliser o2Cloud IAM simultanément ?

R : Il n'y a pas de limite technique. La performance dépend de votre serveur web et de votre contrôleur de domaine.

Q : o2Cloud IAM fonctionne-t-il avec Azure AD ?

R : Non, o2Cloud IAM est conçu pour Active Directory on-premise. Pour Azure AD, utilisez le portail self-service de Microsoft.

Q : Puis-je personnaliser l'interface ?

R : Oui, vous pouvez modifier les fichiers dans views/ pour personnaliser l'apparence. L'interface utilise TailwindCSS.

Installation & Configuration

Q : Dois-je installer o2Cloud IAM sur le contrôleur de domaine ?

R : Non, et ce n'est pas recommandé. Installez o2Cloud IAM sur un serveur web séparé pour des raisons de sécurité.

Q : Quel certificat SSL dois-je utiliser ?

R : Pour le serveur web (HTTPS), utilisez un certificat commercial ou Let's Encrypt. Pour LDAPS, vous devez configurer le certificat CA de votre Active Directory.

Q : Puis-je utiliser un certificat auto-signé pour LDAPS ?

R : Oui, mais vous devez l'importer dans le magasin de certificats du serveur web et configurer ldap.conf correctement.

Q : Comment changer le port du serveur web ?

R : Modifiez la configuration de votre VirtualHost Apache ou serveur Nginx pour écouter sur le port souhaité.

Sécurité & Permissions

Q : Quelles permissions AD minimales sont requises ?

R : Le compte de service doit avoir :

Q : Le compte de service peut-il être un compte d'utilisateur standard ?

R : Oui, c'est même recommandé. N'utilisez pas un compte administrateur de domaine.

Q : Comment désactiver temporairement le contrôle par groupe ?

R : Éditez config/config.php et définissez 'group_enabled' => false.

Q : Les mots de passe sont-ils stockés quelque part ?

R : Non. Les mots de passe ne sont jamais stockés. Ils sont transmis directement à Active Directory via LDAPS puis oubliés.

Dépannage

Q : L'erreur "Can't contact LDAP server" apparaît, que faire ?

R : Vérifiez :

  1. La connectivité réseau au DC (ping, telnet port 636)
  2. Que l'extension php-ldap est installée
  3. Que le certificat CA est correctement configuré
  4. Consultez la section "Dépannage LDAPS"

Q : L'erreur 53 "Server is unwilling to perform" persiste, pourquoi ?

R : Cette erreur signifie que AD refuse le changement de mot de passe car la connexion n'est pas chiffrée. Vérifiez :

Q : Les logs ne s'écrivent pas, pourquoi ?

R : Vérifiez les permissions du dossier logs/. Il doit être accessible en écriture par l'utilisateur du serveur web (www-data, apache, ou IIS_IUSRS).

Q : La page de diagnostic ne s'affiche pas

R : Vérifiez que :

Maintenance

Q : Comment mettre à jour o2Cloud IAM ?

R :

  1. Sauvegardez config/config.php et logs/
  2. Téléchargez la nouvelle version
  3. Remplacez les fichiers (sauf config/ et logs/)
  4. Exécutez composer install
  5. Testez avec /diagnostic.php

Q : Comment sauvegarder o2Cloud IAM ?

R : Sauvegardez :

Q : À quelle fréquence dois-je vérifier les logs ?

R : Selon vos besoins de sécurité :

Q : Comment archiver les logs ?

R : Utilisez logrotate (Linux) ou une tâche planifiée (Windows) pour archiver et compresser les logs automatiquement. Conservez les archives selon votre politique de rétention.

Glossaire

Terme Définition
Active Directory (AD) Service d'annuaire de Microsoft pour gérer les utilisateurs, ordinateurs et ressources dans un domaine Windows.
Base DN Distinguished Name de base définissant le point de départ des recherches LDAP (ex: DC=contoso,DC=com).
Binding Opération d'authentification auprès du serveur LDAP avant d'effectuer des requêtes.
CSRF Cross-Site Request Forgery - Attaque où un site malveillant force l'utilisateur à exécuter des actions non désirées.
Distinguished Name (DN) Nom unique identifiant un objet dans Active Directory (ex: CN=Jean Dupont,OU=Users,DC=contoso,DC=com).
FQDN Fully Qualified Domain Name - Nom de domaine complet (ex: dc01.contoso.com).
IAM Identity and Access Management - Gestion des identités et des accès.
LDAP Lightweight Directory Access Protocol - Protocole d'accès aux annuaires (port 389).
LDAPS LDAP over SSL/TLS - Version chiffrée de LDAP (port 636).
OU Organizational Unit - Unité d'organisation dans Active Directory pour structurer les objets.
STARTTLS Extension LDAP permettant de chiffrer une connexion initialement non chiffrée.
UPN User Principal Name - Identifiant de connexion au format email (ex: jdupont@contoso.com).
VirtualHost Configuration Apache/Nginx permettant d'héberger plusieurs sites sur un même serveur.

Codes d'erreur LDAP

Référence des codes d'erreur LDAP les plus courants rencontrés avec o2Cloud IAM :

Code Nom Description Solution
-1 Can't contact server Impossible de contacter le serveur LDAP Vérifiez la connectivité réseau, le port et les certificats
19 Constraint violation Violation de contrainte (politique de mot de passe) Le mot de passe ne respecte pas la politique AD
32 No such object Objet introuvable Vérifiez le DN (utilisateur ou groupe)
49 Invalid credentials Identifiants invalides Nom d'utilisateur ou mot de passe incorrect
50 Insufficient access Permissions insuffisantes Le compte de service n'a pas les droits nécessaires
53 Server unwilling to perform Le serveur refuse l'opération Connexion non chiffrée - Utilisez LDAPS
65 Object class violation Violation de classe d'objet Opération non supportée sur ce type d'objet
68 Already exists L'objet existe déjà Nom en doublon dans l'annuaire
Documentation complète : Pour la liste complète des codes d'erreur LDAP, consultez ldap.com/ldap-result-code-reference

Checklist de déploiement

Utilisez cette checklist pour valider votre déploiement en production :

Pré-installation

Active Directory

Installation

Configuration

Sécurité

Tests

Monitoring

Documentation

Prêt pour la production ! Si tous les éléments sont cochés, votre déploiement est complet et sécurisé.

Support & Contact

Support technique

Contactez-nous pour toute question technique ou problème rencontré.

admin@o2cloud.fr

Réponse sous 24-48h ouvrées

Documentation

Documentation complète en ligne et fichier README.md inclus.

Consulter la documentation

Mise à jour régulière

Installation pro

Installation clé en main par nos techniciens en connexion à distance.

Demander un devis

120€ TTC - Installation complète

Informations utiles

Offre spéciale Janvier 2026 : Licence à vie à 149€ TTC au lieu de 299€ TTC (-50%). Offre valable jusqu'au 31 janvier 2026.

o2Cloud IAM - Identity & Access Management pour Active Directory

© 2026 o2Cloud - Tous droits réservés - Made with in France

Accueil Contact o2Cloud.fr