Php OpenSSL在Windows上不工作,错误0x020001003 0x2006D080 0x0E064002
问题:OpenSSL在我的Windows环境中不工作。OpenSSL重复报告错误0x0201003、0x2006D080和0x0E064002 环境:Php OpenSSL在Windows上不工作,错误0x020001003 0x2006D080 0x0E064002,php,apache,apache2,openssl,easyphp,Php,Apache,Apache2,Openssl,Easyphp,问题:OpenSSL在我的Windows环境中不工作。OpenSSL重复报告错误0x0201003、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:\Projec
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
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
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:
我的尝试:
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
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
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:
- 安装说明
- PHP.ini
extension=PHP\u openssl.dll
- Openssl.cnf
E:\wamp\php\extras\Openssl.cnf
- %PATH%
E:\wamp\php
- 重新启动
- phpinfo:
----已启用OpenSSL支持
----OpenSSL库版本OpenSSL 1.0.1e 2013年2月11日
----OpenSSL标头版本OpenSSL 0.9.8y 2013年2月5日 - 在
configargs
- 在apache配置中指定和不指定
- 已将
复制到virtualhost public_html,指出了这一点,但仍然会收到相同的错误openssl.cnf
- 未登录任何内容错误\u日志
- 研究:我花了两天时间研究这个,很惊讶没有更多的信息,所以我在这里发布。OpenSSL配置或apache/php没有正确读取配置似乎有问题
$privateKey = openssl_pkey_new();
while($message = openssl_error_string()){
echo $message.'<br />'.PHP_EOL;
}
手动打开SSL:
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
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
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:
编辑:
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
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
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:
openssl\u error\u string
我设置了一个linux机器,但我得到了相同的错误。在玩了一些游戏之后,我发现即使它在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");
靠近。
一年后…
所以我发现自己在一年后又这样做了,不管我在计算机上或脚本执行期间设置了什么路径变量,它都会不断地出现关于找不到文件的错误。我可以通过在openssl\u pkey\u new
中的config\u args
数组中传递config
参数来解决这个问题。下面是一个测试成功使用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>";
}
/**
*测试1)创建pub/priv密钥对2)提取pub/priv密钥3)使用密钥加密明文4)使用密钥解密的能力
*
*@return boolean |失败时字符串为False,成功时字符串为False
*/
函数testOpenSSL($opensslConfigPath=NULL)
{
if($opensslConfigPath==NULL)
{
$opensslConfigPath=“E:/Services/Apache/httpd-2.4.9-win32-VC11/conf/openssl.cnf”;
}
$config=array(
“config”=>$opensslConfigPath,
“摘要”=>“sha512”,
“私钥位”=>4096,
“私钥类型”=>OPENSSL密钥类型RSA,
);
$res=openssl\u pkey\u new($config);//下面的代码按预期工作。但是如果在openssl方法之后运行openssl\u error\u string()
,它会显示error:0E06D06C:configuration file routines:nConof\u get\u string:no value
,这是我无法找到文档的注意事项
进一步注意,根据您的报告,当错误消息排队时,您可能会看到错误引导错误:
使用此函数检查错误时要小心,因为它似乎是从>错误的缓冲区中读取的,其中可能包括来自使用openssl>函数的另一个脚本或进程的错误。(我惊讶地发现,在调用任何>openssl_*函数之前,它都会返回错误消息)
下面的代码按预期工作。但是如果在openssl方法之后运行openssl\u error\u string()
,它会显示错误:0E06D06C:配置文件例程:NCONF\u get\u string:no value
,这是我无法找到相关文档的注意事项
进一步注意,根据您的报告,当错误消息排队时,您可能会看到错误引导错误:
使用此函数检查错误时要小心,因为它似乎是从>错误的缓冲区中读取的,其中可能包括来自使用openssl>函数的另一个脚本或进程的错误。(我惊讶地发现,在调用任何>openssl_*函数之前,它都会返回错误消息)
您是否通过此方法安装了OpenSSL?
在Windows上安装OpenSSL
转到并下载“二进制文件”的“安装”版本openssl-0.9.7c-bin.exe
双击openssl-0.9.7c-bin.exe将openssl安装到\local\gnuwin32目录
返回同一页面,下载“文档”的“安装”版本,并将其安装到同一目录
打开“命令行”窗口,然后尝试以下命令:
代码:
\local\gnuwin32\bin\openssl-help
openssl:错误:'-help'是无效命令。
标准命令
ASN1解析ca密码crl crl2pkcs7
dgst dh dhparam dsa dsa dsaparam
enc发动机errstr gendh gendsa
genrsa nseq ocsp密码pkcs12
pkcs7 pkcs8随机请求rsa
rsautl s_客户端s_服务器s_时间sess_id
smime speed spkac验证版本
x509
......
如果您看到OpenSSL打印的命令列表,您可以