Skapa en CSR

Skapar en certifikatbegäran och nyckel, med alla ytterligare namn (SAN) för e-post- och Autodiscover-värdar.

Mail + Autodiscover

PowerShell (Windows)

certreq Inbyggt

@"
[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 Tilläggsverktyg

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"

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

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

Moderna webbläsare och servrar utvärderar bara SAN-posterna; enbart common name har inte räckt på flera år. certreq lagrar nyckeln i Windows certifikatarkiv, openssl i en fil.

Granska en CSR

Visar innehållet i en certifikatbegäran innan den skickas till CA:n: namn, nyckellängd och signatur.

PowerShell (Windows)

certutil Inbyggt

certutil -dump mail.example.com.csr

openssl Tilläggsverktyg

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

Unix-skal (bash)

openssl Inbyggt

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

certtool Tilläggsverktyg

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

Granska en PFX-fil

Visar subjekt, utfärdare, giltighet och kedja för en PFX/P12-fil och om den privata nyckeln ingår.

PowerShell (Windows)

Get-PfxData Inbyggt

$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 Tilläggsverktyg

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

Unix-skal (bash)

openssl Inbyggt

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

certtool Tilläggsverktyg

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

För äldre PFX-filer behöver OpenSSL 3 växeln -legacy, annars avvisar det den gamla RC2-algoritmen.

Konvertera format

Konverterar mellan PFX/P12 och PEM (certifikat och nyckel separat): det vanligaste steget när ett certifikat flyttas mellan Windows och en appliance.

PowerShell (Windows)

certutil / Export-PfxCertificate Inbyggt

# 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 Tilläggsverktyg

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

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

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

Den skapade nyckelfilen är okrypterad. Radera den efter importen och lämna den inte på en nätverksresurs.

Matchar nyckel och certifikat?

Kontrollerar om en nyckelfil hör till certifikatet: identisk kontrollsumma betyder att de hör ihop.

PowerShell (Windows)

X509Certificate2 Inbyggt

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

openssl Tilläggsverktyg

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

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

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

Denna förväxling är den vanligaste orsaken till "certifikatet kan inte importeras".

Granska certifikatarkivet

Listar installerade certifikat med tumavtryck, subjekt och utgångsdatum.

PowerShell (Windows)

Cert: PSDrive Inbyggt

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

certutil Inbyggt

certutil -store My

Unix-skal (bash)

ls / openssl Inbyggt

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 Tilläggsverktyg

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

I Windows är tumavtrycket den identifierare som Exchange och IIS använder för att binda ett certifikat.

Vad går snart ut?

Hittar certifikat som går ut inom de närmaste 60 dagarna: kontrollen som förhindrar ett avbrott under helgen.

PowerShell (Windows)

Cert: PSDrive Inbyggt

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

certutil Tilläggsverktyg

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

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

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

Andra områden