使用cURL和PHP发送客户端证书

使用cURL和PHP发送客户端证书,php,curl,ssl,ssl-certificate,client-certificates,Php,Curl,Ssl,Ssl Certificate,Client Certificates,我正在尝试向需要身份验证的URL发送一个cURL请求。但是,我在发送客户端证书时遇到问题 返回的错误为 unable to set private key file: 'privkeyfile.pem' type PEM 脚本如下所示: $url = "correcturltosendrequest.com"; $post_string = "string of SOAP tags"; $keyFile = realpath("privkeyfile.pem"); $caFile = rea

我正在尝试向需要身份验证的URL发送一个cURL请求。但是,我在发送客户端证书时遇到问题

返回的错误为

unable to set private key file: 'privkeyfile.pem' type PEM
脚本如下所示:

$url = "correcturltosendrequest.com";
$post_string = "string of SOAP tags";

$keyFile = realpath("privkeyfile.pem");
$caFile = realpath("cafile.pem");
$certFile = realpath("pubkeyfile.pem");
$certPass = "pasword";

$soap_do = curl_init(); 
curl_setopt($soap_do, CURLOPT_URL,            $url );   
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSLKEY, $keyFile);
curl_setopt($soap_do, CURLOPT_CAINFO, $caFile);
curl_setopt($soap_do, CURLOPT_SSLCERT, $certFile);
curl_setopt($soap_do, CURLOPT_SSLCERTPASSWD, $certPass);
curl_setopt($soap_do, CURLOPT_POST,           true ); 
curl_setopt($soap_do, CURLOPT_POSTFIELDS,    $post_string); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($post_string) )); 

$result = curl_exec($soap_do);
$err = curl_error($soap_do); 
我的谷歌搜索告诉我,这可能是脚本无法访问所讨论的文件(realpath返回完全正确的路径。已设置所有人都可以访问该文件夹。如果有影响,请立即在EasyHP中运行)

或者我只是把这些证书文件弄错了。不幸的是,我对pem文件的了解充其量是有限的

我可以使用以下PEM文件:

  • 公钥
  • 私钥
  • 根约
  • 中间钙

任何帮助或建议都将不胜感激。

如果您运行
var\u dump(file\u exists($keyFile)),您会得到什么布尔(真)。另外,只要回显$keyFile,就可以返回文件的正确完整路径,并且该文件绝对可以访问,这可以通过is_readable()证明;