Crear una CSR

Crea una solicitud de certificado y la clave, con todos los nombres adicionales (SAN) para los hosts de correo y Autodiscover.

Mail + Autodiscover

PowerShell (Windows)

certreq Integrado

@"
[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 Herramienta adicional

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 de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

Los navegadores y servidores modernos solo evalúan las entradas SAN; el nombre común por sí solo no basta desde hace años. certreq guarda la clave en el almacén de certificados de Windows, openssl en un archivo.

Examinar una CSR

Muestra el contenido de una solicitud de certificado antes de enviarla a la CA: nombres, longitud de clave y firma.

PowerShell (Windows)

certutil Integrado

certutil -dump mail.example.com.csr

openssl Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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

certtool Herramienta adicional

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

Examinar un archivo PFX

Muestra el sujeto, el emisor, la validez y la cadena de un archivo PFX/P12 y si incluye la clave privada.

PowerShell (Windows)

Get-PfxData Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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

certtool Herramienta adicional

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

Para archivos PFX antiguos, OpenSSL 3 necesita la opción -legacy; de lo contrario rechaza el antiguo algoritmo RC2.

Convertir formatos

Convierte entre PFX/P12 y PEM (certificado y clave por separado): el paso más habitual al mover un certificado entre Windows y un appliance.

PowerShell (Windows)

certutil / Export-PfxCertificate Integrado

# 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 Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

El archivo de clave generado no está cifrado. Elimínelo tras la importación y no lo deje en un recurso compartido de red.

¿Coinciden la clave y el certificado?

Comprueba si un archivo de clave pertenece al certificado: una suma de comprobación idéntica significa que van juntos.

PowerShell (Windows)

X509Certificate2 Integrado

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

openssl Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

Esta confusión es la causa más frecuente de "el certificado no se puede importar".

Examinar el almacén de certificados

Lista los certificados instalados con huella digital, sujeto y caducidad.

PowerShell (Windows)

Cert: PSDrive Integrado

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

certutil Integrado

certutil -store My

Shell de Unix (bash)

ls / openssl Integrado

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 Herramienta adicional

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

En Windows, la huella digital es el identificador con el que Exchange e IIS vinculan un certificado.

¿Qué caduca pronto?

Encuentra los certificados que caducan en los próximos 60 días: la comprobación que evita una caída en fin de semana.

PowerShell (Windows)

Cert: PSDrive Integrado

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

certutil Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

Otras áreas