Как отправить запрос curl с сертификатом pem через PHP?
У меня есть PHP скрипт на моем сервере Apache, которому необходимо отправить запрос на завивание на сервер-партнер.
Партнер дайте мне файл .pem, который я должен подключить к каждому звонку, который я делаю, к его api.
Мой php script следующий:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLCERT, "test.pem" );
curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
if(!$result)
{
echo "Curl Error: " . curl_error($ch);
}
else
{
echo "Success: ". $result;
}
curl_close($ch);
Он возвращает:
Ошибка Curl: невозможно установить файл закрытого ключа: тип test.pem PEM
Учтите, что он отправляет мне файл .pem и говорит "у него нет кодовой фразы"
Ответы
Ответ 1
Я думаю, что вам нужно использовать tmpfile() и stream_get_meta_data.
$pemFile = tmpfile();
fwrite($pemFile, "test.pem");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath = $tempPemPath['uri'];
curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath);
Источник: Этот ответ здесь в SO помогает мне с аналогичной проблемой.
Ответ 2
Я думаю, что тебе не хватает
curl_setopt($ch, CURLOPT_CAINFO, 'test.pem');
Посмотрите cURL не может использовать клиентский сертификат на локальном сервере
более подробно об использовании клиентских сертификатов в curl через PHP