如何解决错误“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:无此过程”?

Yak*_*man 7 php curl openssl drupal-7

如果这个问题很愚蠢,请问我,但是我是这个领域的新手。我需要从Drupal 7站点通过SSL连接到服务。我有一个带有“ .p12”扩展名的文件和一个密码。另外,我使用PHP 7.1 1和Windows 7 64x。我使用以下命令将.p12文件转换为.pem文件。

openssl pkcs12 -in myfile.p12 -out myfile.pem 
Run Code Online (Sandbox Code Playgroud)

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

不幸的是,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?)
Run Code Online (Sandbox Code Playgroud)

我决定在客户端站点上的Linux共享主机上执行此代码,而我的本地主机在Windows 7 64x上运行。执行该代码没有任何错误,但是curl_exec返回一个空字符串。

我想说明一下,我在做什么错,为什么不想加载PEM客户端证书?我应该如何在本地主机上解决此问题?我不能放弃使用Windows 7,而是开始使用Linux。

小智 3

对于 SSL 验证,您需要 pem 格式的证书、关联的私钥(openssl 格式)以及以 pem 格式签署您的证书的证书颁发机构的根证书。

检查这个完整的样本:

PHP:CURLOPT_SSLCERT 的路径

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

无法加载 PEM 客户端证书,OpenSSL 错误 error:02001003:system library:fopen:No such process,(找不到密钥、密码错误或文件格式错误?)

问候,