Ошибки SSL с использованием API MailChimp

Я пытаюсь подключиться к API MailChimp, но продолжаю получать ошибки:

ошибка. Ошибка вызова API для списков / списка: сертификат однорангового SSL или SSH удаленный ключ не был в порядке

затем я создал cacert.PEM-файл и установите его в Mailchimp.файл php:

$this->ssl_cainfo = ROOT . DS . 'cacert.pem';

и

ошибка. Ошибка вызова API для списков / списка: проблема с сертификатом SSL, проверка что сертификат CA в порядке. Подробности: ошибка: 14090086: SSL процедуры: SSL3_GET_SERVER_CERTIFICATE: ошибка проверки сертификата

или

ошибка. Ошибка вызова API для списков / списка: сертификат однорангового SSL или SSH удаленный ключ не был в порядке

на этой странице:

Я попытался использовать http://curl.haxx.se/docs/caextract.html файл для моего cacert.PEM-файл, но это дает ошибку "не в порядке", указанную выше.

Я также попытался сделать свой собственный с информацией, предоставленной нашим host (текстовый файл, изменено расширение на .pem, и вставил в него один и/или оба куска данных, сделав его похожим на это):

-----BEGIN CERTIFICATE-----
adjkflsdjflkasjdflkajdflksdflsdfkj
asldfkjaadsfhjkfhdsajkfhakjdhfkjdh
....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
adjkflsdjflkasjdflkajdflksdflsdfkj
asldfkjaadsfhjkfhdsajkfhakjdhfkjdh
....
-----END CERTIFICATE-----

или только один:

-----BEGIN CERTIFICATE-----
adjkflsdjflkasjdflkajdflksdflsdfkj
asldfkjaadsfhjkfhdsajkfhakjdhfkjdh
....
-----END CERTIFICATE-----

в недоумении, куда идти отсюда, что попробовать...и т. д.

используя пример кода отсюда:https://github.com/mailchimp/mcapi2-php-examples

и получение файлов поставщика через composer:

"require": {
    "mailchimp/mailchimp": ">=2.0.0"
},

4 ответов


поговорив с MailChimp, сертификат, который они все еще (январь 2016) используют-по соображениям совместимости, они сказали мне-это GTE CyberTrust глобальный корень (обратите внимание, что GTE был куплен Digicert), поэтому вам не нужно заменять весь пакет, просто добавьте или заставьте PHP прочитать этот сертификат:

https://gte-cybertrust-global-root.digicert.com/info/index.html

(обратите внимание, что при попытке и загрузите это в Firefox по, надеюсь, очевидным причинам-вы можете добавить исключение.)

это в стандарт .формат crt, который вам нужен. руководство по форматам сертификатов

вы не указали, что такое сервер, но вот как добавить дополнительный в Linux без необходимости замены всего пакета и т. д.:

в Debian/Ubuntu сертификаты живут в /etc/ssl/certs/

  1. скопируйте и вставьте подпись в новый файл в этот каталог, например,mailchimp-legacy.crt
  2. выполнить sudo c_rehash /etc/ssl/certs - что здесь происходит: c_rehash вычисляет короткий хэш каждого сертификата и создает символическую ссылку на оригинал .Пем или .файл crt. В основном это таблица быстрого поиска для openssl-openssl также будет выполнять хэш и искать символическую ссылку, а не иметь базу данных имен сертификатов или открывать каждый файл по очереди, чтобы найти правильный.
  3. проверьте, что он работал с этим: ls -lh *.0 | grep 'mailchimp-legacy.crt'

вы должны увидеть нечто вроде этого:

lrwxrwxrwx 1 root root 20 Feb 13 14:17 4d654d1d.0 -> mailchimp-legacy.crt
lrwxrwxrwx 1 root root 20 Feb 13 14:17 c692a373.0 -> mailchimp-legacy.crt

кроме того: в Debian также есть файл под названием /etc/ca-certificates.conf и восклицательный знак в строке !mozilla/GTE_CyberTrust_Global_Root.crt указывает не использовать этот. Я считаю, что можно поместить копию сертификата с этим именем под /usr/share/ca-certificates/mozilla и работать sudo update-ca-certificates, но мне кажется, что он, вероятно,будет удален снова, когда файл package & config будет обновлен.

не забудьте удалите все обходные пути, которые вы использовали-например - старые пакеты CA в каталоге сертификатов - везде, где вы переопределяете CURLOPT_CAINFO в своем PHP - openssl.строка cainfo в вашем php.ini

проверьте правильность работы приложения. Мне не нужно было перезапускать PHP или мой веб-сервер, изменение было мгновенным. Стоит использовать apt-get update/upgrade чтобы проверить, что у вас есть самые последние пакеты сертификатов.

вот способ проверить SSL-соединение (и проверку) с определенным сервером из командная строка:

echo GET | openssl s_client -CApath /etc/ssl/certs/ -connect us3.api.mailchimp.com:443 2>&1

наблюдения: (обновлено) аккаунты П2.0 API-интерфейс (устарело) есть конечная точка, называется 'helper/ping' который возвращает некоторый текст, чтобы указать статус API-полезен как автоматический тест работоспособности API и что все ваши сертификаты все еще работают. Если вы используете v3.0, они рекомендуют использовать корневой ресурс API и добавить ?fields=account_name если вам на самом деле не нужно проверить любой из данные.

кто-то спросил в комментариях, связано ли это с Heartbleed. Нет. Heartbleed-это уязвимость openssl, связанная с прослушиванием данных в ОЗУ. Mozilla удалил GTE CyberTrust (дважды), потому что они хотели удалить все 1024-битные корневые сертификаты - исследования показали, что национальное государство может сломать 1024-битное простое число.


вам нужны старые сертификаты:

https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

Как определено на странице:

http://curl.haxx.se/docs/caextract.html

RSA-1024 удалено

Guess Mandrill Mailchimp использует версию RSA-1024.

Это то, что вам нужно. У меня было то же самое. вопрос.


Debian и другие операционные системы и браузеры удалили 1024-битные сертификаты, потому что они больше не считаются безопасными. Но Mailchimp еще не перешел на сертификат более высокого уровня безопасности. Поэтому вам придется вручную повторно добавить старый сертификат системы.

On debian, правильное решение-следовать инструкциям в альтернативный цепной отказ проверки после корня 1024b CAs удаление:

  1. сначала перейдите в GTE CyberTrust глобальный корень и копии справка: (включая -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Вставить в файл /usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt С помощью этой команды: cat > /usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt.

  2. проверьте, что это хорошо с командой:openssl x509 -in /usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt -text -noout

  3. разрешить этот сертификат, добавьте эту строку /etc/ca-certificates.conf: mozilla/GTE_CyberTrust_Global_Root.crt

  4. обновить debian сертификаты: update-ca-certificates


в вашем AppController при создании нового экземпляра Mailchimp вы можете передать следующие параметры:

'ssl_verifypeer'

'ssl_verifyhost'

'ssl_cainfo'

они сопоставляются с Curl, когда Mailchimp запрашивает данные.

Итак, для начала я бы попытался изменить строку 44 AppController, чтобы выглядеть примерно так:

       $this->mc = new Mailchimp('yourAPIKey', array('ssl_verifypeer' => false)); //your api key here

Это позволит вам проверить, что это одноранговый сертификат это вызывает проблемы. Конечно, я не рекомендую считать это допустимым решением для производства, это просто шаг по устранению неполадок.