====== Gérer des certificats pour serveurs Debian avec la CA de Microsoft ======
* Le sous-composant **Service Web Inscription de certificats** du rôle **Service de certificats Active Directory** doit avoir été installé.
Le **Service Web Inscription de certificats (CES)** permet à des machines et utilisateurs d’obtenir ou renouveler des certificats via HTTPS, même s’ils ne sont pas connectés au domaine (ex : ordinateurs en DMZ, machines distantes, BYOD…).
===== Création d'un compte dédié appelé svc_ces dans le domaine =====
* créer le compte **svc\_ces**
* le mettre membre du groupe local **IIS_IUSRS** du serveur CES
* Lui donner les droits sur la CA dans certsrv.msc → Propriétés → Sécurité :
* ajouter le compte **svc\_ces**
* lui donner les droits :
* Lire
* Demander des certificats
{{ :reseau:certificat:camicrosoft:ca_04.png |}}
Le configurer comme Identité du pool d’applications CES dans IIS.
* Redémarrer IIS en ligne de commande en tant qu'administrateur
iisreset
===== Configuration du service Web d'inscription des certificats =====
* Installation en **Renouvellement seul** :
* => les clients peuvent demander uniquement de renouveler des certificats existants.
{{ :reseau:cloud:ca_01.png |}}
* Authentification est **Authentification du certificat client** :
{{ :reseau:cloud:ca_02.png |}}
{{ :reseau:certificat:camicrosoft:ca_03.png |}}
{{ :reseau:certificat:camicrosoft:ca_05.png |}}
{{ :reseau:certificat:camicrosoft:ca_06.png |}}
{{ :reseau:certificat:camicrosoft:ca_07.png |}}
{{ :reseau:certificat:camicrosoft:ca_08.png |}}
Principes de fonctionnement quand CES est configuré en renouvellement seulement :
* Le client envoie une requête de renouvellement (CSR)
* Il signe la requête avec la clé privée de son ancien certificat
* Le serveur CES valide que :
* le certificat à renouveler est légitime
* la signature correspond à la clé privée
* la CA accepte les renouvellements
La CA délivre un nouveau certificat basé sur l’ancien.
Aucune demande de **nouveau certificat** n'est acceptée.
Cela permet :
* d'**exposer** CES via Internet,
* de permettre uniquement la **continuité**, pas de nouvelles inscriptions
* pour des appareils **non joints au domaine** mais **déjà équipés d’un certificat initial**
* en réduisant l’exposition du service d’inscription
===== Disposer des autorisation d'enrollement sur les modèles de certificat =====
* lancer la console des modèles de certificats certtmpl.msc,
* cliquez-droit sur le modèle voulu et accédez à ses propriétés puis l'onglet Sécurité :
* donner l'autorisation **Inscrire**
===== Configurer un serveur Debian =====
==== Obtenir un certificat initial (bootstrap) ====
* Lien https://www.it-connect.fr/ad-cs-comment-delivrer-un-certificat-tls-pour-un-serveur-web-linux/
=== Générer une clé privée et un CSR ===
Pour les services comme Apache, Nginx, HAProxy ou Postfix, les clé privées sont enregistrées dasn le dossier **/etc/ssl/private/** :
* répertoire défini pour contenir les clés privées sensibles
* avec les permissions suivantes : drwx--x--x root:root /etc/ssl/private
* En CLI
openssl genrsa -out /etc/ssl/private/server.key 2048
chmod 600 /etc/ssl/private/server.key
chown root:root /etc/ssl/private/server.key
=== Gestion de la clé pour HAProxy ===
HAProxy préfère un fichier unique PEM contenant (dans l'ordre) :
* la clé privée,
* le certificat du serveur,
* la chaîne intermédiaire
Ce fichier PEM unique est placé dasn le dossier **/etc/haproxy/certs/**
Contenu du fichier PEM :
-----BEGIN PRIVATE KEY-----
(key)
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(cert)
-----END CERTIFICATE-----
(intermediate chain)
* Droits :
chmod 600 /etc/haproxy/certs/nomsite.pem
chown root:root /etc/haproxy/certs/nomsite.pem
=== Gestion de la clé pour Apache2 ===
Dossiers de la clé et du certificat
* clé privée : /etc/ssl/private/nomsite.key
* certificat : /etc/ssl/certs/nomsite.crt
Configuration du fichier pioru le site Web **/etc/apache2/sites-enabled/site.conf** :
SSLCertificateFile /etc/ssl/certs/nomsite.crt
SSLCertificateKeyFile /etc/ssl/private/nomsite.key
=== Gestion du certificat pour Tomcat9 ===
* créer le dossier **/etc/tomcat9/ssl**
* créer le fichier keystore unique contenant :
* la clé privée,
* le certificat signé,
* la chaîne intermédiaire ADCS
* Création du keystore PKCS12 depuis les fichiers PEM :
openssl pkcs12 -export \
-inkey server.key \
-in cert.pem \
-certfile chain.pem \
-out /etc/tomcat9/ssl/tomcat.p12
* Protection du certificat:
chmod 600 /etc/tomcat9/ssl/tomcat.p12
chown tomcat:tomcat /etc/tomcat9/ssl/tomcat.p12
* Configuration Tomcat dans **/etc/tomcat9/server.xml**, dans le bloc :
* relancer le service Tomcat9
code>
systemctl restart tomcat9
=== Génération du fichier de demande de signature pour le certificat ===
Crée un fichier san.cnf pour ajouter un SAN (recommandé) pur un serveur exemple appelé guac.lab.local avec ce contenu :
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
CN = guac.lab.local
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = guac.lab.local
DNS.2 = guac
* générer le CSR
openssl req -new -key guac.lab.local.key \
-out guac.lab.local.csr \
-config san.cnf
* vérifiez le csr
openssl req -text -noout -verify -in guac.lab.local.csr
Certificate request self-signature verify OK
Certificate Request:
Data:
Version: 1 (0x0)
Subject: CN=guac.lab.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:b8:7f:55:b1:ca:09:23:12:fc:1b:d4:97:7a:76:
8e:50:37:24:ce:4a:e7:c8:3e:75:82:7b:78:9b:8b:
94:bb:6d:7e:31:6f:9c:25:77:4d:ab:55:c7:06:31:
09:dc:43:80:32:7f:5d:89:22:15:4c:ea:ea:ba:81:
79:6b:f0:16:53:3c:b1:38:db:04:33:bb:d2:04:24:
db:8f:d9:a6:a7:45:04:ea:ac:3d:eb:19:91:bb:ed:
d0:7b:8c:ba:6b:9b:a1:17:a2:cc:15:1b:c4:dc:fd:
b9:e7:dd:5c:47:d0:d9:53:93:70:4c:c8:1a:41:32:
84:e2:c5:63:3d:d2:93:96:81:0c:bf:d9:25:59:bd:
de:eb:99:56:e4:2d:06:ce:cb:33:92:98:a4:41:18:
5a:de:5d:8d:2a:b4:5b:c7:d2:d3:f1:e9:30:4c:ba:
93:fc:44:d5:f6:cf:7d:49:69:b7:b5:66:7d:99:4f:
1c:0a:cb:43:30:71:70:96:53:75:bc:18:43:ff:c8:
e6:94:00:2b:ad:d9:e5:a6:5b:cc:5a:c6:6b:1e:15:
69:35:a4:3c:30:80:e8:a7:c0:de:23:79:96:d5:ab:
0c:2d:48:ad:28:63:66:6c:dc:79:5f:e8:3d:b4:4e:
ab:6d:58:04:66:44:11:36:77:73:0a:50:7b:ed:59:
ad:01
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:guac.lab.local, DNS:guac
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
58:57:5e:29:66:bf:38:7d:b0:0f:c2:d5:cd:37:b9:51:ab:10:
7f:4c:ac:f1:15:1f:82:8b:d1:ca:e3:8f:da:03:a2:24:1c:ac:
78:f6:81:4c:8c:ac:0c:37:02:fe:ec:1f:f2:d0:51:d6:a3:f5:
da:01:d4:aa:c3:27:d9:d3:f1:5b:99:00:14:b3:e0:32:a4:a1:
2f:4c:2d:52:84:bc:da:fc:fd:c7:7c:ae:da:9c:b2:e3:78:24:
74:62:3d:50:af:7a:de:b5:92:91:c9:fe:f1:90:5c:8c:11:a1:
a7:ba:5b:ed:4f:59:05:7a:06:11:69:ca:d8:e4:1f:4e:ee:4b:
63:81:47:58:10:e1:0a:cf:cb:b9:0c:76:f5:2c:d1:05:a0:b2:
be:a5:da:dc:bc:9c:5e:9a:06:5b:0c:d8:13:a9:4a:fd:c3:c1:
c0:ff:8b:0e:33:2b:b8:0d:c8:73:f4:d3:3b:22:e6:4e:80:e3:
c5:f3:76:5b:a4:89:1c:f1:9b:6f:a9:88:ec:f7:f6:4e:58:2d:
42:6d:c6:06:b9:58:fa:98:db:17:9a:5c:ce:64:3a:fc:e5:be:
4f:08:58:ac:fe:3a:26:f1:ef:1d:09:9a:46:8c:2f:31:1b:68:
e5:96:08:ea:63:35:63:8c:6f:fb:4a:5d:28:2a:00:a5:c6:b8:
f8:b5:c4:ec
* => obtenir un fichier .cer.
* récupérer le certificat de l'autorité racine (Root CA), depuis Windows.
certutil -ca.cert rootCA.cer
* Copier le certificat .cer du serveur + celui de la CA dans le dossier conteneur LXC
=== Dans le conteneur LXC Convertir le certificat Microsoft en PEM ===
* convertir les fichiers .cer en .crt
openssl x509 -in guac.lab.local.cer -out guac.lab.local.crt
openssl x509 -in rootCA.cer -out rootCA.crt
=== Construire le fichier .pem pour HAProxy ===
HAProxy doit avoir un seul fichier .pem contenant :
* la clé privée du serveur
* le certificat serveur
* la chaîne CA (intermédiaires + racine)
cat guac.lab.local.key guac.lab.local.crt rootCA.crt > /etc/haproxy/certs/guac.lab.local.pem
* Donner des permissions sécurisées :
chmod 600 /etc/haproxy/certs/guac.lab.local.pem
=== Recharger HAProxy ===
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl reload haproxy
* Naviguer ensuite vers le site https://guac.lab.local