Начиная с субботы, я неожиданно получаю сообщение «Ошибка cURL: [60] Проблема с сертификатом SSL: невозможно получить сертификат локального эмитента» при срабатывании моего PayPal IPN. Я не менял код на своем сайте в течение нескольких месяцев, и, насколько мне известно, я не запускаю никаких автоматических обновлений, которые могли бы помешать.
Я прочитал десятки публикаций в стеке, но в них ничего нет работал. Я переместил .crt в другие каталоги и обновил cURLOPT_CAINFO. Перезапустил httpd и cpanel. Включенный сертификат в php .ini. (Этого не было до того, как это началось, поэтому я сомневаюсь, что это так.) Скачал и установил .pem файлы, которые, я думаю, даже не имеют к этому отношения. Ничего из этого не сработало.
PayPal проверил, что сообщения IPN отправляются, а песочница PayPal успешно провела квитирование. На сайте есть обычный старый SSL, и он работает правильно.
Сервер - GoDaddy VPS, CentOs Linux 7 с Apache 2.4.41.
Я не желает отключить VERIFYPEER или работать в небезопасной установке.
Мой код:
protected function curlPost($encoded_data)
{
$uri = 'https://'.$this->getPaypalHost().'/cgi-bin/webscr';
$this->post_uri = $uri;
$ch = curl_init();
if ($this->verify_ssl) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/home/shopusa/public_html/app/Support/cert/api_cert_chain.crt');
}
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow_location);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$this->response = curl_exec($ch);
$this->response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
if ($this->response === false || $this->response_status == '0') {
$errno = curl_errno($ch);
$errstr = curl_error($ch);
throw new Exception("cURL error: [$errno] $errstr");
}
return $this->response;
}
Файл находится здесь, в соответствии с терминалом, и принадлежит владельцу веб-пользователь:
[root@ip-###-###-###-## cert]# cd /home/shopusa/public_html/app/Support/cert/
[root@ip-###-###-###-## cert]# ls
api_cert_chain.crt _notes
Все права доступа - 755 / каталог и 644 / файл.
У кого-нибудь что-нибудь выпрыгивает? Я потратил на это около восьми часов, и у меня нет идей, как снова запустить прослушиватель IPN.