2016-06-28 4 views
4

Я вижу тонны почты в SO, об ошибке:сертификат Закрепление с PHP Curl

SSL certificate problem: unable to get local issuer certificate 

И который является один я получаю.

Все их ответ просто говоря, скачать корневые сертификаты:

https://curl.haxx.se/ca/cacert.pem

И установка в CURLOPT_CAINFO или настройки php.ini-х curl.cainfo.

Но это на самом деле просто говорит cURL доверять списку корневого ЦС и доверенного ЦС.

С моей точки зрения, сертификат Pinning должен игнорировать все эти корневые ЦС и доверять только одному сертификату конкретного поставщика.

Каков правильный способ исправить эту ошибку?

$ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   
    curl_setopt($ch, CURLOPT_CAINFO, '/etc/httpd/static.gc.apple.com.pem'); 
    curl_setopt($ch, CURLOPT_CAPATH, '/etc/httpd/'); 

    //curl_setopt($ch, CURLOPT_PINNEDPUBLICKEY, "sha256//TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg="); 
    $sslCertificate = curl_exec($ch); 

Я знаю, что для самого Libcurl, он имеет опцию «CURLOPT_PINNEDPUBLICKEY», который бы абсолютно то, что мне нужно, но в настоящее время PHP до сих пор не поддерживает его ... (это не такая константа в PHP и я не знаю, каково фактическое значение константы)

+0

Всегда можно попробовать использовать целочисленное значение 'CURLOPT_PINNEDPUBLICKEY', определенное библиотекой curl, даже если PHP не предоставляет эквивалентную константу, проверьте [заголовок curl] (https://github.com/curl/curl/ blob/master/include/curl/curl.h) для значений. Убедитесь, что PHP использует версию cURL, которая поддерживала бы ее. – apokryfos

+0

Чтобы следовать @ точке apokryfos'S, значение 'CURLOPT_PINNEDPUBLICKEY' 230, следовательно, попробуйте: ' curl_setopt ($ ч, 230, "sha256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg ="); ' – Carey

+0

@Carey Из того, что я прочитал в завиток заголовок, который опубликовал apokryfos, значение 10230. Поскольку STRINGPOINT - 10000. Но в любом случае это не сработало. Я не вижу никаких изменений после его применения, я могу подключиться к любому серверу https. Но я подтвердил, что версия cURL - 7.49.1, которая должна поддерживаться. И использование команды curl: curl --pinnedpubkey "sha256 // TeyzGG/8dvpuksAeSCb3tsvLEHbY6w9q63tXhOIf0Tg =" --url https://google.ca также дал мне правильную ошибку. –

ответ

0

В основном проблема заключается в том, что сам PHP, установленный с yum из Remi, не скомпилирован с завитки и openssl, которые его поддерживают. Итак, мы должны обновить curl, openssl, скомпилировать PHP из источника, и это сработало.

+0

Я пробовал это даже с последним PHP (7.0.11), у которого есть завиток, построенный с помощью curl 7.50.1. Поддержка создания сертификатов теперь встроена, поэтому определяется CURLOPT_PINNEDPUBLICKEY (10230) и т. Д., Но даже если я устанавливаю фиксацию сертификата, я все равно получаю такую ​​же проблему с Got error 60 - SSL: невозможно получить сертификат локального эмитента 'ошибка как набор для закрепления witout. Должен ли я получить конкретный ключ «curl: (90) SSL: открытый ключ не соответствует зафиксированному открытому ключу!», Если отпечаток пальца был бы неправильным? – hpuiu

 Смежные вопросы

  • Нет связанных вопросов^_^