Opprett en CSR

Oppretter en sertifikatforespørsel og nøkkel, med alle ekstra navn (SAN) for e-post- og Autodiscover-verter.

Mail + Autodiscover

PowerShell (Windows)

certreq Innebygd

@"
[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 Tilleggsverktøy

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-skall (bash)

openssl Innebygd

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 Tilleggsverktøy

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

Moderne nettlesere og servere vurderer bare SAN-oppføringene; common name alene har ikke vært nok på mange år. certreq lagrer nøkkelen i Windows sertifikatlager, openssl i en fil.

Undersøk en CSR

Viser innholdet i en sertifikatforespørsel før den sendes til CA-en: navn, nøkkellengde og signatur.

PowerShell (Windows)

certutil Innebygd

certutil -dump mail.example.com.csr

openssl Tilleggsverktøy

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

Unix-skall (bash)

openssl Innebygd

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

certtool Tilleggsverktøy

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

Undersøk en PFX-fil

Viser subjekt, utsteder, gyldighet og kjede for en PFX/P12-fil og om den private nøkkelen er med.

PowerShell (Windows)

Get-PfxData Innebygd

$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 Tilleggsverktøy

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

Unix-skall (bash)

openssl Innebygd

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

certtool Tilleggsverktøy

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

For eldre PFX-filer trenger OpenSSL 3 bryteren -legacy, ellers avviser den den gamle RC2-algoritmen.

Konverter formater

Konverterer mellom PFX/P12 og PEM (sertifikat og nøkkel hver for seg): det vanligste trinnet når et sertifikat flyttes mellom Windows og en appliance.

PowerShell (Windows)

certutil / Export-PfxCertificate Innebygd

# 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 Tilleggsverktøy

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

Unix-skall (bash)

openssl Innebygd

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 Tilleggsverktøy

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

Nøkkelfilen som lages, er ukryptert. Slett den etter importen, og la den ikke ligge på en nettverksressurs.

Passer nøkkel og sertifikat sammen?

Kontrollerer om en nøkkelfil hører til sertifikatet: identisk kontrollsum betyr at de hører sammen.

PowerShell (Windows)

X509Certificate2 Innebygd

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

openssl Tilleggsverktøy

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

Unix-skall (bash)

openssl Innebygd

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 Tilleggsverktøy

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

Denne forvekslingen er den vanligste årsaken til "sertifikatet kan ikke importeres".

Undersøk sertifikatlageret

Lister installerte sertifikater med avtrykk, subjekt og utløpsdato.

PowerShell (Windows)

Cert: PSDrive Innebygd

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

certutil Innebygd

certutil -store My

Unix-skall (bash)

ls / openssl Innebygd

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 Tilleggsverktøy

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

I Windows er avtrykket identifikatoren Exchange og IIS bruker til å binde et sertifikat.

Hva utløper snart?

Finner sertifikater som utløper innen de neste 60 dagene: kontrollen som hindrer et driftsavbrudd i helgen.

PowerShell (Windows)

Cert: PSDrive Innebygd

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

certutil Tilleggsverktøy

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

Unix-skall (bash)

openssl Innebygd

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 Tilleggsverktøy

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

Andre områder