Générer des certificats SSL pour des serveurs web Linux dans un environnement AD CS
- Mise à jour le 02 nov. 2024
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.

Génération d'une demande de signature de certificat (CSR)
- 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 (fichiercsr
) 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
- 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 :

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

- Sélectionnez le modèle Serveur Web, puis cliquez sur OK :

- Maintenant, faites un clic droit sur Modèles de certificats, puis cliquez sur Gérer :

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

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

- Si tout se passe bien, le message Issued devrait apparaître, indiquant que le certificat a été émis dans le répertoire actuel :

- 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é enpem
) :
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 :

