Анализ проблемы
Глядя на документацию openssl_pkey_new () , в ней упоминается:
См. openssl_csr_new()
для получения дополнительной информации о configargs.
Оказывается, что реализации openssl_pkey_new()
и openssl_csr_new()
совместно используют код для чтения конфигурации. Вы можете увидеть его вызов в исходном коде PHP здесь через символ PHP_SSL_REQ_PARSE
, который расширяется до php_openssl_parse_config
. Его первый параметр типа x509_request
. (CSR означает запрос на подпись сертификата, для получения дополнительной информации см. Документацию приложения OpenSSL req )
Отсекая реализацию php_openssl_parse_config
, оказывается много попыток прочитать параметры конфигурации, которые имеют отношение к CSR, но не только для генерации ключа. Многие из них терпят неудачу и генерируют ту же самую ошибку, которую вы указали.
Чтобы упростить жизнь, я дал команду OpenSSL crypto lib напрямую распечатать информацию о любом неудачном поиске строки конфигурации. Запуск вашего сценария с этой настройкой привел к следующему (в Ubuntu 18.04 с использованием конфигурации, найденной в /etc/ssl/openssl.cnf
):
<code>$ php conftest.php
_CONF_get_string failed for section "(null)", name "openssl_conf"
*** Errors before calling openssl_pkey_new
_CONF_get_string failed for section "(null)", name "oid_file"
_CONF_get_string failed for section "req", name "default_md"
_CONF_get_string failed for section "req", name "req_extensions"
_CONF_get_string failed for section "req", name "encrypt_rsa_key"
_CONF_get_string failed for section "req", name "encrypt_key"
_CONF_get_string failed for section "req", name "default_md"
resource(4) of type (OpenSSL key)
*** Errors after calling openssl_pkey_new
<pre>error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
Решение
Анализ показывает, что добавление значений для параметров oid_file
в главном разделе и default_md
, req_extensions
и encrypt_rsa_key
в [req]
разделе openssl.cnf
должно устранить ошибки. Действительно, после этого результат выглядит следующим образом.
$ php conftest.php
*** Errors before calling openssl_pkey_new
resource(4) of type (OpenSSL key)
*** Errors after calling openssl_pkey_new
* * Заключение тысячи сорок-девять
Я думаю, что вы можете спокойно игнорировать ошибочный вызов PHP несоответствующих параметров конфигурации.