
I. Présentation
Vous avez une autorité de certification d’entreprise AD CS et vous souhaitez délivrer un certificat à un serveur Web sous Linux ? Alors, vous êtes au bon endroit ! Ce tutoriel couvre ce cas de figure particulièrement fréquent en environnement professionnel.
Nous partons du principe que le serveur Web est déjà installé, tout comme l’autorité de certification AD CS. Pour ma part, le serveur Web Apache2 tourne sous Debian, alors que l’autorité de certification a été mise en place sur Windows Server 2025. Ceci fonctionne de façon identique avec une autre version de Windows Server, ou un autre serveur Web (à condition d’utiliser les bonnes directives pour déclarer le certificat).
L’objectif sera de délivrer un certificat TLS valide pour les connexions HTTPS vers ce site web : https://web-1.it-connect.local. Actuellement, le certificat n’est pas reconnu, car il s’agit d’un certificat auto-signé.
Si vous avez besoin d’aide pour mettre en place les différents éléments, consultez ces articles :
II. Première étape : clé privée et CSR
La première étape se déroule sur le serveur Linux où nous devons générer une clé privée et un fichier de demande de certificat (CSR – Certificate Signing Request) à l’aide de l’outil OpenSSL. Nous allons devoir définir le CommonName du certificat (CN), à savoir web-1.it-connect.local, mais aussi ce que l’on appelle les SAN.
Les SAN (Subject Alternative Names) sont des extensions d’un certificat SSL/TLS qui permettent d’y inclure plusieurs noms de domaine (ou IP) pour qu’un même certificat soit valide pour tous ces noms. Il est préférable de spécifier un SAN, même s’il n’y a qu’un seul nom, pour que le certificat soit reconnu par les navigateurs. Dans notre cas, nous allons préciser : web-1.it-connect.local et web-1.
Remarque : grâce à cette méthode, le certificat sera reconnu si l’on se connecte sur https://web-1.it-connect.local ou tout simplement sur https://web-1.
La commande suivante génère une clé privée de 256 bits à l’aide d’une courbe elliptique (ECC), spécifiquement la courbe nommée prime256v1. Il est préférable d’utiliser cette méthode en comparaison du RSA.
openssl ecparam -genkey -name prime256v1 -out web-1.it-connect.local.key
Ensuite, nous allons créer un fichier de configuration pour déclarer certaines propriétés de notre certificat, en particulier les SAN via l’extension subjectAltName. Créez le fichier web-1-san.cnf :
nano web-1-san.cnf
On y définit les informations d’identité du certificat (dans la section[ dn ]), ainsi que les extensions, notamment les SAN dans la section [ req_ext ]. Cela permet de préciser les noms de domaine ou alias supplémentaires pour lesquels le certificat sera valide. Vous pouvez donc spécifier plusieurs noms DNS si nécessaire (avec ou sans www, par exemple).
[ req ]
prompt = no
distinguished_name = dn
req_extensions = req_ext
[ dn ]
CN = web-1.it-connect.local
O = IT-Connect
L = Caen
C = FR
[ req_ext ]
subjectAltName = DNS: web-1.it-connect.local, DNS: web-1
Une fois que le fichier de configuration a été généré, vous pouvez obtenir le CSR à partir de ce fichier de configuration et de la clé privée. Ce qui donne la commande suivante :
openssl req -new -key web-1.it-connect.local.key -nodes -out web-1.it-connect.local.csr -config web-1-san.cnf
Avant d’aller plus loin, consultez les informations contenues dans le CSR pour les vérifier :
openssl req -text -noout -verify -in web-1.it-connect.local.csr
Nous pouvons voir le CN ainsi que les SAN. C’est tout bon.
III. Deuxième étape : obtenir le certificat TLS depuis AD CS
La suite des opérations va être effectuée à partir du serveur AD CS (ou d’un serveur disposant des outils d’administration nécessaires). Vous devez disposer d’un modèle de certificat adapté pour “Serveur Web” avec le rôle “Authentification du serveur” pour délivrer le certificat TLS.
Dans la console AD CS (certsrv), vous pouvez dupliquer le modèle natif “Serveur Web”, via la section “Modèles de certificats” puis “Gérer”. Vous devez ensuite l’ajouter à la liste des modèles publiés. Si besoin, référez-vous à notre cours dédié à AD CS pour obtenir de l’aide à ce sujet.
Voici un aperçu de certaines propriétés de ce modèle dont le nom est IT-Connect-ServeurWebLinux-v1.
Nous allons maintenant télécharger le fichier CSR depuis le serveur Web, via la commande scp (qui s’appuie sur une connexion SSH). 10.10.10.11 étant l’adresse IP du serveur Web.
scp [email protected]:/home/flo/web-1.it-connect.local.csr C:\TEMP
Ensuite, via l’outil certreq vous pouvez demander un certificat en ciblant le modèle IT-Connect-ServeurWebLinux-v1 (adaptez avec votre nom) et en spécifiant le fichier CSR.
certreq -submit -attrib “CertificateTemplate:IT-Connect-ServeurWebLinux-v1” .\web-1.it-connect.local.csr web-1.it-connect.local.cer
Une fenêtre apparaît. Choisissez votre autorité de certification et validez. Un fichier de sortie nommé web-1.it-connect.local.cer et représentant le certificat sera obtenu.
Vous devez maintenant copier le fichier CER vers le serveur Web, toujours via la commande scp. Ce qui donne :
scp .\web-1.it-connect.local.cer [email protected]:/home/flo
IV. Troisième étape : intégrer le certificat sur le serveur Web
Désormais, il reste une étape essentielle : intégrer le certificat sur le serveur Web Apache2. Nous allons copier le certificat et la clé privée dans les répertoires adéquats. Ainsi, nous exécutons ces deux commandes (attention, la destination diffère).
cp /home/flo/web-1.it-connect.local.cer /etc/ssl/certs/
cp /home/flo/web-1.it-connect.local.key /etc/ssl/private/
Il reste à configurer le VirtualHost d’Apache2 pour déclarer les certificats. Ici, nous utilisons le site SSL par défaut, mais la procédure est identique pour un autre VirtualHost. Editez le fichier de configuration de votre VirtualHost :
nano /etc/apache2/sites-enabled/default-ssl.conf
Veillez à déclarer le nom de domaine via la directive ServerName (et éventuellement un nom alternatif via ServerAlias).
ServerName web-1.it-connect.local
Puis, précisez les noms des fichiers correspondants au certificat et à la clé privée :
SSLEngine on
SSLCertificateFile /etc/ssl/certs/web-1.it-connect.local.cer
SSLCertificateKeyFile /etc/ssl/private/web-1.it-connect.local.key
Enregistrez le fichier, activez le site et redémarrez Apache2 (restart ou reload).
a2ensite default-ssl.conf
systemctl restart apache2
Si vous avez une erreur, vérifiez si le module ssl est actif :
a2enmod ssl
systemctl restart apache2
Place aux tests !
V. Vérifier la prise en charge du certificat
Il ne reste plus qu’à vérifier la configuration. Rien de plus simple, ouvrez un navigateur et tentez d’accéder à votre site web. Cette fois-ci, la connexion doit être sécurisée.
Dans les détails du certificat, vous devez constater la présence de vos SAN dans la section “Autre nom de l’objet du certificat”.
L’opération est un succès !
VI. Conclusion
Grâce à la procédure décrite dans ce tutoriel, vous devriez être en mesure d’obtenir un certificat TLS (SSL) à partir d’une autorité de certification AD CS, pour un serveur Web Linux. Si vous n’utilisez pas AD CS, vous pouvez tout de même vous inspirer de ce tutoriel pour générer la clé privée et le CSR (avec les SAN).
Ingénieur système et réseau, cofondateur d’IT-Connect et Microsoft MVP “Cloud and Datacenter Management”. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.