У меня была такая же точная проблема
Can't connect to PayPal to validate IPN message: SSL certificate: unable to get local issuer certificate
Я использовал образцы кода, сгенерированные в github paypal, найденные здесь (я использовал PHP): https://github.com/paypal/ipn -code-samples
Я загрузил оба сертификата и попробовал тестирование как от curl: http://curl.haxx.se/docs/caextract.html
. Примерно через 2 часа тестирования (с использованием симулятора ipn Paypal) и googling выяснилось, что paypal ipn не может быть протестирован на localhost
, поэтому я нажал код в реальном времени и попробовал тестирование, но все равно получил ту же ошибку (даже с разрешениями, установленными в 777).
Когда я устанавливал CURLOPT_SSL_VERIFYPEER, false
, он работал, но это бы побеждало цель иметь сертификат ssl.
После того, как вы просматриваете файлы моего сервера, Я нашел файл curl-ca-bundle.crt
в моей папке PHP. Я решил сделать hardcode CURLOPT_CAINFO
в моем сценарии PayPal ipn на этом пути. Это, наконец, сработало!
Я заметил, что этот старый .crt-файл включал некоторые сертификаты, которые не были в последнем .crt-файле с сайта curl. Это была куча сертификатов из verisign class 1, verisign class 2, verisign class 3 and verisign class 4
.
Вот полный список имен сертификатов, которые я добавил в файл .crt curl:
Это может иметь какое-то отношение к тому, что говорил @Andomar: сертификат verisign от PayPal не включен в список по умолчанию (по умолчанию я имею в виду список по умолчанию для скрининга).
Я didn У меня есть время, чтобы отлаживать и точно определять, какой сертификат необходим, поэтому я просто включил их все.
Для тех, кто испытывает эту проблему в в будущем я бы предложил получить последние сертификаты от завитка и добавить один за другим сертификаты в списке выше, пока ошибка не исчезнет.
Вот ссылка на некоторые из этих сертификатов verisign (вам может понадобиться Google для других, не указанных в списке): www.symantec.com/page.jsp?id=roots
Примечание. *: Чтобы просмотреть текущие сертификаты Paypal, вы можете запустить эту команду в терминале:
openssl s_client -connect paypal.com:443 -showcerts
Если у кого-то есть более глубокое понимание этой проблемы, прокомментируйте, поскольку я потратил часы, чтобы понять все вышеизложенное.