使用MailChimp API的SSL错误

Dav*_*ave 10 ssl mailchimp

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

错误.对列表/列表的API调用失败:SSL对等证书或SSH远程密钥不正常

然后,我创建了一个cacert.pem文件并将其设置在Mailchimp.php文件中:

$this->ssl_cainfo = ROOT . DS . 'cacert.pem';
Run Code Online (Sandbox Code Playgroud)

得到这个:

错误.对列表/列表的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-----
Run Code Online (Sandbox Code Playgroud)

或只是一个:

-----BEGIN CERTIFICATE-----
adjkflsdjflkasjdflkajdflksdflsdfkj
asldfkjaadsfhjkfhdsajkfhakjdhfkjdh
....
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

不知道从哪里开始,尝试什么......等等

使用此处的示例代码:https://github.com/mailchimp/mcapi2-php-examples

并通过composer获取供应商文件:

"require": {
    "mailchimp/mailchimp": ">=2.0.0"
},
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 18

在与MailChimp交谈后,他们仍然(2016年1月)使用的证书 - 出于兼容性原因,他们告诉我 - 是GTE Cyber​​Trust Global Root(注意GTE是由Digicert购买的),所以你不需要更换整个bundle,只需添加或强制PHP读取此证书:

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

(请注意,如果您尝试在Firefox中加载它,则会收到"不安全的连接"警告,原因很明显 - 您可以添加例外.)

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

您没有指定服务器是什么,但是这里是如何在Linux上添加额外的服务器而无需替换整个软件包等:

在Debian/Ubuntu上,证书存在 /etc/ssl/certs/

  1. 将签名复制并粘贴到该目录中的新文件中,例如 mailchimp-legacy.crt
  2. run sudo c_rehash /etc/ssl/certs- 这里发生了什么: c_rehash计算每个证书的短哈希并创建一个符号链接到原始的.pem或.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
Run Code Online (Sandbox Code Playgroud)

或者:在Debian上,还有一个调用的文件/etc/ca-certificates.conf,行中的感叹号!mozilla/GTE_CyberTrust_Global_Root.crt表示不使用该文件.我相信可以将具有该名称的证书的副本放在/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
Run Code Online (Sandbox Code Playgroud)

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

有人在评论中询问这是否与Heartbleed有关.Heartbleed是一个与窃听RAM中数据有关的漏洞漏洞. Mozilla删除了GTE Cyber​​Trust(两次),因为他们想要删除所有1024位根证书 - 研究表明,一个民族国家可以打破1024位的素数.


Mic*_*hal 8

您需要较旧的证书:

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版本.

那是你需要的.我遇到过同样的问题.