57 votes

Où le format de fichier PEM est-il spécifié?

J'ai besoin d'analyser les fichiers .PEM.
Je sais que la norme relative au "courrier électronique à confidentialité améliorée" est définie dans les RFC 1421-24. Mais ils ne semblent pas mentionner de texte trouvé dans les fichiers OpenSSL .pem (par exemple, "Key Attributes", "BEGIN CERTIFICATE", etc.). S'agit-il d'un format spécifique à OpenSSL?

43voto

indiv Points 7403

Il est souvent utile d'examiner une implémentation existante et voir ce qu'ils font. OpenSSL définit ces début et de FIN des marqueurs dans la crypto/pem/pem.h. Par exemple, la révision de 1,68 est la suivante:

#define PEM_STRING_X509_OLD     "X509 CERTIFICATE"
#define PEM_STRING_X509         "CERTIFICATE"
#define PEM_STRING_X509_PAIR    "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ     "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL     "X509 CRL"
#define PEM_STRING_EVP_PKEY     "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC       "PUBLIC KEY"
#define PEM_STRING_RSA          "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC   "RSA PUBLIC KEY"
#define PEM_STRING_DSA          "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC   "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7        "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8        "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF     "PRIVATE KEY"
#define PEM_STRING_DHPARAMS     "DH PARAMETERS"
#define PEM_STRING_SSL_SESSION  "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS    "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_CMS          "CMS"

Et autant que je sache, il n'existe pas de liste de maître de début/FIN de marqueurs. Ils sont assez bien définis sur une base comme-nécessaire par une mise en œuvre. Et puis si vous voulez inter-op à la mise en œuvre, vous permet d'ajouter la chaîne à votre propre.

14voto

Sami Koivu Points 2420

Pour vous aider à démarrer: pour autant Que je sais, si il y a une partie qui est lisible par l'homme (a des mots et des choses), que pour les opérateurs humains pour savoir ce que la certification en question est, les dates d'expiration, etc, pour une rapide vérification manuelle. Ainsi, vous pouvez ignorer ce fait.

Vous aurez à analyser ce qui se trouve entre le début-FIN blocs.

À l'intérieur, vous trouverez un encodées en Base64 entité que vous avez besoin de décodage Base64 en octets. Ces octets représentent codé DER clé/certificat/etc. Je ne suis pas sûr de ce que les bibliothèques de qualité, vous pourriez utiliser pour l'analyse de la DER des données.

Comme un test de comprendre quelles sont les données à l'intérieur de chaque bloc, vous pouvez coller ce qui se trouve entre le début-FIN blocs de ce site qui ne l'ASN.1 décodage en JavaScript:

http://lapo.it/asn1js/

Bien que je n'irais pas coller tout environnement de production clés privées de n'importe quel site (bien que cela semble être juste un javascript).

Base64: http://en.wikipedia.org/wiki/Base64

DER: http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules

L'ASN.1: http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One

8voto

hopia Points 1917

----LANCER L'AUTO-RÉPONSE----
Ok, pour le rendre officiel, et pour se conformer à la Q&A StackExchange format, je vais répondre à ma propre question ici...

J'ai trouvé un vieux thread à propos de cette question. Il semble qu'il y est pas "officiel" format standard pour l'encapsulation des frontières et la meilleure façon de le savoir est de deviner le contenu basé sur le bien-connu de mots clés que vous trouverez dans le 'COMMENCER' énoncé: http://www.ietf.org/mail-archive/web/pkix/current/msg03563.html

Comme répondu par indiv, pour la liste complète des mots-clés, reportez-vous à la openssl crypto/pem/pem.h fichier d'en-tête.
----FIN DE L'AUTO-RÉPONSE----

2voto

jathanism Points 15208

Je ne suis pas sûr que ce soit spécifique à OpenSSL, mais la documentation pour PEM Encryption Format peut être ce que vous recherchez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X