Cuando estoy creando cadenas de clave privada con el siguiente código PHP (y la misma configuración de parámetros), que están encerradas entre las diferentes cadenas:¿Por qué diferentes cadenas de clave privada bajo Linux o Windows?
$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 los $ privateKeyString se parece a esto:
----- BEGIN PRIVATE KEY ----- ----- NBgkqhkiG9w0BAQE .... ASDFasjkfa FIN CLAVE PRIVADA -----
En Windows los $ privateKeyString se ve así:
----- BEGIN RSA PRIVATE KEY ----- ----- NBgkqhkiG9E .... ASDFasjkfa FIN clave privada RSA -----
Cuando copio de Windows clave privada para Linux funciona hasta que elimine el 'RSA' del inicio/finalización (el mismo comportamiento viceversa). ¿Por qué es esto?
OpenSSL admite más de un formato de clave privada. El identificador de encabezado PEM cuyo formato se está utilizando. El primero está en un formato PKCS estándar e incluye un identificador que indica que es una clave RSA. El segundo está en un formato específico de RSA y, por lo tanto, no necesita ese identificador. El formato predeterminado cambió entre PHP 5.2.9 y 5.3.3. –
Gracias por el comentario. Esto significaría que no es un problema de sistema operativo. Tengo que echarle un vistazo. – Mike
Definitivamente no es un problema de sistema operativo. Es un problema de PHP. (Ninguno está roto, es solo que si su código espera uno y obtiene el otro, ...) –