¿Cuáles son los diferentes tipos de certificados, formatos en criptografía?

Estamos agregando la verificación de certificados de servidor en protocolo de enlace SSL para uno de nuestros clientes. Siendo muy nuevo en Criptografía y el mundo C, pensé que primero aclararía mis conceptos sobre estas cosas y luego comenzaría con la implementación.

Entonces, busqué mucho en Google buscando principalmente conceptos de Certificados, pero no pude aclarar mis conceptos mejor para mi satisfacción. En realidad, agregó más confusión. :)

Aquí hay algunas cosas que no entiendo casi en absoluto: 1. ¿Qué es el formato base64? ¿Es lo mismo que DER? 2. ¿El archivo PEM siempre contiene contenido base64? 3. ¿Cuál es el formato que utiliza el Almacén de certificados de Windows? ¿Es binario?

¿Puede alguien por favor ayudarme aquí? Estaría muy agradecido si estas cosas se aclaran para mí.

preguntado el 27 de julio de 12 a las 17:07

1 Respuestas

La estructura de un certificado X.509 se define mediante ASN.1. Aquí hay un extracto de la definición general de la estructura de un certificado X.509:

Certificate  ::=  SEQUENCE  {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    }

A Certificate El valor (con los valores contenidos rellenados) se codifica utilizando el DER formato, que es un formato binario.

Basexnumx es una forma general de codificar secuencias binarias en texto, al reducir el conjunto de bytes utilizados a caracteres ASCII legibles (por lo que esta representación es más larga).

Un certificado en formato PEM es la codificación Base64 de la codificación DER del certificado, con un retorno de línea al final de cada fragmento de 64 caracteres, colocado entre delimitadores:

-----BEGIN CERTIFICATE-----
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn
...
-----END CERTIFICATE-----

También podría tener la clave privada en formato PEM, en cuyo caso los delimitadores serían -----BEGIN RSA PRIVATE KEY----- (y a juego END), por ejemplo.

En el cable, durante una conexión TLS, se utiliza DER.

Realmente no importa lo que el almacén de certificados de Windows use internamente, debería poder importar/exportar certificados DER o PEM/Base64.


Los "tipos" de certificados son un tema más amplio que el formato DER/base64. La mayoría de los certificados utilizados para SSL/TLS son certificados X.509. Luego obtienes perfiles de uso. El más común es el Certificado de infraestructura de clave pública X.509 de Internet y perfil de lista de revocación de certificados (CRL), que esencialmente define cómo las Autoridades de Certificación deben emitir certificados y cómo las entidades deben verificar los certificados remotos.

También te pueden interesar estas preguntas:

De manera más general, obtener un libro sobre PKI debería ayudar.

Respondido 07 Oct 21, 06:10

Gracias Bruno, me ayudó mucho! Estoy teniendo una visión mucho más clara ahora. Con respecto al formato de la tienda de Windows, estoy usando Crypto API para recuperar certificados y parece que solo admite formatos binarios. Tendré que escribir mi propio codificador base64 para convertir esos certificados. - Tushar sudake

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.