x509: Certificados digitales y codificaciones DER, CRT y CER

Hoy aclararemos algunas dudas respecto de los certificados digitales X509, formatos y extensiones de los archivos y, por qué no, algunos comandos útiles de la suite OpenSSL.


Un certificado digital x.509 es un documento digital que ha sido codificado y/o firmado digitalmente de acuerdo a la RFC 5280.openssl ssl x509 x.509 crypto certificado certificate digital signature pem cert crt cer der

De hecho, el término “Certificado x.509” usualmente se refiere al certificado PKIX de la IETF, y al  perfil CRL del estándar de certificados digitales x.509 v3 especificado en la RFC 5280, donde PKIX hace referencia a la Infraestructura de clave pública x.509 (Public Key Infrastructure X.509).

El estándar X.509 solo define la sintaxis de los certificados, por lo que no está atado a ningún algoritmo en particular, y contempla los siguientes campos en su estructura:

  • Version.
    Especifica cuál de las tres versiones de x.509 se aplica a este certificado.
  • Numero de serie.
    Es un identificador único para todos los certificados de una misma CA.
  • Identificador del algoritmo empleado para la firma digital.
    Qué algoritmo utilizó la CA del certificado para firmarlo.
  • Nombre del certificador.
    Nombre de la CA.
  • Periodo de validez.
    Por seguridad, los certificados tiene un tiempo de vida.
  • Nombre del sujeto.
    Nombre del dueño del certificado.
  • Clave publica del sujeto.
    Clave pública del dueño del certificado, y algoritmo asociado.
  • Extensiones.
    Información adicional permitida por el estandar.
  • Firma digital de todo lo anterior generada por el certificador.
    Firma digital de la CA.

Un ejemplo de un certificado X.509 podría ser el siguiente:

petwrap petya ransomware linux security infosec hack hacking openssl ssl x509 x.509 crypto certificado certificate digital signature pem cert crt cer derExtensiones de los archivos X509

Un punto importante a entender acá, y que puede generar confusiones entre los usuarios de certificados digitales X.509, son las extensiones que éstos pueden tener.

Existe mucha confusión al respecto de las extensiones DER, PEM, CRT y CER, y generalmente, y de manera incorrecta, muchos piensan que pueden utilizarse e intercambiarse sin generar conflictos.

Mientras que en ciertos casos algunas de estas extensiones pueden intercambiarse, la mejor práctica es la de identificar cómo está codificado internamente el certificado, y entonces etiquetarlo correctamente con la extensión que corresponda, ya que esto evitará problemas luego a la hora de manipular los certificados digitales.

Algunas codificaciones de X509

Las siguientes codificaciones también suelen utilizarse como extensiones en los archivos de certificados digitales. A saber:

DER

La extensión DER es utilizada para certificados digitales codificados en forma binaria. Estos archivos también suelen tener la extensión CRT o CER. DER es un tipo de codificación de certificados X.509, NO un tipo de certificado, de modo que la expresión “Tengo un certificado DER” es incorrecta, y debería optarse por “Tengo un certificado X.509 codificado en formato DER”.

PEM

Estos certificados están codificados en Base64 / ASCII, y generalmente se utilizan para certificados digitales X.509 v3… son aquellos que al abrirlos con un editor de texto comienzan y terminan con líneas similares a las siguientes:

Algunas extensiones de certificados digitales X509

CRT

Esta extensión es utilizada para certificados. Los certificados pueden ser codificados en binarios DER o como ASCII PEM. Las extensiones CER y CRT podrían considerarse sinónimos.

Es la extensión más utilizada en sistemas *nix, como Linux o Unix.

CER

Es una extensión alternativa a la CRT pero siguiendo las convenciones de Microsoft. La extensión CER es también reconocida por Internet Explorer como un comando para correr un ejecutable de la API de criptografía de Microsoft, y es utilizada principalmente por rundll32.exe, cryptext.dll, y CryptExtOpenCER, que muestran un mensaje de diálogo dando la posibilidad de importar el certificado en el sistema, o analizar su contenido.

KEY

Esta extensión es utilizada tanto para la clave pública como la privada de PKCS. Estas claves pueden estar codificadas en formato binario DER o ASCII PEM.

La única ocasión en la que podemos intercambiar libremente las extensiones CRT y CER sin tener problemas, es cuando el certificado tiene la misma codificación… es decir, por ejemplo, cuando el certificado tiene extensión CRT o CER, pero su codificación es PEM.

Manipulando certificados con OpenSSL

Para completar este artículo, vamos a analizar cuatro formas básicas de manipular certificados digitales X.509. Estas son, ver el certificado, convertirlo, combinarlo, y extraer claves desde el mismo.

Vamos a ello.

openssl ssl x509 x.509 crypto certificado certificate digital signature pem cert crt cer der

Ver el contenido de un certificado digital

Los certificados en general no tienen un formato legible al humano, incluso los formatos Base64 PEM, por lo que haremos uso de las herramientas provistas por OpenSSL para analizar su contenido.

Para ver el contenido de un certificado en formato PEM (independientemente de su extensión) podemos utilizar el siguiente comando:

En el caso de obtener un error similar a este:


Significa que estamos intentando ver el contenido de un certificado binario con formato DER.

Para poder ver este tipo de certificados, necesitamos utilizar un comando similar a este:

openssl x509 -in certificado.der -inform der -text -noout

Convertir entre formatos de certificados digitales

A veces, y dependiendo de las aplicaciones en las que vayamos a utilizar los certificados, puede que sea necesario cambiar el formato de un certificado.

Esto no es tarea difícil para la suite OpenSSL, y podemos llevarla a cabo de las siguientes maneras:

  • Convirtiendo PEM a DER:

openssl x509 -in cert.crt -outform der -out cert.der

  • Convirtiendo DER a PEM:
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

Combinar piezas X.509 en un mismo archivo

En algunos casos es conveniente combinar varias piezas de la infraestructura X.509, tales como certificados digitales/claves públicas, y claves privadas, en un mismo archivo… de hecho, un uso común es tener en el mismo archivo combinadas la clave pública en formato de certificado digital, y la clave privada.

La forma más simple de hacerlo es tener, tanto claves como certificados, almacenados en archivos con formato ASCII Base64 PEM, y simplemente copiar en un solo archivo de texto, mediante línea de comandos o algún editor de texto, los contenidos de los archivos PEM en un nuevo archivo de texto, que será también de formato PEM.

Extraer claves desde un certificado

Por último, y sabiendo que un certificado digital X.509 se compone de metainformación agregada a una clave pública, utilizando la suite OpenSSL también podemos extraer la clave desde el certificado.

Supongamos que tenemos un certificado en formato PEM (si es DER, podemos convertirlo como se vio mas arriba). Podemos extraer la calve pública con un comando similar a este:

openssl x509 -inform pem -in cert.crt -pubkey -noout > pub.key

Donde pub.key es la clave pública resultante, también en formato PEM.

Conclusiones

Hemos aprendido algunos conceptos acerca de los certificados digitales X.509, su estructura, extensiones y codificaciones, y algunos comandos OpenSSL interesantes para poder ver el contenido y la información de un certificado, y convertirlos a diferentes formatos de codificación.

Por supuesto, OpenSSL es una suite de comandos muy extensa, y que brinda muchas posibilidades a la hora de trabajar con criptografía, tanto simétrica como asimétrica… tanto que da uno o más artículos comentando comandos y modificadores 🙂

Espero que les resulte interesante y constructivo!

Cualquier comentario o aporte pueden hacerlo aquí en el blog, de modo que otros lectores puedan aprender de cada uno!

Será hasta la próxima!


Fuente principal: http://www.gtopia.org/blog/2010/02/der-vs-crt-vs-cer-vs-pem-certificates/