Activation LDAPS sur Active Directory

Contexte

Lors des interactions en LDAP avec Active Directory, certaines actions nécessitent l’utilisation de LDAPS (LDAP sur SSL) entre le client et Active Directory.

Ceci est notamment le cas si l’on veut modifier le mot de passe.

Ce document décrit comment activer le LDAPS sur un environnement Active Directory.

Méthodes envisageables

A priori il y a deux méthodes possibles pour activer LDAPS sur un contrôleur de domaine :

  • Installer un Certificat Racine sur le contrôleur de domaine
  • Utiliser un certificat tiers sur le contrôleur de domaine.

C’est la seconde méthode que nous allons détailler ici.

Procédure

Les étapes de mise en place sont les suivantes :

  • Demande de certificat
  • Signature de la demande de certificat
  • Import du certificat sur le serveur

Certificat

Contraintes sur le certificat Le certificat qui sera généré doit respecter certaines contraintes :

  • Il doit être validé pour l’authentification de server, c’est à dire contenir l’OID d’authentification du serveur (1.3.6.1.5.5.7.3.1)
  • Le CN doit correspondre au FQDN du serveur. Par exemple, si mon serveur s’appelle pdc1.mondomaine.com, on aura CN=pdc1.mondomaine.com

Demande de certificat

La demande de certificat peut se faire dans une fenêtre de commande sous Windows, avec la commande suivante :

certreq -new request.inf request.req

On aura auparavant créé le fichier request.inf contenant les informations suivantes :

;----------------- request.inf ----------------- 

[Version] 
Signature="$Windows NT$”

[NewRequest]
Subject = "CN=pdc1.mondomaine.com,O=IT,C=FR" ; replace with the FQDN of the DC 
KeySpec = 1 
KeyLength = 2048 
; Can be 1024, 2048, 4096, 8192, or 16384. 
; Larger key sizes are more secure, but have a greater impact on performance. 
Exportable = TRUE 
MachineKeySet = TRUE 
SMIME = False 
PrivateKeyArchive = FALSE 
UserProtected = FALSE 
UseExistingKeySet = FALSE 
ProviderName = "Microsoft RSA SChannel Cryptographic Provider" 
ProviderType = 12
RequestType = PKCS10 
KeyUsage = 0xa0 

[EnhancedKeyUsageExtension] 
OID=1.3.6.1.5.5.7.3.1 ; this is for Server Authentication 

;-----------------------------------------------

Note : les éléments du Subject doivent correspondre à ceux du certificat racine issu de la PKI.

Signature de la demande de certificat

La génération du certificat peut se faire via une commande OpenSSL, à partir du fichier request.req généré à l’étape précédente.
Le certificat racine aura été généré auparavant, dans le répertoire /srv/pki/certs. L'arborescence de ce répertoire est la suivante :

cd /srv/pki
ls -R
.:
certs  index.txt  index.txt.attr newcerts  private  reqs  serial

./certs:
ca.crt

./newcerts:

./private:
ca.key

./reqs:
request.req

On va générér le certificat à partir de la requête :

openssl ca -config /srv/pki/openssl.cnf -name CA_default -extensions CA_AD_SERVER -infiles /srv/pki/ca/reqs/request.req

Le fichier openssl.cnf contient les lignes suivantes :

[ ca ]
default_ca      = CA_default

[ CA_default ]
dir             = .
certs           = $dir/ca/certs
new_certs_dir   = $dir/ca/newcerts
database        = $dir/ca/index.txt
certificate     = $dir/ca/certs/ca.crt
serial          = $dir/ca/serial
private_key     = $dir/ca/private/ca.key
default_days    = 3650
default_md      = sha256
preserve        = no
policy          = policy_match

# For the CA policy
[ policy_match ]
countryName		= match
stateOrProvinceName	= optional
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

[ CA_AD_SERVER ]
nsComment                       = "Certificat Serveur AD"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = client, server
extendedKeyUsage                = serverAuth, clientAuth

Il faut ensuite extraire les informations « brutes », situées entre -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----.

On va ensuite créer la “chaîne” de certificats, en concaténant le certificat racine :

cd /srv/pki/ca/certs
cat dwdc1.crt ca.crt > dwdc1-chain.crt

Intégration du certificat

Les certificats dwdc1-chain.crt et le certificat racine sont ensuite copiés sur le serveur Windows.

Le certificat racine doit être intégré (en utilisant la console mmc) dans les autorités de certification racines de confiance.

Image

Le certificat chaîne peut ensuite être intégré via la commande :

certreq -accept dwdc1-chain.crt I

On peut vérifier la bonne intégration, dans les certificats personnels.

Image

Il faut alors redémarrer le serveur sur lequel on vient d’installer le certificat.

Vérification

On peut vérifier en lançant ldp.exe, et en tentant une connexion sur le contrôleur de domaine, port 636.

Références

Ce document est basé sur les éléments suivants :

http://www.it-sudparis.eu/s2ia/user/procacci/Doc/ldaps-ad/ldaps-ad.html

https://support.microsoft.com/en-us/help/321051/how-to-enable-ldap-over…

https://www.petri.com/enable-secure-ldap-windows-server-2008-2012-dc

https://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-o…

Annexes

Pour plus de détails sur la partie SSL, on pourra se reporter à https://www.vincentliefooghe.net/content/mémento-openssl

Génération du Certificat Racine

On génère d’abord la clé privée :

openssl genrsa -des3 -out /srv/pki/ca/certs/ca.key 2048

Puis le certificat racine :

cd /srv/pki
openssl req -new -x509 -days 3650 -key private/ca.key -sha256 -extensions v3_ca -out certs/ca.crt

Ajout du certificat dans OpenIDM

Si on veut activer les échanges sécurisés via SSL, il faut importer les certificats des serveurs distants dans le keystore OpenIDM.

On peut récupérer le nom du truststore dans le fichier de configuration (conf/boot/boot.properties). Par défaut, il s’agit de OPENIDM_HOME/security/truststore.

cd /products/openidm/security
keytool -import -alias ADLDAPS -file /tmp/ca/certs/dwdc1.crt -keystore truststore

Il faut ensuite arrêter / relancer openidm

Bien entendu, dans la déclaration du provisioner.openicf.json on va activer le ssl :

    "configurationProperties" : {
        "host" : "&{AD.HostName}",
        "port" : "&{AD.LdapServerPortSSL}",
        "ssl" : true,
        "principal" : "&{AD.DirectoryAdminName}",
        "credentials" : {
            "$crypto" : {

 

Catégorie