Как отправить запрос curl с сертификатом pem через PHP?

У меня на сервере Apache есть php-скрипт, которому необходимо отправить запрос на завиток на сервер партнера. Партнер дайте мне файл .pem, который я должен подключить к каждому звонку, который я делаю, к его api.

Мой PHP-скрипт следующий:

$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-файл и говорит: «у него нет кодовой фразы»,

Я думаю, что вам нужно использовать 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 помогает мне с аналогичной проблемой.

Я думаю, что вам не хватает curl_setopt($ch, CURLOPT_CAINFO, 'test.pem'); Посмотрите, что cURL не может использовать клиентский сертификат, на локальном сервере, чтобы больше узнать об использовании клиентских сертификатов в curl через PHP