2017-01-20 6 views
0

Это моя установка среды:Как исправить ошибку PHP: невозможно получить сертификат локального эмитента?

Mac OS Sierra (10.12.2) 
XAMPP 5.6.23 
PHP 5.6.23 

Я использую версию PHP, которая входит в XAMPP:

$ which php 
/Applications/XAMPP/bin/php 
$ php -v 
PHP 5.6.23 (cli) (built: Jun 24 2016 09:25:00) 
Copyright (c) 1997-2016 The PHP Group 
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies 

Это мой PHP код:

$postData = array('FORM_DATA' => 'data'); 
    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_URL => 'https://testhub.banregio.com/adq', 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_POST => true, 
     CURLOPT_POSTFIELDS => $postData, 
     CURLOPT_FOLLOWLOCATION => true 
)); 

    $response = curl_exec($curl); 
    $err = curl_error($curl); 
    echo $response; 
    echo $err; 
    curl_close($curl); 

Я уже добавила следующую строку в файл php.ini и, конечно же, загрузила файл cacert.pem с https://curl.haxx.se/ca/cacert.pem:

curl.cainfo=/Applications/XAMPP/xamppfiles/etc/cacert.pem 

Мой файл php.ini находится в:

$ php --ini 
Configuration File (php.ini) Path: /Applications/XAMPP/xamppfiles/etc 
Loaded Configuration File:   /Applications/XAMPP/xamppfiles/etc/php.ini 
Scan for additional .ini files in: (none) 
Additional .ini files parsed:  (none) 

Не работает. Я не могу установить CURLOPT_SSL_VERIFYPEER в false.

Далее я добавил эти варианты cURL в приведенном выше коде:

CURLOPT_SSL_VERIFYPEER => true, 
CURLOPT_SSL_VERIFYHOST => 2, 
CURLOPT_CAINFO => '/path/to/my/exported/certificate.crt' 

Сайт имеет следующий сертификат:

enter image description here

Конечно, я должен был экспортировать его из Доступ к брелокам:

enter image description here

Доступ к брелокам можно экспортировать *.pem и *.cer сертификатов. Я попробовал оба. Фактически, я переименовал сертификат *.cer в *.crt.

Не работает.

+0

Это, как правило, является симптомом сервер не обеспечивает его промежуточный сертификат в рукопожатии TLS. –

+0

Использование запросов Python или даже работы Postman. Разве это не что-то, что связано с PHP? –

+0

Подтвердите, что ни один из этих http://stackoverflow.com/search?q=Unable+to+get+local+issuer+certificate не помог. Это может помочь, если вы укажете, какую библиотеку ssl вы используете. –

ответ

-1

О местном вы можете просто отключить SSL (пожалуйста, не пытайтесь повторить это на производственных серверах.)

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0); 
+0

Я не могу использовать эти параметры. –