Auteur : Daniel Caron
Dernière mise à jour : Mars 2026
Les certificats internes CaronTech sont émis par la CA intermédiaire sur whvd9999 et gérés via le script PowerShell sign-cert.ps1 depuis la station admin Windows.
| Type | Outil | Usage |
|---|---|---|
| PKI interne | sign-cert.ps1 |
Serveurs internes, proxies internes |
| Let's Encrypt | Certbot (sur whvu1010) | Services exposés publiquement |
Règle générale :
whvu1010→ certificats Let's Encrypt (Certbot)whvu1515→ certificats PKI interne (sign-cert.ps1)unifi→ déploiement manuel depuis la station admin
sign-cert.ps1 : C:\Users\danie\sign-cert.ps1C:\Users\danie\.ssh\id_ed25519_vmadmin (accès VMs)C:\Users\danie\.ssh\id_ed25519_proxmox (accès phhv01)whvd9999.home.carontech.netC:\pki-temp\logs\| Serveur | Mode | Déploiement | SANs | Notes |
|---|---|---|---|---|
phhv01 |
-server |
/etc/pki/certs + /etc/pve/local |
phhv01.home.carontech.net, proxmox.home.carontech.net |
Copie secondaire Proxmox |
whvu1515 |
-server |
/etc/pki/certs |
whvu1515.home.carontech.net, wiki.carontech.net, photos.carontech.net |
Proxy interne |
whvu2020 |
-server |
/etc/pki/certs |
whvu2020.home.carontech.net, immich.home.carontech.net |
Serveur Immich |
unifi |
-server |
Manuel | à définir | Clé reste sur station admin |
| Service | Mode | Serveur cible | SANs | Notes |
|---|---|---|---|---|
immich |
-service |
whvu1515 |
immich.home.carontech.net |
Configuré, non utilisé |
Pour émettre ou renouveler le certificat d'un serveur :
.\sign-cert.ps1 -server <hostname> -verbose
Exemples :
.\sign-cert.ps1 -server whvu1515 -verbose
.\sign-cert.ps1 -server phhv01 -verbose
Pour émettre ou renouveler le certificat d'un service logique :
.\sign-cert.ps1 -service <service> -verbose
Exemple :
.\sign-cert.ps1 -service immich -verbose
Toujours tester avant d'exécuter pour vrai :
.\sign-cert.ps1 -server <hostname> -dryrun -verbose
Par défaut 398 jours. Pour spécifier une durée différente :
.\sign-cert.ps1 -server <hostname> -days 180 -verbose
Station admin Windows
│
├─► Génère CNF (SANs) localement
├─► Transfère CNF → serveur cible
├─► Génère clé privée + CSR sur serveur cible (clé ne quitte jamais la cible)
├─► Récupère CSR → station admin
├─► Transfère CSR → CA intermédiaire (whvd9999)
├─► Vérifie index.txt (doublon / renouvellement prématuré)
├─► Signature openssl ca sur whvd9999
├─► Assemble fullchain (cert + intermediate-ca)
├─► Récupère fullchain → station admin
├─► Déploie fullchain → serveur cible (/etc/pki/certs/)
├─► Copie secondaire si configurée (ex: phhv01 → /etc/pve/local)
├─► Restart service (nginx, pveproxy, etc.)
├─► Validation SANs + expiry sur serveur cible
└─► Nettoyage fichiers temporaires
⚠️ Important : Avant de faire Ctrl+C, essayer d'appuyer sur Entrée. Le script peut sembler bloqué à certaines étapes alors qu'il attend simplement une confirmation silencieuse. Ctrl+C en plein milieu de la signature peut laisser des fichiers temporaires sur la CA.
Étapes où le script peut sembler bloqué :
Vérifier que la signature n'a pas été partiellement complétée sur la CA :
ssh [email protected]
ls /opt/pki/intermediate-ca/certs/
grep <hostname> /opt/pki/intermediate-ca/index.txt
Si le certificat n'apparaît pas dans index.txt, la CA est propre — relancer le script normalement.
Si le script retourne des erreurs de parsing (accolade manquante, token inattendu) :
$content = [System.IO.File]::ReadAllText("C:\Users\danie\sign-cert.ps1")
$utf8Bom = New-Object System.Text.UTF8Encoding $true
[System.IO.File]::WriteAllText("C:\Users\danie\sign-cert.ps1", $content, $utf8Bom)
Modifier sign-cert.ps1 — trois sections à mettre à jour :
# 1. Chemin de déploiement
$deployPaths["<hostname>"] = "/etc/pki/certs"
# 2. Service à redémarrer
$serviceRestart["<hostname>"] = "nginx"
# 3. SANs du certificat
$serverSANs["<hostname>"] = @(
"<hostname>.home.carontech.net",
"<service>.carontech.net"
)
Tester avec -dryrun avant d'exécuter.
Modifier $serverSANs dans sign-cert.ps1 :
"whvu1515" = @(
"whvu1515.home.carontech.net",
"wiki.carontech.net",
"photos.carontech.net",
"nouveau-service.carontech.net" # ajouter ici
)
Puis régénérer le certificat :
.\sign-cert.ps1 -server whvu1515 -verbose
Le script archive automatiquement l'ancien certificat et déploie le nouveau.
Pour Unifi, le script génère le certificat et le laisse en local sur la station admin (C:\pki-temp\crt\). Le déploiement se fait manuellement via l'interface web Unifi.