openssl_pkey_new не работает в xampp

Я несколько дней гуглил и изучал openssl, так и не нашел решения проблемы с openssl_pkey_new в XAMPP для windows. Пробовали обе версии. 7.1.1 и 7.1.4. Каждый раз, когда я пытаюсь запустить этот код:

echo getenv('OPENSSL_CONF')."<p>";

$config = array(
    "config" => "c:/xampp/apache/conf/openssl.cnf",
    "digest_alg" => "sha256",
    "private_key_bits" => 4096,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
);

// Create the private and public key
$res = openssl_pkey_new($config);
echo "<br>openssl_pkey_new: <br>";
//var_dump(openssl_error_string());
while($e = openssl_error_string() ) {
    print_r($e."<br>\n");
}

// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey);
echo "<br>openssl_pkey_export: <br>";
while($e = openssl_error_string() ) {
    print_r($e."<br>\n");
}

// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo "<br>openssl_pkey_get_details: <br>";
while($e = openssl_error_string() ) {
    print_r($e."<br>\n");
}

Я получаю эти ошибки:

openssl_pkey_new:
error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file
error:0E064002:configuration file routines:CONF_load:system lib
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

openssl_pkey_export:
error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file
error:0E064002:configuration file routines:CONF_load:system lib
error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file
error:0E064002:configuration file routines:CONF_load:system lib

Может быть ошибочный openssl.cnf или/и server.key+server.csr+server.crt и/или может быть ошибочный libeay32.dll+ssleay32.dll, или все плохо? беспокоящая проблема быть мягким в моем выражении!!

Руководство по созданию ключей: https://latunyj.wordpress.com/2011/10/31/generating-self-signed-certificate-in-xampp-win32-for-apache-web-server/

Исчерпывающие ответы на проблему: Что мне нужно сделать, чтобы расширение OpenSSL работало на моем xampp (Windows)? :(

Другие ссылки: https://snippets.aktagon.com/snippets/543-how-to-fix-pem-read-bio-no-start-line-error-nginx-error http://au.php.net/manual/en/openssl.installation.php https://community.apachefriends.org/f/viewtopic.php?f=16&t=71199

Очень надеюсь, что кто-то знает ответ на эту проблему.

Редактировать:

Если интересно, почему это раздражает, потому что я использую RSA-OAEP между сервером и клиентом, реализуя openssl и webcrypto для шифрования/дешифрования ключей AES-CBC. Зашифрованные данные AES-CBC передаются вместе с зашифрованными ключами.

Мой временный обходной путь заключается в создании на сервере пары ключей RSA на клиенте и отправке в виде открытого текста. Хорошо для разработки, но не подходит для производства. Это раздражает. В XAMPP до 7.x.x не было методов AES-CBC. Кстати, XAMPP — это только разработка.


person gerteb    schedule 13.05.2017    source источник
comment
Это очень похоже на OpenSSL и ошибку при чтении файла openssl.conf. Я не специалист по PHP (я сторонник OpenSSL), но можете ли вы проверить/подтвердить, что веб-сервер может читать c:/xampp/apache/conf/openssl.cnf? Я думаю, что имя файла неверно (путь или openssl.conf), неправильные разделители путей (Windows использует обратную косую черту) или Apache не имеет доступа к файлу (ERROR_ACCESS_DENIED, 0x05).   -  person jww    schedule 14.05.2017
comment
В xampp 7.1.4 getenv('OPENSSL_CONF') указывает на [xamppdir]/apache/bin, поэтому я жестко кодирую в $options. И да, apache прочитал записи в файл.   -  person gerteb    schedule 14.05.2017
comment
OPENSSL_CONF — это переменная среды, и она может быть неправильной. Используйте dir, чтобы показать местоположение, и используйте cacls, чтобы показать разрешения. В Windows веб-серверы должны работать под другой, почти непривилегированной учетной записью. Меня не удивит, если файл существует, но у веб-сервера нет на него разрешения. Если это возможно, используйте procmon для наблюдения за доступом к файловой системе веб-сервера.   -  person jww    schedule 14.05.2017
comment
Cacls openssl.cnf говорит NT AUTHORITY\SYSTEM:(ID)F BUILTIN\Administrators:(ID)F BUILTIN\Users:(ID)R, а apache работает как SYSTEM.   -  person gerteb    schedule 14.05.2017
comment
Вы должны добавить к вопросу расположение файла и вывод cacls. О РСА-ОАЭП говорить не приходится, так как он не имеет отношения к проблеме. ... Apache работает как SYSTEM — эпический сбой. Я съеживаюсь, когда ребята из Unix пытаются обеспечить безопасность Windows. Они кажутся в основном невежественными.   -  person jww    schedule 14.05.2017
comment
Xampp находится на моем собственном закрытом сервере Windows для разработки. Доступ есть только у меня и моей жены. Нет причин для беспокойства. Кстати, он находится за двумя брандмауэрами, и я не разбираюсь в безопасности. Не изменил сервис для работы от имени www или другого пользователя, потому что я ленивый парень. Ok. Кстати это не вопрос.   -  person gerteb    schedule 15.05.2017
comment
Причина, по которой я упоминаю RSA-OAEP, заключается в том, что для этого я использую ключи. Использование openssl_pkey_new в xampp на 5.6.30 работает, но RSA-CBC только 7.1.X. Это причина, по которой я упоминаю об этом.   -  person gerteb    schedule 15.05.2017