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 svcces

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 svcces

lui donner les droits :

Lire

Demander des certificats

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.

Authentification est Authentification du certificat client :

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

<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443"*
maxThreads="200"
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile="/etc/tomcat9/ssl/tomcat.p12"
keystoreType="PKCS12"
keystorePass="LE_MOT_DE_PASSE_DU_P12"
clientAuth="false"
sslProtocol="TLS" />

relancer le service Tomcat9

code> systemctl restart tomcat9 </code>

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