SSL证书错误无法获取本地颁发者证书

时间:2015-01-19 22:24:49

标签: php cakephp ssl mailchimp

此错误仅出现在我的网络服务器上。我正在使用更新的cacert.pem并在我的localhost服务器的php.ini文件中引用它。

我的问题是如何在典型的Web服务器上完成此操作? (我的意思是指通过cacert.pem引用php.ini

或者有一种方法可以在我的函数中定义它,或者我使用的 Mailchimps API函数是通过 composer 安装的吗?

我目前的职能:

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);
/////////////////////////////////////////////////////////////

2 个答案:

答案 0 :(得分:0)

请注意,这仅适用于PHP> = 5.6.0,并且会自动生效

如果您无权修改服务器上的ini_set('openssl.cafile', '/path/to/cacert');文件,则可以在代码中使用php.inihttp://php.net/manual/en/context.ssl.php#context.ssl.cafile)(您可以在此处阅读更多内容:{{3 }})。

如果您需要查看当前设置的咖啡馆位置,可以使用https://wiki.php.net/rfc/tls-peer-verification

如果您使用的是PHP< 5.6.0

您可能需要扩展openssl_get_cert_locations类:

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'));

答案 1 :(得分:0)

在与一些朋友交谈后,我发现我的网络服务器主机运行的cPanel有一个简单的SSL证书安装程序。

我不能评论Rasclatt提供的其他答案,因为我没有尝试过。然而,这听起来非常全面。

对于遇到此问题的人 - 请检查您的主机是否正在运行cPanel软件 - 只需点击几下即可。