read php openssl rsa x509

php read pem certificate



¿Por qué diferentes cadenas de clave privada bajo Linux o Windows? (2)

De acuerdo con una nota del usuario php.net este es un problema conocido:

Tenga en cuenta que las versiones anteriores de PHP / OpenSSL exportan la clave privada RSA con la etiqueta ''----- BEGIN RSA PRIVATE KEY -----'' PEM, que incluye solo el campo privateKey, omitiendo así los campos version y privateKeyAlgorithm.

El efecto de esto sería que si lo está convirtiendo a DER, y luego de vuelta a PEM, pero usando la etiqueta ''----- BEGIN PRIVATE KEY -----'' PEM, la función openssl_pkey_get_privatekey () fallará ! El código de Senthryl se puede usar para prefijar los datos codificados PEM con los campos version y privateKeyAlgorithm de nuevo.

Las versiones más nuevas de PHP / OpenSSL exportan la clave privada RSA con la etiqueta ''----- BEGIN PRIVATE KEY -----'' PEM, que incluye los campos version y privateKeyAlgorithm.

Noté estas diferencias entre mis dos servidores:

Versión de PHP 5.3.3 (OpenSSL 1.0.0a-fips 1 de junio de 2010) en Fedora Core 12 x64

Versión de PHP 5.2.9 (OpenSSL 0.9.8g 19 de octubre de 2007) en Fedora Core 10 x64

Cuando estoy creando cadenas de clave privadas con el siguiente código PHP (y el mismo parámetro de configuración), están encerradas entre diferentes cadenas:

$configs = array(''config'' => ''OpenSSL.cnf'', ''digest_alg'' => ''sha1'', ''x509_extensions'' => ''v3_ca'', ''req_extensions'' => ''v3_req'', ''private_key_bits'' => 2048, ''private_key_type'' => OPENSSL_KEYTYPE_RSA, ''encrypt_key'' => false, ''encrypt_key_cipher'' => OPENSSL_CIPHER_3DES); $privateKeyResourceId = openssl_pkey_new($this->configs); openssl_pkey_export($privateKeyResourceId, $privateKeyString);

En Linux, $ privateKeyString se ve así:

----- BEGIN PRIVATE KEY ----- NBgkqhkiG9w0BAQE .... ASDFasjkfa ----- END PRIVATE KEY -----

En Windows, $ privateKeyString se ve así:

----- BEGIN RSA PRIVATE KEY ----- NBgkqhkiG9E .... ASDFasjkfa ----- END RSA PRIVATE KEY -----

Cuando copio la cadena de clave privada de Windows a Linux, funciono hasta que elimino el ''RSA'' del inicio / finalización (el mismo comportamiento viceversa). ¿Por qué es esto?


Esta es una diferencia entre las versiones openssl y no PHP. El siguiente comando openssl crea diferentes encabezados / pies de página entre las versiones de openssl 0.9.x y 1.0.0x:

openssl req -new -keyout mykey.key -out mycertreq.csr -nodes -sha1 -newkey rsa: 2048

Para la versión 0.9.x, el encabezado / pie de página de la clave es:

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

Para la versión 1.0.0x, el encabezado / pie de página de la clave es:

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

Para la versión posterior de openssl, tengo que ejecutar el archivo de clave a través del siguiente comando para que sea compatible con el valor predeterminado anterior:

openssl rsa -en mykey.key -text> mykey.pem

El archivo "mykey.pem" tiene el encabezado / pie de página (y el formato) que es compatible con AWS y servicios similares.