¿Qué es un archivo PEM y cómo se usa?

Contenidos

Persona desbloqueando archivo digital con llave.

PEM es un formato de archivo contenedor que se utiliza a menudo para guardar claves criptográficas. Se utiliza para muchas cosas diferentes, dado que simplemente establece la estructura y el tipo de codificación del archivo que se utiliza para guardar un poco de datos.

¿Qué es un archivo PEM?

PEM es solo un estándar; contienen texto y el formato dicta que los archivos PEM comienzan con …

-----BEGIN <type>-----

… Y terminar con:

-----END <type>-----

Todo lo que hay en el medio está codificado en base64 (letras mayúsculas y minúsculas, dígitos, +, y /). Esto forma un bloque de datos que se puede usar en otros programas. Un solo archivo PEM puede contener varios bloques.

Esto se puede utilizar para representar todo tipo de datos, pero se utiliza comúnmente para codificar archivos de claves, como las claves RSA que se usan para SSH y los certificados que se usan para el cifrado SSL. El archivo PEM le dirá para qué se utiliza en el encabezado; a modo de ejemplo, es factible que vea un archivo PEM que comienza con…

-----BEGIN RSA PRIVATE KEY-----

… Seguido de una larga cadena de datos, que es la clave privada RSA real.

Archivos PEM con certificados SSL

Los archivos PEM se usan para guardar certificados SSL y sus claves privadas asociadas. Hay varios certificados en la cadena SSL completa y funcionan en este orden:

  • El certificado de usuario final, que una autoridad de certificación (CA) asigna a su nombre de dominio. Este es el archivo que utiliza en nginx y Apache para cifrar HTTPS.
  • Hasta cuatro certificados intermedios opcionales, otorgados a autoridades de certificación más pequeñas por autoridades superiores.
  • El certificado raíz, el certificado más alto de la cadena, que está autofirmado por la CA principal.

En la práctica, cada certificado se enumera en un archivo PEM, usando bloques separados:

-----BEGIN CERTIFICATE-----
  //end-user
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
  //intermediate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
  //root
-----END CERTIFICATE-----

Recibirá estos archivos de su proveedor de SSL para que los utilice en su servidor web. A modo de ejemplo, LetsEncrypt’s certbot genera los siguientes certificados, colocados en /etc/letsencrypt/live/your-domain-name/ :

cert.pem chain.pem fullchain.pem privkey.pem
  • cert.pem es el certificado de usuario final.
  • chain.pem es el resto de la cadena; para este caso, es solo el certificado raíz de LetsEncrypt.
  • fullchain.pem es cert.pem y chain.pem conjunto. Este es el archivo pasado a nginx con el ssl_certificate directiva.
  • privkey.pem es una clave privada RSA generada junto con el certificado.

Estos además pueden utilizar el .crt extensión; Si ha autofirmado un certificado con OpenSSL, obtendrá un archivo CRT en lugar de PEM, aún cuando el contenido seguirá siendo el mismo y el uso será el mismo.

Para utilizar sus certificados, deberá pasarlos como parámetros para su servidor web. Para nginx, querrá especificar el ssl_certificate (el archivo PEM de cadena completa), y ssl_certificate_key (el archivo PEM de clave privada RSA), después de activar SSL:

ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;

Para Apache, la configuración es simplemente la misma, pero necesitará utilizar el SSLCertificateFile y SSLCertificateKeyFile directivas:

SSLCertificateFile /etc/letsencrypt/live/yourdomain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain/privkey.pem

Archivos PEM con SSH

Los archivos PEM además se usan para SSH. Si en algún momento has corrido ssh-keygen para utilizar ssh sin contraseña, tu ~/.ssh/id_rsa es un archivo PEM, solo que sin la extensión.

En particular, Amazon Web Services le brinda un archivo PEM que contiene una clave privada cada vez que crea una nueva instancia, y debe utilizar esta clave para poder SSH en nuevas instancias EC2.

RELACIONADO: Cómo agregar su archivo EC2 PEM a su llavero SSH

Deberás de utilizar el -i bandera con ssh para especificar que desea usar esta nueva clave en lugar de id_rsa:

ssh -i keyfile.pem root@host

Esto le permitirá iniciar sesión en el servidor de forma normal, pero tendrá que especificar este indicador cada vez.

Un método más fácil es agregar la clave privada a su ssh-agent con ssh-add:

ssh-add keyfile.pem

A pesar de esto, esto no persiste en los reinicios, por lo que deberá ejecutar este comando al inicio o agregarlo a su llavero macOS.

De todos modos, además puede simplemente agregar su clave pública principal a la instancia ~/.ssh/authorized_keys después de haber iniciado sesión una vez, pero este método debería funcionar de inmediato para cualquier nueva instancia en el futuro.

Es importante destacar señalar que aún debe bloquear su servidor SSH inclusive si está usando claves usted mismo.

RELACIONADO: ¿Qué es el reenvío de agentes SSH y cómo se utiliza?

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.