使用MailChimp API的SSL错误

我正在尝试使用MailChimp的API连接,但不断收到错误:

错误。 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文件,但这给出了上面列出的“不好”错误。

我也尝试用我们的主机提供的信息(一个文本文件,将扩展名改为.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

通过作曲家获取供应商文件:

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

与MailChimp通话后,他们仍然使用的证书(2016年1月) - 出于兼容性原因,他们告诉我 - 是GTE Cyber​​Trust Global Root (注意GTE是由Digicert购买的),因此您无需更换整个捆绑,只需添加或强制PHP读取此证书:

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

(注意,如果您尝试在Firefox中加载该警告,并且希望显而易见的原因,您会收到'不安全的连接'警告 - 您可以添加例外。)

它是标准的.crt格式,这是你需要的。 证书格式指南

你没有指定服务器是什么,但是下面是如何在Linux上添加额外的一个,而不必替换整个bundle等:

在Debian / Ubuntu上,证书位于/etc/ssl/certs/

  • 将签名复制并粘贴到该目录中的新文件中,例如mailchimp-legacy.crt
  • 运行sudo c_rehash /etc/ssl/certs - 这里是怎么回事: c_rehash计算每个证书的短散列并创建一个从那个到原始.pem或.crt文件的符号链接。 基本上它是一个openssl的快速查找表 - openssl也将执行哈希以及查找符号链接,而不必拥有证书名称的数据库,或者依次打开每个文件以找到合适的名称。
  • 检查它是用这个: ls -lh *.0 | grep 'mailchimp-legacy.crt' 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下放一份这个名字/usr/share/ca-certificates/mozilla并运行sudo update-ca-certificates ,但是在我看来它很可能会在包&配置文件下次更新。

    请记住删除您正在使用的任何解决方法 - 例如 - 您的证书目录中的旧CA束 - 在您的PHP中覆盖CURLOPT_CAINFO的任何位置 - php.ini中的openssl.cainfo行

    检查您的应用程序是否正常工 我不需要重新启动PHP或我的网络服务器,所做的更改是即时的。 值得使用apt-get update/upgrade来检查你是否拥有最近的证书包。

    以下是通过命令行验证SSL连接(以及验证)到特定服务器的方法:

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

    监控:(已更新)MailChimp的v2.0 API(不建议使用)有一个名为' helper/ping '的端点,它返回一些文本以指示API状态 - 可用作API健康状况的自动测试,并且您的证书仍能正常工作。 如果您使用的是v3.0,那么他们建议使用API​​根资源,如果您实际上不需要检查任何数据,请添加?fields=account_name

    有人在评论中询问这是否与Heartbleed有关。 No Heartbleed是一个openssl漏洞,涉及窃听RAM中的数据。 Mozilla删除了GTE Cyber​​Trust(两次),因为他们想要删除所有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尚未切换到更高安全性的证书。 因此,您将不得不手动将旧证书添加到您的系统。

    debian上 ,正确的解决方案是在1024b根CAs删除后按照替代链验证失败中的说明操作:

  • 首先,转到GTE Cyber​​Trust Global Root并复制证书:部分(包括-----BEGIN CERTIFICATE----------END CERTIFICATE----- 。将其粘贴到文件/usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt使用以下命令/usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crtcat > /usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt

  • 使用以下命令检查它是否正确: openssl x509 -in /usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crt -text -noout

  • 要启用该证书,请将此行添加到/etc/ca-certificates.confmozilla/GTE_CyberTrust_Global_Root.crt

  • 更新debian的证书: update-ca-certificates

  • 链接地址: http://www.djcxy.com/p/31283.html

    上一篇: SSL errors using MailChimp's API

    下一篇: GoDaddy SSL Cert Not Working With Java