2012-07-27 25 views
5

Estamos agregando certificados de servidor de verificación en el protocolo de enlace SSL para uno de nuestros clientes. Siendo muy nuevo en Cryptography y C world, pensé que primero aclararía mis conceptos sobre estas cosas y luego comenzaría con la implementación.Cuáles son los diferentes tipos de certificados, formatos en Criptografía

Por lo tanto, busqué mucho en Google buscando 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 casi no entiendo: 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 utilizado por Windows Certificate Store? ¿Es binario?

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

Respuesta

9

La estructura de un certificado X.509 se define utilizando ASN.1. Aquí es un extracto de la definición general de la estructura de an X.509 certificate:

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 
    } 

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

Base64 es una forma general de codificación de secuencias binarias en texto, reduciendo el conjunto de bytes utilizados para caracteres ASCII legibles (por lo que esta representación es más larga).

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

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

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

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

Realmente no importa lo que el Windows Certificate Store usa internamente, debería poder importar/exportar certificados DER o PEM/Base64.


El certificado "tipos" es 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 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile, que esencialmente define cómo las Autoridades de Certificación deben emitir certificados y cómo las entidades deben verificar los certificados remotos.

Usted también puede estar interesado en estas preguntas:

De manera más general, la obtención de un libro sobre la PKI debe ayudar.

+0

Gracias Bruno, ¡ayudo mucho!Estoy teniendo una visión mucho más clara ahora. En cuanto al formato de Windows Store, estoy usando Crypto APIs para recuperar certificados y parece que solo admite formatos binarios. Tendré que escribir mi propio codificador base64 para convertir esos certs. –

Cuestiones relacionadas