Intereting Posts
Помогите понять этот файл загрузки кода PHP Порт XAMPP 80 используется «Невозможно открыть процесс» с PID 4 Перемещение php-проекта в кодовое средство или обновление существующей структуры Вложенные модели отношений в формах – Laravel Как получить массив объектов строки из моего результата в подготовленном запросе mysqli Как определить размер изображения без его загрузки (в полном объеме)? Как эхо PHP-код внутри html, который находится внутри php-кода в этой ситуации? Может ли внутренняя сеть PHP совместно использовать учетные записи Windows? Получение мягкой ошибки 404 при перенаправлении на страницу входа в Yii Zend1: перенаправление на действие в другом модуле Как разобрать URL-адрес в PHP? строка загрузочного буфера php loop автоматический тайм-аут и закрытие браузера Получение доступа для команды cmd с использованием функции php fatal error Имя функции должно быть строкой

OpenSSL не работает в Windows, ошибки 0x02001003 0x2006D080 0x0E064002

Проблема: OpenSSL не работает в моей среде Windows. OpenSSL многократно сообщает об ошибках 0x02001003, 0x2006D080 и 0x0E064002.

Окружающая среда:

Windows NT x 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586 Apache/2.4.4 (Win32) PHP/5.4.13 x86 PHP Directory: E:\wamp\php\ Virtual Host Directory: E:\Projects\1\public_html 

Что я пытался:

  • Инструкции по установке http://www.php.net/manual/en/openssl.installation.php
  • extension=php_openssl.dll
  • Openssl.cnf E:\wamp\php\extras\openssl.cnf
  • % PATH% E:\wamp\php
  • Rebooted
  • phpinfo:
    —- Поддержка OpenSSL включена
    —- OpenSSL Library Version OpenSSL 1.0.1e 11 февраля 2013 г.
    —- OpenSSL Версия заголовка OpenSSL 0.9.8y 5 февраля 2013
  • С помощью и без указания конфигурации в configargs
  • С помощью и без указания <Directory E:\wamp\php\extras> в конфигурации apache
  • Скопировано openssl.cnf в virtualhost public_html, указав на это и по-прежнему получаю те же ошибки
  • Ничего не зарегистрировано в error_log
  • Исследовали: последние два дня я проводил исследование, удивляясь, что на нем больше нет информации, поэтому я размещаю здесь. Кажется, проблема связана с конфигурацией OpenSSL или apache / php, которая неправильно считывает конфигурацию.

Код:

 $privateKey = openssl_pkey_new(); while($message = openssl_error_string()){ echo $message.'<br />'.PHP_EOL; } 

Результаты:

 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 Вручную:

 E:\wamp\apache\bin>openssl.exe pkey WARNING: can't open config file: c:/openssl-1.0.1e/ssl/openssl.cnf E:\wamp\apache\bin>set OPENSSL_CONF="E:\wamp\php\extras\openssl.cnf" E:\wamp\apache\bin>openssl.exe pkey 3484:error:0200107B:system library:fopen:Unknown error:.\crypto\bio\bss_file.c:169:fopen('"E:\wamp\php\extras\openssl.cnf"','rb') 3484:error:2006D002:BIO routines:BIO_new_file:system lib:.\crypto\bio\bss_file.c:174: 3484:error:0E078002:configuration file routines:DEF_LOAD:system lib:.\crypto\conf\conf_def.c:199: 

РЕДАКТИРОВАТЬ:

  1. Благодаря @Gordon теперь я могу видеть ошибки openssl_error_string с помощью openssl_error_string
  2. Полностью удалить EasyPHP. Вручную установлены стабильные версии PHP / Apache. Те же результаты! Определенно, что-то я делаю неправильно с внедрением openssl в windows.
  3. OpenSSL Вручную раздел … дополнительная информация об ошибке

ПОСЛЕДНИЕ МЫСЛИ:
Я установил linux box, и я получаю те же ошибки. После некоторого разговора я вижу, что, хотя он вызывает ошибки в openssl_pkey_new, он в конечном итоге создает мой тестовый файл p12. Короче говоря, ошибки вводят в заблуждение, и ему приходится больше разбираться в том, как вы используете функции openssl не столько для конфигурации на стороне сервера.

Итоговый код:

 // Create the keypair $res=openssl_pkey_new(); // Get private key openssl_pkey_export($res, $privkey); // Get public key $pubkey=openssl_pkey_get_details($res); $pubkey=$pubkey["key"]; // Actual file $Private_Key = null; $Unsigned_Cert = openssl_csr_new($Info,$Private_Key,$Configs); $Signed_Cert = openssl_csr_sign($Unsigned_Cert,null,$Private_Key,365,$Configs); openssl_pkcs12_export_to_file($Signed_Cert,"test.p12",$Private_Key,"123456"); 

Рядом.

Год спустя…

Таким образом, я обнаружил, что делаю это снова год спустя, и независимо от любых переменных PATH, которые я установил на компьютере или во время выполнения сценария, он не обнаружил ошибки в файле. Я смог его разрешить, передав параметр config в массиве openssl_pkey_new в openssl_pkey_new . Вот функция, которая проверяет возможность успешного использования OpenSSL:

  /** * Tests the ability to 1) create pub/priv key pair 2) extract pub/priv keys 3) encrypt plaintext using keys 4) decrypt using keys * * @return boolean|string False if fails, string if success */ function testOpenSSL($opensslConfigPath = NULL) { if ($opensslConfigPath == NULL) { $opensslConfigPath = "E:/Services/Apache/httpd-2.4.9-win32-VC11/conf/openssl.cnf"; } $config = array( "config" => $opensslConfigPath, "digest_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); $res = openssl_pkey_new($config); // <-- CONFIG ARRAY if (empty($res)) {return false;} // Extract the private key from $res to $privKey openssl_pkey_export($res, $privKey, NULL, $config); // <-- CONFIG ARRAY // Extract the public key from $res to $pubKey $pubKey = openssl_pkey_get_details($res); if ($pubKey === FALSE){return false;} $pubKey = $pubKey["key"]; $data = 'plaintext data goes here'; // Encrypt the data to $encrypted using the public key $res = openssl_public_encrypt($data, $encrypted, $pubKey); if ($res === FALSE){return false;} // Decrypt the data using the private key and store the results in $decrypted $res = openssl_private_decrypt($encrypted, $decrypted, $privKey); if ($res === FALSE){return false;} return $decrypted; } // Example usage: $res = testOpenSSL(); if ($res === FALSE) { echo "<span style='background-color: red;'>Fail</span>"; } else { echo "<span style='background-color: green;'>Pass: ".$res."</span>"; } 

Приведенный ниже код работает как ожидалось. НО, если вы запустили openssl_error_string() после методов openssl, он показывает error:0E06D06C:configuration file routines:NCONF_get_string:no value которое является некоторым уведомлением, на которое я не смог найти документацию.

Обратите внимание, что в соответствии с http://www.php.net/manual/en/function.openssl-error-string.php вы можете видеть ошибочные ошибки, поскольку сообщения об ошибках помещаются в очередь:

Будьте внимательны при использовании этой функции для проверки ошибок, поскольку она, как представляется, считывает из буфера> ошибки, которые могут включать ошибки из другого сценария или процесса, который использует функции openssl>. (Я был удивлен, обнаружив, что он сохранял сообщения об ошибках до того, как я вызвал любые функции> openssl_ *)

 <?php /* Create the private and public key */ $res = openssl_pkey_new(); openssl_error_string(); // May throw error even though its working fine! /* Extract the private key from $res to $privKey */ openssl_pkey_export($res, $privKey); openssl_error_string(); // May throw error even though its working fine! /* Extract the public key from $res to $pubKey */ $pubKey = openssl_pkey_get_details($res); $pubKey = $pubKey["key"]; $data = 'i.amniels.com is a great website!'; /* Encrypt the data using the public key * The encrypted data is stored in $encrypted */ openssl_public_encrypt($data, $encrypted, $pubKey); /* Decrypt the data using the private key and store the * result in $decrypted. */ openssl_private_decrypt($encrypted, $decrypted, $privKey); echo $decrypted; ?> 

несколько вещей здесь:

%PATH% также должно содержать окна и system32, поэтому ваш% PATH% должен выглядеть так c:\windows;c:\windows\system32;E:\wamp\php и в e:\wamp\php должен быть файл dll openssl

также попробуйте версию openssl, соответствующую версии заголовка 0.9.8y 5 Feb 2013 скачать здесь для 32bit и здесь для 64bit

этот код работает для меня:

 // Create the keypair $res=openssl_pkey_new(); // Get private key openssl_pkey_export($res, $privkey); // Get public key $pubkey=openssl_pkey_get_details($res); $pubkey=$pubkey["key"]; $Info = array( "countryName" => "UK", "stateOrProvinceName" => "Somerset", "localityName" => "Glastonbury", "organizationName" => "The Brain Room Limited", "organizationalUnitName" => "PHP Documentation Team", "commonName" => "Wez Furlong", "emailAddress" => "wez@example.com" ); // Actual file $Private_Key = null; $Unsigned_Cert = openssl_csr_new($Info,$Private_Key); $Signed_Cert = openssl_csr_sign($Unsigned_Cert,null,$Private_Key,365); openssl_pkcs12_export_to_file($Signed_Cert,"test.p12",$Private_Key,"123456"); 

У меня была аналогичная проблема, для меня это помогло установить переменную окружения «OPENSSL_CONF» вручную в начале моего скрипта.

Как-то переменная среды была установлена ​​неправильно или не прошла до моего php (Setup: AMPPS, Win7 64Bit).

Пример, используемый ниже, – это путь, который вы должны использовать со стандартной установкой AMPPS, поэтому, если вы используете AMPPS, просто скопируйте и вставьте:

 putenv("OPENSSL_CONF=C:\Program Files (x86)\Ampps\php\extras\openssl.cnf"); 

Вы установили OpenSSL с помощью этого метода? Установка OpenSSL в Windows

  1. Перейдите на страницу http://gnuwin32.sourceforge.net/packages/openssl.htm и загрузите «Setup» версию «Binaries», openssl-0.9.7c-bin.exe.

  2. Дважды щелкните по openssl-0.9.7c-bin.exe, чтобы установить каталог OpenSSL в \ local \ gnuwin32.

  3. Вернитесь на ту же страницу, загрузите «Setup» версию «Документация» и установите ее в тот же каталог.

  4. Откройте окно командной строки и попробуйте выполнить следующую команду: Код:

  \local\gnuwin32\bin\openssl -help openssl:Error: '-help' is an invalid command. Standard commands asn1parse ca ciphers crl crl2pkcs7 dgst dh dhparam dsa dsaparam enc engine errstr gendh gendsa genrsa nseq ocsp passwd pkcs12 pkcs7 pkcs8 rand req rsa rsautl s_client s_server s_time sess_id smime speed spkac verify version x509 ...... 

Если вы видите список команд, напечатанных OpenSSL, вы знаете, что ваша установка выполнена правильно.

Если вы используете Apache 2.4 + mod_fcgid, вы можете указать FcgidInitialEnv файл OpenSSL, добавив FcgidInitialEnv в файл httpd.conf:

 # OPENSSL CONF FcgidInitialEnv OPENSSL_CONF "D:/apps/php70/extras/ssl/openssl.cnf" 

Я не использую предварительно сконфигурированный пакет, такой как WAMP, у меня есть Apache из Apache Lounge и PHP из windows.php.net и настроен мной.

Чистый раствор:

  1. Загрузите архив (не матовый, который) для двоичных файлов PHP Windows здесь: http://windows.php.net/download
  2. Внутри вы найдете файл /extras/ssl/openssl.cnf
  3. Извлечь openssl.cnf где-нибудь (например, «C: /WEB/PHP/extras/ssl/openssl.cnf»)
  4. Добавьте глобальную системную переменную OPENSSL_CONF с вашим используемым путем (например, «C: \ WEB \ PHP \ extras \ openssl.cnf» (без двойных кавычек)).

введите описание изображения здесь

Вы должны добавить путь к системной переменной OPENSSL_CONF . Добавление его в системную переменную Path недостаточно! В Windows 7 вы найдете диалог настроек в разделе «Панель управления> Система и безопасность> Система> Расширенные настройки системы (меню слева)> Дополнительно (вкладка)> Переменные среды …». Добавьте туда переменную OPENSSL_CONF .

Перед использованием файла openssl.cnf не требуется готовить файл – он будет работать из коробки. Но вы можете, если хотите точно настроить настройки.

В моем случае копирование файлов в c: \ windows \ system32 помогло мне

libeay32.dll, ssleay32.dll

Их можно найти в OpenSSL_INSTALL_PATH \ bin.

Могу я предложить использовать Virtual Box , создать виртуальную машину и установить стек LAMP. Это даст вам «более реальную» среду. Как и устранение неполадок, OpenSSL проще в Linux.

С учетом сказанного, я считаю, что ваша проблема заключается в том, что вы не можете найти сам файл плагина. Удостоверьтесь, что он живет на правильном пути и существует на вашем компьютере, а процесс Apache работает под правами для его чтения.