req inkey generate from create convertir certificates and openssl rsa private-key pem

generate - openssl pkcs12-export-inkey



Diferencias entre "BEGIN RSA PRIVATE KEY" y "BEGIN PRIVATE KEY" (2)

Hola. Estaba escribiendo un programa que importa claves privadas de un archivo .pem y creo un objeto de clave privada para usarlo más tarde. El problema al que me he enfrentado es que algunos pem archivos pem comienzan con

-----BEGIN PRIVATE KEY-----

mientras que otros comienzan con

-----BEGIN RSA PRIVATE KEY-----

a través de mi búsqueda, sabía que los primeros están formateados PKCS#8 pero no podía saber a qué formato pertenece el otro.


Consulte https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem (busque en la página "BEGIN RSA PRIVATE KEY") ( enlace de archivo para la posteridad, por si acaso).

BEGIN RSA PRIVATE KEY es PKCS # 1 y solo es una clave RSA. Es esencialmente solo el objeto clave de PKCS # 8, pero sin la versión o el identificador de algoritmo al frente. BEGIN PRIVATE KEY es PKCS # 8 e indica que el tipo de clave se incluye en los datos clave en sí. Desde el enlace:

Los datos codificados PKCS # 8 no cifrados se inician y finalizan con las etiquetas:

-----BEGIN PRIVATE KEY----- BASE64 ENCODED DATA -----END PRIVATE KEY-----

Dentro de los datos codificados en base64, la siguiente estructura DER está presente:

PrivateKeyInfo ::= SEQUENCE { version Version, algorithm AlgorithmIdentifier, PrivateKey BIT STRING } AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL }

Por lo tanto, para una clave privada RSA, el OID es 1.2.840.113549.1.1.1 y hay una RSAPrivateKey como cadena de bits de datos de la clave PrivateKey.

A diferencia de BEGIN RSA PRIVATE KEY , que siempre especifica una clave RSA y, por lo tanto, no incluye un tipo de clave OID. BEGIN RSA PRIVATE KEY es PKCS#1 :

Archivo de clave privada RSA (PKCS # 1)

El archivo PEM de clave privada RSA es específico para claves RSA.

Comienza y termina con las etiquetas:

-----BEGIN RSA PRIVATE KEY----- BASE64 ENCODED DATA -----END RSA PRIVATE KEY-----

Dentro de los datos codificados en base64, la siguiente estructura DER está presente:

RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }


Echa un vistazo a this . Da posibles marcadores BEGIN.

Copiando el contenido del enlace de arriba para una referencia rápida:

#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_DHXPARAMS "X9.42 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_PARAMETERS "PARAMETERS" #define PEM_STRING_CMS "CMS"