# 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](https://tools.ietf.org/html/rfc1421) a [1424](https://tools.ietf.org/html/rfc1424)
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
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
```shell
openssl x509 -in certificadocrt -noout -dates
```
Formato PEM
```shell
openssl x509 -in certificado.pem -noout -dates
```
## Comprobar la fecha de expiración
Formato CRT
```shell
openssl x509 -enddate -noout -in certificado.crt
```
Formato PEM
```shell
openssl x509 -enddate -noout -in certificado.pem
```
## Comprobar todos los datos del certificado
```shell
openssl x509 -text -noout -in certificado.crt
```
## Leer la información del certificado SSL de un servidor remoto
```shell
openssl s_client -showcerts -connect www.midominio.com:443
```
## Eliminar la contraseña de una clave privada
```shell
openssl rsa -in privateKey.pem -out newPrivateKey.pem
```
## Verificar una clave privada
```shell
openssl rsa -in privateKey.key -check
```
## Verificar un archivo PKCS # 12 (.pfx o .p12)
```shell
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.
```shell
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:
```shell
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:
```shell
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
```shell
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:
```shell
openssl crl2pkcs7 -nocrl -certfile $ MAIN_CERT_FILE.PEM | openssl pkcs7 -print_certs -noout
```
## Otras comprobaciones
Verifica si la clave está en formato PEM:
```shell
openssl rsa -inform PEM -in /tmp/certificate.key
```
Verifica si el Certificado está en formato PEM:
```shell
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
```shell
openssl x509 -outform der -in certificado.pem -out certificado.der
```
### PKCS#12 a DER
```shell
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
```
### PEM y Clave privada a PKCS#12 (.pfx .p12)
```shell
openssl pkcs12 -export -out certificado.pfx -inkey privateKey.key -in certificado.crt -certfile CACert.crt
```
### .PEM a .P7B
```shell
openssl crl2pkcs7 -nocrl -certfile certificado.cer -out certificado.p7b -certfile CACert.cer
```
### .DER a.PEM
```shell
openssl x509 -inform der -in certificado.cer -out certificado.pem
```
### .P7B a .PEM
```shell
openssl pkcs7 -print_certs -in certificado.p7b -out certificado.cer
```
### .P7B a .PFX
Este comando requiere 2 pasos
Convertir de P7B a :CER
```shell
openssl pkcs7 -print_certs -in certificat.p7b -out certificado.cer
```
Convertir .CER y Clave privada a PFX
```shell
openssl pkcs12 -export -in certificado.cer -inkey privateKey.key -out certificado.pfx -certfile CACert.cer
```
### .PFX a .PEM
```shell
openssl pkcs12 -in certificado.pfx -out certificado.cer -nodes
```
### x509 a .PEM
```shell
openssl x509 -in certificado.cer -outform PEM -out certificado.pem
```
### PKCS7 a .PEM
```shell
openssl pkcs7 -print_certs -in certificado.p7b -out certificado.pem
```
### .PFX a PKC#8
Este comando requiere dos pasos
Convertir PFX a PEM
```shell
openssl pkcs12 -in certificado.pfx -out certificado.cer -nodes
```
```shell
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
[](https://tecnocratica.net/wikicratica/uploads/images/gallery/2022-05/H0DPxGZRLMcRUaC5-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
## 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.