Certificados

Certificados PEM

Cómo crear un archivo .pem para instalaciones de certificados SSL

¿Que es un certificado pem?

Los archivos Privacy Enhanced Mail (PEM) son contenedores de certificados concatenados que se usan con frecuencia en instalaciones de certificados cuando se importan múltiples certificados que forman una cadena completa como un solo archivo. Son un estándar definido en los RFC 1421 a 1424

Se los puede considerar como un contenedor en capas de certificados encadenados. Un archivo .pem es un formato contenedor que puede incluir el certificado público o toda la cadena de certificados (clave privada, clave pública, certificados raíz):

Llave privada (.key)
Certificado de servidor (crt, clave pública)
(opcional) CA intermedia y / o paquetes si están firmados por un tercero

¿Cómo crear un archivo PEM autofirmado?

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

¿Cómo crear un archivo PEM a partir de archivos de certificados existentes que forman una cadena?

(opcional) Elimina la contraseña de la clave privada siguiendo los pasos que se detallan a continuación:

openssl rsa -in server.key -out nopassword.key

Nota: Tienes que introducir la contraseña de la clave privada.Combine la clave privada, el certificado público y cualquier archivo de certificado intermedio de terceros:

cat nopassword.key > server.pem<br />cat server.crt >> server.pem

Nota: Repite este paso según sea necesario para archivos de cadena de certificados de terceros, paquetes, etc.


cat intermediate.crt >> server.pem

También se puede realizar desde un editor:

Abre un editor de texto (como wordpad) y pega todo el cuerpo de cada certificado en un archivo de texto en el siguiente orden:

La clave privada: your_domain_name.key
El Certificado Primario - your_domain_name.crt
El Certificado Intermedio - DigiCertCA.crt
El certificado raíz - TrustedRoot.crt

----BEGIN RSA PRIVATE KEY-----
(Your Private Key: your_domain_name.key)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate: your_domain_name.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Intermediate certificate: DigiCertCA.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Your Root certificate: TrustedRoot.crt)
-----END CERTIFICATE-----

Crear un PFX a partir del certificado PEM

Parámetro Descripción
openssl The command for executing OpenSSL.
pkcs12 The file utility for PKCS#12 files in OpenSSL.
-export -out certificate.pfx Exports and saves the PFX file as certificate.pfx.
-inkey privateKey.key Uses the private key file privateKey.key as the private key to combine with the certificate.
-in certificate.crt Uses certificate.crt as the certificate to combine with the private key.
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt

Otro método

  1. Take the file you exported (e.g. certname.pfx) and copy it to a system where you have OpenSSL installed. Note: the *.pfx file is in PKCS#12 format and includes both the certificate and the private key.
  2. Run the following command to export the private key: openssl pkcs12 -in certname.pfx -nocerts -out key.pem -nodes
  3. Run the following command to export the certificate: openssl pkcs12 -in certname.pfx -nokeys -out cert.pem
  4. Run the following command to remove the passphrase from the private key: openssl rsa -in key.pem -out server.key

Comprobar SSL servidor

Servidores de correo

Para comprobar si un servidor de correo responde podemos usar comandos como nc o telnet (obsoleto). Pero en el caso de que el servidor use los puertos 993 (IMAP SSL) o 995 (POP3 SSL) la comprobación ha de hacerse de la siguiente forma:

Protocolos IMAP y POP3
openssl s_client -showcerts -connect mail.midominio.com:993 -servername mail.midominio.com
Para el protocolo de salida (SMTP)
openssl s_client -showcerts -connect mail.midominio.com:587 -starttls smtp -tls_2 

Otros servicios de servidores

Para probar el protocolo sftp

openssl s_client -showcerts -connect ftp.miservidorftp.com:21 -starttls ftp -tls1_2

Comprobaciones varias de certificados

Comprobar las fechas de un certificado

Formato CRT 
openssl x509 -in certificadocrt -noout -dates
Formato PEM
openssl x509 -in certificado.pem -noout -dates

Comprobar la fecha de expiración

Formato CRT
openssl x509 -enddate -noout -in certificado.crt 
Formato PEM
openssl x509 -enddate -noout -in certificado.pem

Comprobar todos los datos del certificado

openssl x509 -text -noout -in certificado.crt 

Leer la información del certificado SSL de un servidor remoto

openssl s_client -showcerts -connect www.midominio.com:443

Eliminar la contraseña de una clave privada

openssl rsa -in privateKey.pem -out newPrivateKey.pem

Verificar una clave privada

openssl rsa -in privateKey.key -check


Verificar un archivo PKCS # 12 (.pfx o .p12)

openssl pkcs12 -info -in certificado.p12

Verificación de la validez de un certificado SSL

Si quieres confirmar que tu certificado SSL incluye la información correcta y validarlo en el orden correcto.

Antes de configurar los certificados, es una buena idea probarlos para asegurarse de que sean correctos y funcionen juntos. Aquí le mostramos cómo puede probar la validez de un certificado SSL: también puede ver a continuación para verificaciones adicionales, especialmente si su clave o certificado está en un formato diferente a .key o .crt:

Para estos ejemplos, suponga que certificate.crt es el certificado que se va a cargar, certificate.key es la clave privada para ese certificado y que la información de la cadena de certificados se encuentra en certificate-chain.crt.

openssl verify -CAfile certificate-chain.crt certificate.crt

Si la respuesta es OK, la verificación es válida.

Verifica que las claves públicas contenidas en el archivo de clave privada y el certificado sean las mismas:

openssl x509 -in certificate.crt -noout -pubkey
openssl rsa -in certificate.key -pubout

La salida de estos dos comandos debe ser exactamente la misma.

Verificar que la clave privada y la clave pública son un par de claves que coinciden:

openssl rsa -noout -modulus -in certificate.key | openssl md5
openssl x509 -noout -modulus -in certificate.crt | openssl md5
La salida de estos dos comandos debe ser exactamente la misma.

Verificar las fechas de validez del cetificado

openssl x509 -noout -in certificate.crt -dates


Verificar el orden de sus certificados.


La razón más común para que falle la implementación de un certificado es que los certificados intermedios / en cadena no están en el orden correcto. Un método para verificar el pedido mediante el comando es:

openssl crl2pkcs7 -nocrl -certfile $ MAIN_CERT_FILE.PEM | openssl pkcs7 -print_certs -noout

Otras comprobaciones


Verifica si la clave está en formato PEM:

openssl rsa -inform PEM -in /tmp/certificate.key

Verifica si el Certificado está en formato PEM:

openssl x509 -informar PEM -en /tmp/certificate.crt

Convertir certificados con openssl

En este artículo explicamos la forma de convertir entre tipos de certificados


.PEM a .DER


openssl x509 -outform der -in certificado.pem -out certificado.der

PKCS#12 a DER


openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

PEM y Clave privada a PKCS#12 (.pfx .p12)


openssl pkcs12 -export -out certificado.pfx -inkey privateKey.key -in certificado.crt -certfile CACert.crt

.PEM a .P7B


openssl crl2pkcs7 -nocrl -certfile certificado.cer -out certificado.p7b -certfile CACert.cer

.DER a.PEM


openssl x509 -inform der -in certificado.cer -out certificado.pem

.P7B a .PEM


openssl pkcs7 -print_certs -in certificado.p7b -out certificado.cer

.P7B a .PFX

Este comando requiere 2 pasos
Convertir de P7B a :CER
openssl pkcs7 -print_certs -in certificat.p7b -out certificado.cer
Convertir .CER y Clave privada a PFX
openssl pkcs12 -export -in certificado.cer -inkey privateKey.key -out certificado.pfx -certfile CACert.cer

.PFX a .PEM


openssl pkcs12 -in certificado.pfx -out certificado.cer -nodes

x509 a .PEM


openssl x509 -in certificado.cer -outform PEM -out certificado.pem

PKCS7 a .PEM


openssl pkcs7 -print_certs -in certificado.p7b -out certificado.pem

.PFX a PKC#8

Este comando requiere dos pasos
Convertir PFX a PEM
openssl pkcs12 -in certificado.pfx -out certificado.cer -nodes
Convertir PEM a PKC#8
openSSL pkcs8 -in certificado.pem -topk8 -nocrypt -out certificado.pk8

Formatos de los certificados

Un certificado SSL es esencialmente un certificado X.509. X.509 es un estándar que define la estructura del certificado. Define los campos de datos que deben incluirse en el certificado SSL. X.509 utiliza un lenguaje formal llamado notación de sintaxis abstracta uno ( Abstract Syntax Notation One) o ASN.1, para expresar la estructura de datos del certificado.

Existen diferentes formatos de certificados X.509 como PEM, DER, PKCS # 7 y PKCS # 12. Los formatos PEM y PKCS # 7 usan codificación ASCII Base64 mientras que DER y PKCS # 12 usan codificación binaria. Los archivos de certificado tienen diferentes extensiones según el formato y la codificación que utilizan.

La siguiente figura ilustra los formatos de codificación del certificado X.509 y las extensiones de archivo
certificados.png

Formato PEM


La mayoría de las CA (Autoridad de certificación) proporcionan certificados en formato PEM en archivos codificados ASCII Base64. Los tipos de archivo de certificado pueden ser .pem, .crt, .cer o .key. El archivo .pem puede incluir el certificado del servidor, el certificado intermedio y la clave privada en un solo archivo. El certificado del servidor y el certificado intermedio también pueden estar en un archivo .crt o .cer separado. La clave privada puede estar en un archivo .key.

Los archivos PEM usan codificación ASCII, por lo que puede abrirlos en cualquier editor de texto, como el bloc de notas, MS word, etc. Cada certificado en el archivo PEM está contenido entre el ---- BEGIN CERTIFICATE ---- y ---- END CERTIFICATE ---- declaraciones. La clave privada está contenida entre las declaraciones ---- BEGIN RSA PRIVATE KEY ----- y ----- END RSA PRIVATE KEY -----. El CSR está contenido entre las declaraciones ----- BEGIN CERTIFICATE REQUEST ----- y ----- END CERTIFICATE REQUEST ----

Formato PKCS # 7


El formato PKCS # 7 es un estándar de sintaxis de mensajes criptográficos. El certificado PKCS # 7 utiliza la codificación ASCII Base64 con la extensión de archivo .p7b o .p7c. Solo los certificados se pueden almacenar en este formato, no las claves privadas. Los certificados P7B están contenidos entre las declaraciones "----- BEGIN PKCS7 -----" y "----- END PKCS7 -----".

Formato DER


Los certificados DER están en forma binaria, contenidos en archivos .der o .cer. Estos certificados se utilizan principalmente en servidores web basados en Java.

Formato PKCS # 12


Los certificados PKCS # 12 están en forma binaria, contenidos en archivos .pfx o .p12.

El PKCS # 12 puede almacenar el certificado del servidor, el certificado intermedio y la clave privada en un único archivo .pfx con protección por contraseña. Estos certificados se utilizan principalmente en la plataforma Windows.