rss logo

Générer des certificats SSL pour des serveurs web Linux dans un environnement AD CS

Dans cet article, je vais montrer comment générer des certificats SSL pour un serveur web GNU/Linux depuis un environnement AD CS. L'objectif est de disposer de serveurs web accessibles sur le réseau de l'entreprise, sécurisés par SSL, mais sans avoir de message d'avertissement que l'on peut avoir avec des certificats auto-signés.

Pour la partie serveur http j'utiliserai une machine Debian avec le service Apache, mais cela peut être reproduit sur n'importe quelle distribution et avec n'importe quel serveur web.

Message d'avertissement de Firefox concernant un risque potentiel de sécurité lors de l'accès à un serveur web
Le message d'avertissement qui apparaît avec l'utilisation de certificats auto-signés.

Génération d'une demande de signature de certificat (CSR)

Logo de Debian
  • Depuis le serveur debian, créez un fichier openssl-san.cnf. Ici, un exemple avec un serveur web nommé webserver.std.local et qui possède l'adresse IP suivante : 192.168.1.200. Notez les différents noms alternatifs (alt_names), correspondant aux différentes URL que les utilisateurs pourront utiliser pour accéder au site web :
[ req ] default_bits = 4096 prompt = no default_md = sha512 distinguished_name = dn req_extensions = req_ext [ dn ] CN = webserver.std.local [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = webserver.std.local DNS.2 = webserver DNS.3 = www.webserver DNS.4 = www.webserver.std.local IP.1 = 192.168.1.200
  • Ensuite, utilisez la commande openssl pour générer une clé privée et une demande de signature de certificat (fichier csr) que l'on enverra à l'ADCS :
user@webserver:~$ openssl req -new -nodes -keyout webserver.std.local.key -out webserver.std.local.csr -config openssl-san.cnf
  • Copiez le fichier csr dans /tmp/ pour le récupérer plus tard depuis le serveur AD CS :
user@webserver:~$ cp webserver.std.local.csr /tmp/

Demande de certificat auprès de Windows AD CS

Logo Microsoft
  • Depuis le serveur AD CS, ouvrez la console Paramètres des modèles de certificats, et assurez-vous de disposer du modèle Serveur Web :
Modèles de certificats Windows ADCS montrant le modèle de serveur web sélectionné pour l'authentification du serveur
  • Si ce n'est pas le cas, faites un clic droit sur Modèles de certificats et cliquez sur Attribuer un modèle de certificat :
Interface Windows ADCS montrant comment attribuer un nouveau modèle de certificat depuis le menu Modèles de certificats
  • Sélectionnez le modèle Serveur Web, puis cliquez sur OK :
Dialogue d'activation des modèles de certificats dans Windows ADCS avec le modèle Serveur Web sélectionné pour l'authentification du serveur
  • Maintenant, faites un clic droit sur Modèles de certificats, puis cliquez sur Gérer :
Interface Windows ADCS montrant comment accéder à l'option de gestion dans le menu Modèles de certificats
  • Dans la console Modèles de certificats, faites un clic droit sur Serveur Web, et notez le nom du modèle, qui sera utilisé plus tard avec la commande certreq :
Console des modèles de certificats dans Windows ADCS montrant les propriétés du modèle Serveur Web, y compris le nom du modèle et les paramètres de période de validité
  • Copiez le fichier de demande de signature de certificat précédemment généré depuis le serveur web, par exemple ici avec une commande PowerShell :
PS > scp user@192.168.1.200:/tmp/webserver.std.local.csr .
  • Depuis une console PowerShell, demandez un certificat à l'autorité de certification AD CS :
PS > certreq -submit -attrib "CertificateTemplate:webserver" .\webserver.std.local.csr webserver.std.local.cer
  • Une fenêtre Liste des autorités de certification devrait apparaître, cliquez sur OK :
Fenêtre Liste des autorités de certification dans Windows ADCS montrant les autorités de certification disponibles
  • Si tout se passe bien, le message Issued devrait apparaître, indiquant que le certificat a été émis dans le répertoire actuel :
Sortie de commande PowerShell montrant la soumission de la demande de certificat et la confirmation de l'émission pour le certificat du serveur web
  • Copiez le certificat cer vers le serveur web Linux, par exemple ici avec une commande PowerShell qui le copie dans le répertoire /tmp du serveur web :
PS > scp webserver.std.local.cer user@192.168.1.200:/tmp/

Installation du certificat émis sur un serveur web Apache

  • Connectez-vous à votre serveur web Linux et copiez les certificats SSL dans les dossiers suivants (notez que le fichier cer a été renommé en pem) :
root@webserver:~# cp /tmp/webserver.std.local.cer /etc/ssl/certs/webserver.std.local.pem root@webserver:~# cp /home/user/webserver.std.local.key /etc/ssl/private/webserver.std.local.key
  • Modifiez le fichier de configuration de votre site https apache2, par exemple ici avec le fichier /etc/apache2/sites-enabled/default-ssl.conf :
# A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile /etc/ssl/certs/webserver.std.local.pem SSLCertificateKeyFile /etc/ssl/private/webserver.std.local.key
  • Rechargez le service apache2 :
root@webserver:~# systemctl reload apache2.service
  • Depuis une machine du domaine, ouvrez un navigateur web et connectez-vous à l'URL du serveur web (par exemple https://webserver). Vous ne devriez plus voir l'avertissement. Depuis le navigateur, vous pouvez vérifier les propriétés du certificat :
Message de sécurité de connexion Firefox montrant une connexion sécurisée au serveur web avec un certificat émis par std-ADCS-CA Détails du certificat pour webserver.std.local émis par std-ADCS-CA, montrant la période de validité et les noms alternatifs du sujet
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address