Когда я создаю строки частного ключа со следующим кодом 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 и похожими службами.