Los certificados SSL y las claves privadas pueden almacenarse en varios formatos de archivo. El contenido es el mismo — lo que difiere es la codificación y el empaquetado. La mayor confusión surge al necesitar un formato específico para tu servidor.
Comparación de formatos
| Formato | Extensión | Codificación | Contiene | Usado por |
|---|---|---|---|---|
| PEM | .pem, .crt, .cer, .key | Base64 (texto) | Certificado, clave o cadena (uno por archivo) | Nginx, Apache, la mayoría de servidores Linux |
| DER | .der, .cer | Binario | Un solo certificado o clave | Java, algunas aplicaciones Windows |
| PFX/PKCS#12 | .pfx, .p12 | Binario | Certificado + clave + cadena en un solo archivo | Windows IIS, Azure, Llavero de macOS |
PEM — el formato más común
PEM (Privacy Enhanced Mail) es texto codificado en base64. Puedes abrirlo en un editor de texto:
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgISA8ht...
(base64 encoded data)
-----END CERTIFICATE-----
Los archivos PEM pueden contener certificados, claves privadas o cadenas de certificados. La cabecera te indica qué contiene:
BEGIN CERTIFICATE— un certificadoBEGIN PRIVATE KEY— una clave privada (oBEGIN RSA PRIVATE KEY/BEGIN EC PRIVATE KEY)BEGIN CERTIFICATE REQUEST— un CSR
GetHTTPS produce formato PEM — privkey.pem, cert.pem, chain.pem, fullchain.pem.
DER — codificación binaria
DER es la forma binaria de los mismos datos que PEM codifica como texto. No es legible por humanos. Se usa principalmente en aplicaciones Java (keytool) y algunos componentes de Windows.
PFX/PKCS#12 — formato empaquetado
PFX (Personal Information Exchange) empaqueta el certificado, la clave privada y la cadena en un solo archivo protegido por contraseña. Windows IIS, Azure App Service y el Llavero de macOS requieren este formato.
Conversión entre formatos
Todas las conversiones usan OpenSSL:
PEM → PFX
openssl pkcs12 -export \
-out certificate.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem
Se te pedirá establecer una contraseña de exportación.
PFX → PEM
# Extract certificate
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem
# Extract private key
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privkey.pem
# Extract chain
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem
PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
¿Qué formato necesito?
| Servidor/Plataforma | Formato | Archivos necesarios |
|---|---|---|
| Nginx | PEM | fullchain.pem + privkey.pem |
| Apache | PEM | cert.pem + chain.pem + privkey.pem |
| IIS (Windows) | PFX | certificate.pfx (convertir desde PEM) |
| Azure App Service | PFX | certificate.pfx |
| AWS (ACM) | PEM | cert.pem + chain.pem + privkey.pem (pegar en la consola) |
| Java (Tomcat) | JKS o PFX | Convertir PEM → PFX → JKS con keytool |
| Node.js | PEM | Leer archivos directamente en el código |
Cómo identificar el formato de un archivo
¿No estás seguro de qué formato tiene un archivo? Verifica:
# If it starts with "-----BEGIN" — it's PEM (base64 text)
head -1 mystery-file.pem
# If it's binary (garbled text) — it's DER or PFX
file mystery-file.cer
# Output like "data" or "certificate" = DER
# Output like "PKCS12" = PFX
# Inspect a PEM certificate
openssl x509 -in cert.pem -noout -text
# Inspect a DER certificate
openssl x509 -in cert.der -inform DER -noout -text
# Inspect a PFX file
openssl pkcs12 -in cert.pfx -info -nokeys
Confusión común con extensiones de archivo
| Extensión | Generalmente significa | Pero podría ser |
|---|---|---|
.pem | PEM (base64) | Siempre PEM |
.crt | Certificado PEM | DER en Windows |
.cer | Certificado PEM | DER en Windows |
.key | Clave privada PEM | DER (raro) |
.pfx | Paquete PKCS#12 | Siempre PFX |
.p12 | Paquete PKCS#12 | Siempre PFX (igual que .pfx) |
.der | DER (binario) | Siempre DER |
.jks | Java KeyStore | Siempre JKS |
Regla general: Abre el archivo en un editor de texto. Si ves -----BEGIN CERTIFICATE-----, es PEM independientemente de la extensión. Si ves datos binarios ilegibles, es DER o PFX.
Preguntas frecuentes
¿Cuál es la diferencia entre .crt, .cer y .pem?
Todos pueden ser formato PEM. La extensión es una convención de nombres, no un indicador de formato. .crt y .cer se usan comúnmente para archivos de certificado, .pem para cualquier archivo codificado en PEM. En Windows, los archivos .cer a veces están codificados en DER — abre en un editor de texto para verificar.
¿Por qué GetHTTPS me da 4 archivos?
Máxima compatibilidad. GetHTTPS proporciona: privkey.pem (clave privada), cert.pem (solo tu certificado), chain.pem (certificado de la CA intermedia), fullchain.pem (cert + chain combinados). Nginx necesita fullchain.pem; Apache necesita cert.pem + chain.pem separados; IIS necesita PFX (convertir desde PEM).
¿Cómo creo un PFX para Windows/IIS?
Usa el comando OpenSSL de PEM → PFX de arriba. Necesitarás privkey.pem, cert.pem y chain.pem de GetHTTPS. El archivo .pfx resultante se puede importar en IIS, Azure App Service o el Llavero de macOS.
¿Puedo convertir de un formato a otro sin la clave privada?
Puedes convertir el certificado entre PEM y DER sin la clave privada. Pero crear un PFX requiere la clave privada (empaqueta certificado + clave juntos). Si perdiste tu clave privada, necesitas generar un nuevo certificado.
¿Qué formato usa Let’s Encrypt?
Let’s Encrypt (a través de cualquier cliente ACME incluyendo GetHTTPS) produce formato PEM. Si necesitas un formato diferente para tu servidor, convierte usando los comandos OpenSSL de arriba.