2015-01-19 4 views
0

Эта ошибка присутствует только на моем веб-сервере в Интернете. Я использую обновленный cacert.pem и ссылаюсь на него в моем файле php.ini на моем сервере localhost.Ошибка сертификата SSL не может получить сертификат местного эмитента

Вопрос в том, как это можно сделать на типичном веб-сервере? (По тому, как я имею в виду ссылки на cacert.pem через php.ini)

Кроме того, есть ли способ я могу определить его в моей функции или Mailchimps функции API, которые я использую, который был установлен с помощью композитора?

Моя текущая функция:

bootstrap.php 
require_once __DIR__ . '\..\..\lib\Cake\Network\Http\HttpSocket.php'; 

Контроллер:

//////////////////////////MAILCHIMP/////////////////////// 
       $Socket = new HttpSocket(array('ssl_cafile' => CAKE . 'Config' . DS . 'cacert.pem',  )); 
       $api_key = "xxxxxxxxxxxxxxxxxxxxxxxx"; 
       $list_id = "xxxxxxxxx"; 

       $merge_vars = array('FNAME'=>$this->request->data['Subscriber']['first_name'], 'LNAME'=>$this->request->data['Subscriber']['last_name']); 

       $Mailchimp = new Mailchimp($api_key); 
       $Mailchimp_Lists = new Mailchimp_Lists($Mailchimp); 
       $subscriber = $Mailchimp_Lists->subscribe($list_id, array('email' => $this->request->data['Subscriber']['email']), $merge_vars); 
///////////////////////////////////////////////////////////// 
+0

Возможный дубликат [Ошибки SSL с использованием API MailChimp] (http://stackoverflow.com/questions/22973701/ssl-errors-using-mailchimps-api) –

ответ

0

Пожалуйста, обратите внимание, что это справедливо только для PHP> = 5.6.0 и будет работать автоматически

Вы можете использовать ini_set('openssl.cafile', '/path/to/cacert'); (http://php.net/manual/en/context.ssl.php#context.ssl.cafile) внутри вашего кода, если у вас нет доступа к изменению файла php.ini на сервере (вы можете узнать больше здесь: https://wiki.php.net/rfc/tls-peer-verification).

Если вам нужно проверить установленное в данный момент местоположение вашего файла, вы можете использовать openssl_get_cert_locations.

Если вы используете PHP < 5.6.0

Вы, возможно, потребуется расширить Mailchimp класс:

class MailchimpWithTLS extends Mailchimp { 
    public function __construct($apikey=null, $opts=array()) { 
     // Build the Mailchimp object normally 
     parent::__construct($apikey=null, $opts); 

     // Set the peer verification cURL fields 
     curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1); 
     curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 2); 
     curl_setopt($this->ch, CURLOPT_CAINFO, $opts['cafile']); 
    } 
} 

и инициализировать его, передав местоположение cafile конструктору в качестве опции:

$Mailchimp = new MailchimpWithTLS($api_key , array('cafile' => CAKE . 'Config' . DS . 'cacert.pem')); 
0

После разговора с некоторыми друзьями я узнал, что мой хост веб-сервера r uns cPanel, который имеет простой установщик сертификатов SSL.

Я не могу прокомментировать другой ответ, предоставленный Rasclatt, так как я его не пробовал. Однако это звучит очень всеобъемлющим.

Для тех, у кого есть эта проблема - проверьте, работает ли ваш хостер с программным обеспечением cPanel - и это так же просто, как несколько кликов.

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