cURL не может использовать клиентский сертификат, на локальном сервере

Я установил локальный сервер с помощью XAMPP. У меня есть два PHP-скрипта, отправитель и получатель. Я пытаюсь отправить XML-файл от отправителя к получателю, используя HTTP over SSL (HTTPS).

Я создал собственный сертификат, настроенный XAMPP, и я использую этот код для моего отправителя:

<?php /* * XML Sender/Client. */ // Get our XML. You can declare it here or even load a file. $xml = file_get_contents("data.xml"); // We send XML via CURL using POST with a http header of text/xml. $ch = curl_init(); //curl_setopt($ch, CURLOPT_SSLVERSION,3); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd().'ipm.crt'); curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'ipm.pem'); curl_setopt($ch, CURLOPT_SSLCERTPASSWD,'pass'); //i use this line only for debugging through fiddler. Must delete after done with debugging. curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888'); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "https://ipv4.fiddler/iPM/receiver.php"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_REFERER, 'https://ipv4.fiddler/iPM/receiver.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ch_result = curl_exec($ch); echo "Result = ".$ch_result; echo 'Curl error: ' . curl_error($ch); curl_close($ch); // Print CURL result. ?> 

Однако я всегда получаю эту ошибку: ошибка Curl error: unable to use client certificate (no key found or wrong pass phrase?) удается Curl error: unable to use client certificate (no key found or wrong pass phrase?)

Что я могу сделать неправильно? Ключевая фраза – это слово pass .

Я создал свой .crt, выполнив:

 openssl req -config openssl.cnf -new -out ipm.csr -keyout ipm.pem openssl rsa -in ipm.pem -out ipm.key openssl x509 -in ipm.csr -out ipm.crt -req -signkey ipm.key -days 365 

Я не хочу, чтобы SSL_VERIFYPEER и SSL_VERIFYHOST были ложными.

Я думаю, что вы уже исправили свою проблему, но я вижу две проблемы:

  1. вы забыли про слэш между getcwd() и filename :
    curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/ipm.crt');
    curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/ipm.pem');
  2. вам нужно прикрепить ключевой файл, как уже было сказано @donparalias

Попробуйте обмениваться файлами так:

 curl_setopt($ch, CURLOPT_CAINFO, getcwd().'ipm.pem'); curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'ipm.crt'); 

Я подозреваю, что у вас их нет.

Ключ должен быть именем файла, а не парольной фразой.