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.
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. –