问题:
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
我尝试过的
extension=php_openssl.dll
E:\wamp\php\extras\openssl.cnf
E:\wamp\php
phpinfo:
-—已启用OpenSSL支持
-— OpenSSL库版本OpenSSL 1.0.1e 2013年2月11日
-— OpenSSL标头版本OpenSSL 0.9.8y 2013年2月5日
在有和没有指定 config的 情况下configargs
<Directory E:\wamp\php\extras>
在apache配置中指定openssl.cnf
到virtualhost public_html,指出并仍然得到相同的错误码:
$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:
编辑:
openssl_error_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");
靠近
一年后…
因此,我发现自己在一年后再次执行此操作,无论我在计算机上或在脚本执行期间设置了什么PATH变量,它始终会导致找不到文件的错误。通过在中传递数组中的config
参数,我能够解决它。这是一个测试成功使用OpenSSL的功能的函数:config_args``openssl_pkey_new
/**
* 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/zh-CN/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;
?>
问题内容: 我正在按照以下说明使用Python绑定安装的OpenCV 2.4 。 我的问题与此类似,但我需要Windows计算机解决方案。 问题:当我尝试使用时 它工作正常,但是以下代码 始终返回False。 文件路径正确,绝对且没有空格。 我在装有Windows XP和Windows 7的两台机器上进行了尝试,结果相似。在Linux(Ubuntu)上,它对我来说很好用。 问题答案: 添加到Win
npm错误!有效得安装目标: npm错误![“0.1.0”,“0.1.1”,“0.1.2”,“0.1.3”,“0.1.4”] npm错误!在installTargetsError(C:\Program Files(x86)\nodejs\node_modules\ S:698:17) npm错误!在C:\Program Files(x86)\nodejs\node_module\npm\lib\c
问题内容: 我在Linux上开发了我的应用程序,并且AJAX请求工作正常。我已经将应用程序拉到Windows机器上,但是AJAX请求失败,我刚收到403Forbidden错误。从网上看,我认为这是csrf令牌的问题。在Linux中,我可以在AJAX请求的Cookies下看到。我没有在Windows中设置任何cookie。 这是我用来获取csrf cookie的Javascript代码。来自http
每当我的代码出错时。。我在浏览器上看到的只是一个空白的白页。没有错误。没有什么 所以这里有另一个问题要处理...我仍然没有显示错误。我只想展示一些有意义的错误...我还能尝试什么? *更新* 我按照上面错误消息中的建议遵循了此指南。我得到了非常积极的回应; 因此,我再次尝试运行。我得到了这样的回应; 很好,对吗?但是,当加载脚本时,我仍然会看到一个空白的白色页面,其中有一个错误。为什么?
我在Ubuntu上使用bash运行最新的稳定窗口,通过cmder wslbridge运行(我尝试直接通过bash运行,但错误相同)。移动到基于windows的react-native文件夹并尝试运行一些cli,如、、总是产生错误; 而令人惊讶的是,其他一些命令如npm可以正常启动... 国家预防机制将其打印出来;
我根据参考指南 http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-application-property-files 设置了一个 Spring Boot 1.3.0 应用程序。在OS X上一切正常,文件从当前目录加载。表达式已正确解