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

Что я've Попытка:

Инструкция по установке http://www.php.net/manual/en/openssl.installation.phpphp.ini extension=php_openssl.dllopenssl.cnf E:\wamp\php\extras\openssl.cnf%ДОРОЖКА% E:\wamp\phpRebootedphpinfo:

---- поддержка OpenSSL включена

---- Версия библиотеки OpenSSL OpenSSL 1.0.1e 11 февраля 2013 г.

---- Версия OpenSSL для заголовков OpenSSL 0.9.8y 5 февраля 2013С указанием и без указанияконфиг вconfigargsС указанием и без указания в конфиге apacheскопированныйopenssl.cnf на virtualhost public_html, указал на это и все равно получит те же ошибкиНичего не залогиненожурнал ошибокИсследовал: ямы провели последние 2 дня, исследуя это, удивившись, что нетбольше информации об этом, так что ям размещать здесь. Кажется, проблема с конфигурацией 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:

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

Благодаря @Gordon теперь я вижу ошибки open_ssl, используяopenssl_error_stringПолностью удалите EasyPHP. Установленные вручную стабильные версии PHP / Apache. Те же результаты! Определенно что-то яя делаю неправильно с реализацией openssl на окнах.Раздел OpenSSL Manually ... дополнительная информация об ошибке

ПОСЛЕДНИЕ МЫСЛИ:

Я установил коробку Linux, и яЯ получаю те же ошибки. После некоторой игры я вижу это, хотя этоs выдает ошибки в 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 параметр вconfig_args массив в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); // 

Ответы на вопрос(8)

Ваш ответ на вопрос