Créer une CSR

Crée une demande de certificat et la clé, avec tous les noms supplémentaires (SAN) pour les hôtes de messagerie et Autodiscover.

Mail + Autodiscover

PowerShell (Windows)

certreq Natif

@"
[NewRequest]
Subject = "CN=mail.example.com"
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
[Extensions]
2.5.29.17 = "{text}dns=mail.example.com&dns=autodiscover.example.com"
"@ | Set-Content req.inf
certreq -new req.inf mail.example.com.csr

openssl Outil complémentaire

openssl req -new -newkey rsa:2048 -nodes -keyout privkey.pem -out mail.example.com.csr -subj "/CN=mail.example.com" -addext "subjectAltName=DNS:mail.example.com,DNS:autodiscover.example.com"

Shell Unix (bash)

openssl Natif

openssl req -new -newkey rsa:2048 -nodes -keyout privkey.pem -out mail.example.com.csr -subj "/CN=mail.example.com" -addext "subjectAltName=DNS:mail.example.com,DNS:autodiscover.example.com"

certtool Outil complémentaire

certtool --generate-privkey --outfile privkey.pem && certtool --generate-request --load-privkey privkey.pem --outfile mail.example.com.csr

Les navigateurs et serveurs modernes n'évaluent que les entrées SAN ; le nom commun seul ne suffit plus depuis des années. certreq stocke la clé dans le magasin de certificats Windows, openssl dans un fichier.

Examiner une CSR

Affiche le contenu d'une demande de certificat avant son envoi à l'autorité de certification : noms, longueur de clé et signature.

PowerShell (Windows)

certutil Natif

certutil -dump mail.example.com.csr

openssl Outil complémentaire

openssl req -in mail.example.com.csr -noout -text -verify

Shell Unix (bash)

openssl Natif

openssl req -in mail.example.com.csr -noout -subject -reqopt no_sigdump -text | head -20

certtool Outil complémentaire

certtool --crq-info --infile mail.example.com.csr

Examiner un fichier PFX

Affiche le sujet, l'émetteur, la validité et la chaîne d'un fichier PFX/P12, et indique si la clé privée est incluse.

PowerShell (Windows)

Get-PfxData Natif

$pw = Read-Host "PFX-Passwort" -AsSecureString
$d = Get-PfxData -FilePath "cert.pfx" -Password $pw
$d.EndEntityCertificates | Format-List Subject, Issuer, NotAfter, Thumbprint, HasPrivateKey
$d.OtherCertificates | ForEach-Object { $_.Subject }

openssl Outil complémentaire

openssl pkcs12 -in cert.pfx -nokeys -info | openssl x509 -noout -subject -issuer -dates

Shell Unix (bash)

openssl Natif

openssl pkcs12 -in cert.pfx -nokeys -legacy 2>/dev/null | openssl x509 -noout -subject -issuer -dates

certtool Outil complémentaire

certtool --p12-info --infile cert.pfx

Pour les anciens fichiers PFX, OpenSSL 3 nécessite l'option -legacy, sinon il refuse l'ancien algorithme RC2.

Convertir les formats

Convertit entre PFX/P12 et PEM (certificat et clé séparés) : l'étape la plus courante pour déplacer un certificat entre Windows et une appliance.

PowerShell (Windows)

certutil / Export-PfxCertificate Natif

# PFX -> Base64-PEM (nur Zertifikat, ohne Schlüssel)
certutil -encode cert.pem.der cert.pem
# Zertifikat aus dem Store als PFX exportieren:
# Get-ChildItem Cert:\LocalMachine\My\<Thumbprint> | Export-PfxCertificate -FilePath cert.pfx -Password (Read-Host -AsSecureString)

openssl Outil complémentaire

openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem

Shell Unix (bash)

openssl Natif

openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem
openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out neu.pfx

certtool Outil complémentaire

certtool --load-certificate cert.pem --load-privkey privkey.pem --to-p12 --outfile neu.p12

Le fichier de clé produit n'est pas chiffré. Supprimez-le après l'importation et ne le laissez pas sur un partage réseau.

La clé et le certificat correspondent-ils ?

Vérifie si un fichier de clé appartient au certificat : une somme de contrôle identique signifie qu'ils vont ensemble.

PowerShell (Windows)

X509Certificate2 Natif

$c = New-Object Security.Cryptography.X509Certificates.X509Certificate2 "cert.pem"
"HasPrivateKey: $($c.HasPrivateKey)"
$c.PublicKey.Key.ToXmlString($false).Substring(0, 60)

openssl Outil complémentaire

openssl x509 -in cert.pem -noout -modulus | openssl md5
openssl rsa -in privkey.pem -noout -modulus | openssl md5

Shell Unix (bash)

openssl Natif

openssl x509 -in cert.pem -noout -modulus | openssl sha256
openssl rsa -in privkey.pem -noout -modulus | openssl sha256
# Gleiche Prüfsumme = Schlüssel und Zertifikat gehören zusammen.

certtool Outil complémentaire

certtool --certificate-info --infile cert.pem | grep -A2 "Public Key ID"

Cette confusion est la cause la plus fréquente de "le certificat ne peut pas être importé".

Examiner le magasin de certificats

Liste les certificats installés avec empreinte, sujet et date d'expiration.

PowerShell (Windows)

Cert: PSDrive Natif

Get-ChildItem Cert:\LocalMachine\My | Sort-Object NotAfter |
  Format-Table Thumbprint, Subject, NotAfter, HasPrivateKey -AutoSize
Get-Item Cert:\LocalMachine\My\A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0 | Format-List *

certutil Natif

certutil -store My

Shell Unix (bash)

ls / openssl Natif

ls -1 /etc/ssl/certs | head -20
awk -v cmd='openssl x509 -noout -subject -enddate' '/BEGIN/{close(cmd)};{print | cmd}' /etc/ssl/certs/ca-certificates.crt | head -20

trust Outil complémentaire

trust list --filter=ca-anchors | head -40

Sous Windows, l'empreinte est l'identifiant qu'Exchange et IIS utilisent pour lier un certificat.

Qu'est-ce qui expire bientôt ?

Trouve les certificats qui expirent dans les 60 prochains jours : le contrôle qui évite une panne le week-end.

PowerShell (Windows)

Cert: PSDrive Natif

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.NotAfter -lt (Get-Date).AddDays(60) } |
  Sort-Object NotAfter |
  Format-Table Subject, NotAfter, Thumbprint -AutoSize

certutil Outil complémentaire

certutil -store My | findstr /C:"NotAfter"

Shell Unix (bash)

openssl Natif

for c in /etc/ssl/certs/*.pem; do
  openssl x509 -in "$c" -noout -checkend 5184000 >/dev/null 2>&1 || echo "laeuft bald ab: $c"
done

certtool Outil complémentaire

certtool --certificate-info --infile /etc/ssl/certs/ssl-cert-snakeoil.pem | grep -E "Not After"

Autres domaines