Я несколько дней гуглил и изучал 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 — это только разработка.
c:/xampp/apache/conf/openssl.cnf
? Я думаю, что имя файла неверно (путь илиopenssl.conf
), неправильные разделители путей (Windows использует обратную косую черту) или Apache не имеет доступа к файлу (ERROR_ACCESS_DENIED
,0x05
). - person jww   schedule 14.05.2017OPENSSL_CONF
— это переменная среды, и она может быть неправильной. Используйтеdir
, чтобы показать местоположение, и используйтеcacls
, чтобы показать разрешения. В Windows веб-серверы должны работать под другой, почти непривилегированной учетной записью. Меня не удивит, если файл существует, но у веб-сервера нет на него разрешения. Если это возможно, используйтеprocmon
для наблюдения за доступом к файловой системе веб-сервера. - person jww   schedule 14.05.2017