如何解决错误“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:没有这样的过程”?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决错误“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:没有这样的过程”?相关的知识,希望对你有一定的参考价值。
对不起,如果问题很愚蠢,但我是这方面的新手。我需要从Drupal 7站点通过SSL连接到服务。我有一个扩展名为“.p12”的文件和密码。另外,我使用php 7.1 1和Windows 7 64x。我使用以下命令将.p12文件转换为.pem文件。
openssl pkcs12 -in myfile.p12 -out myfile.pem
在我将Openssl安装到计算机并添加到Windows的路径之前。之后,我尝试使用以下代码使用CURL函数连接到服务器。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'my_addr');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSLCERT, 'myfile.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'mypsw');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
if ($result === FALSE){
$curl_error = curl_error($ch);
}
curl_close($ch);
不幸的是,curl_exec返回FALSE,curl_error返回以下内容:
could not load PEM client certificate, OpenSSL error error:02001003:system library:fopen:No such process, (no key found, wrong pass phrase, or wrong file format?)
我决定在Linux共享主机上的客户端站点上执行此代码,而我的localhost在Windows 7 64x上运行。代码执行没有任何错误,但curl_exec返回一个void字符串。
我想澄清一下,我做错了什么以及为什么PEM客户端证书不想加载?我应该怎么做我的localhost来解决这个问题?我不能放弃使用Windows 7而是开始使用Linux而不是它。
对于SSL验证,您需要一个pem格式的证书,它是相关的私钥(以openssl格式)和以pem格式签署证书的证书授权的根证书。
检查这个完整的样本:
如果您没有得到通知但是它说出错误消息并不是很清楚:
无法加载PEM客户端证书,OpenSSL错误错误:02001003:系统库:fopen:没有这样的进程,(没有找到密钥,错误的密码短语或错误的文件格式?)
问候,
我敢打赌,如果你改变它,错误会更容易理解
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'my_addr');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$pem=realpath("myfile.pem");
if(!$pem || !is_readable($pem)){
die("error: myfile.pem is not readable! realpath: "{$pem}" - working dir: "".getcwd()."" effective user: ".print_r(posix_getpwuid(posix_geteuid()),true));
}
curl_setopt($ch, CURLOPT_SSLCERT, $pem);
..很可能是php运行的帐户无法读取pem文件(例如,如果您以root身份创建文件,并且所有者是root:root,权限是a-r
,而php是在www-data
帐户下运行),另一个解释是文件显示不存在 - 另一种解释是你在运行curl_exec()之前运行chdir(),并且因为你正在使用相对文件路径,所以在运行curl_exec时相对路径不再有效( )(但使用realpath(),就像我上面所做的那样,解决了最后一期)
以上是关于如何解决错误“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:没有这样的过程”?的主要内容,如果未能解决你的问题,请参考以下文章