如何解决错误“无法加载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格式签署证书的证书授权的根证书。

检查这个完整的样本:

PHP:path of CURLOPT_SSLCERT

如果您没有得到通知但是它说出错误消息并不是很清楚:

无法加载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:没有这样的过程”?的主要内容,如果未能解决你的问题,请参考以下文章

"SQL SERVER,错误:207" 如何解决

如何解决“错误:输入中的语法错误(1)。”

如何解决此分段错误:以下代码的 11 错误?

如何解决子重复错误?

Ftp 错误代码 550,如何解决

这是啥覆盖错误,我该如何解决? [复制]