Почему разные строки частного ключа в Linux или Windows?

Когда я создаю строки частного ключа со следующим кодом PHP (и таким же конфигурационным параметром), они заключаются между разными строками:

$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); 

В Linux $ privateKeyString выглядит так:

—– НАЧАТЬ ЧАСТНЫЙ КЛЮЧ —– NBgkqhkiG9w0BAQE …. ASDFasjkfa —– END ЧАСТНЫЙ КЛЮЧ —–

В Windows $ privateKeyString выглядит так:

—– НАЧАТЬ ЧАСТНЫЙ КЛЮЧ RSA —– NBgkqhkiG9E …. ASDFasjkfa —– END RSA ЧАСТНЫЙ КЛЮЧ —–

Когда я копирую строку частного ключа Windows в Linux, она работает до тех пор, пока я не удалю «RSA» с начала / конца (это же поведение наоборот). Почему это?

    По словам пользователя php.net, это известная проблема:

    Обратите внимание, что более старые версии PHP / OpenSSL экспортируют закрытый ключ RSA с тегом «—– BEGIN RSA PRIVATE KEY —–» PEM, который включает только поле privateKey, тем самым опуская поля версии и privateKeyAlgorithm.

    Эффект от этого будет заключаться в том, что если вы конвертируете его в DER, а затем обратно в PEM, но используя тег «—– BEGIN PRIVATE KEY —–» PEM, функция openssl_pkey_get_privatekey () не будет работать Код Senthryl можно использовать для префикса данных, закодированных PEM, с полями версии и privateKeyAlgorithm.

    Новые версии PHP / OpenSSL экспортируют закрытый ключ RSA с тегом «—– BEGIN PRIVATE KEY —–» PEM, который включает поля версии и privateKeyAlgorithm.

    Я заметил эти различия между двумя серверами:

    Версия PHP 5.3.3 (OpenSSL 1.0.0a-fips 1 июня 2010 г.) для Fedora Core 12 x64

    PHP версии 5.2.9 (OpenSSL 0.9.8g 19 октября 2007 г.) на Fedora Core 10 x64

    Это различие между версиями openssl, а не PHP. Следующая команда openssl создает разные верхние / нижние колонтитулы между версиями openssl версии 0.9.x и 1.0.0x:

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

    Для версии 0.9.x верхний / нижний колонтитул:

    —– НАЧАТЬ ЧАСТНЫЙ КЛЮЧ RSA —– —– END RSA ЧАСТНЫЙ КЛЮЧ —–

    Для версии 1.0.0x верхний / нижний колонтитул:

    —– НАЧАТЬ ЧАСТНЫЙ КЛЮЧ —– —– КОНЕЦ ЧАСТНОГО КЛЮЧА —–

    Для более поздней версии openssl я должен запустить файл ключа с помощью следующей команды, чтобы сделать его совместимым со старым значением по умолчанию:

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

    Затем в файле «mykey.pem» есть верхний и нижний колонтитулы (и формат), которые совместимы с AWS и похожими службами.