Création d’un certificat dans une autorité de certification autonome Windows server #
📌 Contexte #
- Objectif : Créer un certificat et l’approuver via une autorité de certification autonome Windows server (sans AD) avec un script Powershell pour effectuer la demande et l’export des clés publiques et privés afin de les ajouter à un reverse proxy Nginx.
- Environnement : Lab
- Système d’exploitation : Windows server 2025
⚙️ Procédure #
1. Script Powershell pour la demande : #
function Get-CertificateInfo {
$certInfo = @{}
$certInfo.CommonName = Read-Host "Entrez le nom commun (ex: www.monsite.local)"
$certInfo.DNSName = Read-Host "Entrez le nom DNS (ex: monsite.local)"
$certInfo.FriendlyName = Read-Host "Entrez le nom convivial du certificat"
$certInfo.OutputFolder = "C:\Temp\CertRequest"
return $certInfo
}
function New-CertificateRequest {
param (
[Parameter(Mandatory=$true)]
$CertInfo
)
# Créer le dossier de sortie si nécessaire
if (-not (Test-Path $CertInfo.OutputFolder)) {
New-Item -Path $CertInfo.OutputFolder -ItemType Directory | Out-Null
}
$infPath = "$($CertInfo.OutputFolder)\CertRequest.inf"
$reqPath = "$($CertInfo.OutputFolder)\CertRequest.req"
# Contenu du fichier INF
$infContent = @"
[Version]
Signature="\$Windows NT$"
[NewRequest]
Subject = "CN=$($CertInfo.CommonName)"
Exportable = TRUE
KeyLength = 2048
KeyAlgorithm = RSA
MachineKeySet = TRUE
FriendlyName = "$($CertInfo.FriendlyName)"
[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=$($CertInfo.DNSName)"
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1 ; Server Authentication
"@
# Écriture du fichier INF
$infContent | Out-File -FilePath $infPath -Force
# Génération de la requête
certreq -new $infPath $reqPath
Write-Host "`n✅ Requête générée avec succès : $reqPath"
Write-Host "➡️ Soumettez ce fichier manuellement à votre autorité de certification autonome."
Write-Host "➡️ Une fois le certificat émis, placez le fichier .cer dans le même dossier et exécutez :"
Write-Host "certreq -accept $($CertInfo.OutputFolder)\CertRequest.cer"
}
# Exécution
$certInfo = Get-CertificateInfo
New-CertificateRequest -CertInfo $certInfo
Ce script est à exécuter sur le serveur de l’autorité de certification Exécutez le script dans un répertoire :
C:\Temp\CertRequest (vous pouvez changer ce paramètre à la ligne 7 du script : $certInfo.OutputFolder = "C:\Temp\CertRequest")
2. Approuvez la demande crée via la console MMC : #
Pour approuver la demande de certificat et ainsi le délivrer via la console mmc : Faites :
Toutes les tâches
|-> Soumettre une nouvelle demande...
CertRequest.req
Allez dans les demandes en attente et faite un clic droit :
Toutes les tâches
|-> Délivrer
certreq -accept C:\chemin\vers\le\certificat.cer
3. Export de la clé privée et conversion au format pem : #
Une fois le certificat accepté dans le magasin du serveur vous pouvez aller dans les certificats de l’ordinateur sur le serveur (l’utilisation de la console via RSAT avec WinRM ne permet pas l’option d’exporter la clé privé d’un certificat). Allez dans :
Personnel
|-> Certificats
Sur le certificat voulu faites un clic droit :
Toutes les tâches
|-> Exporter
L’assistant d’exportation de certificat devrais s’afficher comme lors de l’export du certificat.
openssl x509 -in monsupercertificat.cer -outform PEM -out monsupercertificat.pem
tandis que pour la clé privée :
openssl pkcs12 -in masuperclé.pfx -out masuperclé.pem -nodes
Une fois cela fait vous pouvez ensuite utiliser ce certificat / clé privée pour sécuriser un server web ou une application interne à votre réseau.