Table des matières

Gérer des certificats pour serveurs Debian avec la CA de Microsoft

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

Le configurer comme Identité du pool d’applications CES dans IIS.

iisreset

Configuration du service Web d'inscription des certificats

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

Configurer un serveur Debian

Obtenir un certificat initial (bootstrap)

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

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

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

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

openssl pkcs12 -export \
   -inkey server.key \
   -in cert.pem \
   -certfile chain.pem \
   -out /etc/tomcat9/ssl/tomcat.p12
chmod 600 /etc/tomcat9/ssl/tomcat.p12
chown tomcat:tomcat /etc/tomcat9/ssl/tomcat.p12
<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" />

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
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
certutil -ca.cert rootCA.cer

Dans le conteneur LXC Convertir le certificat Microsoft en PEM

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 :

cat guac.lab.local.key guac.lab.local.crt rootCA.crt > /etc/haproxy/certs/guac.lab.local.pem
chmod 600 /etc/haproxy/certs/guac.lab.local.pem

Recharger HAProxy

haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl reload haproxy