调用openssl_pkey_new()时xampp openssl错误;

xen*_*dor 9 php windows xampp openssl

所以我试图让openssl在我的Windows安装xampp(1.7.3)上工作,这是用OpenSSL 0.9.8l构建的.这是我第二次在*amp安装上安装openssl但是第一次游泳(这是在同一台机器上的wamp安装,但我发现xampp更像是我的风格所以我切换了).

当我尝试一个简单的设置脚本时:

var_dump(getenv('OPENSSL_CONF'));
$privateKey = openssl_pkey_new();

while($message = openssl_error_string()){
    echo $message.'<br />'.PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

我收到了一条返回的消息:

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  
Run Code Online (Sandbox Code Playgroud)

我读了php.net页面,告诉我需要设置openssl.cnf和ssleay.dll环境常量的可能性,我试过但没有改变.

var_dumpOPENSSL_CONF导致的路径:C:/xampp/apache/bin/openssl.cnf这是我的机器是正确的.

我检查了php目录的路径(ssleay32.dll和libeay32.dll所在的位置)是在我的路径系统var中定义的,但它不是,所以我定义了它,重新启动了我的机器,并在此过程中重新启动了apache,但错误消息没有变化.

我的xampp版本没有附带php_openssl.dll,因此我相信php.ini文档应该将它从可用的.dll列表中排除,就像我检查时一样.我相信xampp会编译一个基于zend的扩展.

我能够从xampp gui启动openssl,并且我成功地创建了一个私钥/公钥对.

phpinfo()报道:

openssl OpenSSL支持启用
OpenSSL库版本OpenSSL
0.9.8l 2009年11月5日OpenSSL头版本OpenSSL 0.9.8l 2009年11月5日

我在我的系统目录中假设的wamp安装中有一个旧的ssleay.dll和libeay32.dll但是我已经将它们删除了.(重启后重启apache)

我试着将openssl.cnf复制到默认目录'C:\ usr\local\ssl\openssl.cnf'没有变化.

我也阅读了这个帖子和这个帖子,但给出的答案是相关的,但没有帮助或不存在.

任何人对我接下来要检查的内容或任何我错过的明显内容都有任何想法?

Arc*_*dix 13

也许你需要openssl.cnf在调用时指定文件的路径openssl_pkey_new():

$configArgs = array(
    'config' => '/etc/openssl/openssl.cnf',
    // ...
);
openssl_pkey_new($configArgs);
Run Code Online (Sandbox Code Playgroud)

您可能还需要指定其他设置$configArgs才能使功能正常工作(最近没有测试过).有关支持的其他配置参数的说明,另请参见http://php.net/manual/en/function.openssl-csr-new.php.


小智 5

您检查 xampp/apache/conf/extra/http-xampp.conf 中的 OPENSSL_CONF 变量

然后使用 xampp/apache_start.bat 而不是 XAMPP 控制面板启动 apache (奇怪的是,当从控制面板启动时它不起作用 [可能是当前目录问题])

适用于 Win7 64 位上的 XAMPP 1.7.4