web-dev-qa-db-ja.com

MailChimpのAPIを使用したSSLエラー

MailChimpのAPIに接続しようとしていますが、エラーが発生し続けます。

エラー。リスト/リストへのAPI呼び出しに失敗しました:SSLピア証明書またはSSHリモートキーがOKではありませんでした

次に、cacert.pemファイルを作成し、Mailchimp.phpファイルに設定しました。

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

そしてこれを入手してください:

エラー。リスト/リストへのAPI呼び出しに失敗しました:SSL証明書の問題、CA証明書に問題がないことを確認してください。詳細:エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました

または

エラー。リスト/リストへのAPI呼び出しに失敗しました:SSLピア証明書またはSSHリモートキーがOKではありませんでした

このページごと:

Cacert.pemファイルに http://curl.haxx.se/docs/caextract.html ファイルを使用しようとしましたが、上記の「notOK」エラーが発生します。

また、ホストから提供された情報(テキストファイル、拡張子を.pemに変更し、データの一方または両方のチャンクを貼り付けて、次のようにした)を使用して自分で作成しようとしました。

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

または1つだけ:

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

ここからどこへ行くのか、何を試すのか迷って...など

ここからのサンプルコードの使用: https://github.com/mailchimp/mcapi2-php-examples

そして、composerを介してベンダーファイルを取得します。

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

MailChimpと話したところ、彼らがまだ(2016年1月)使用している証明書は、互換性の理由から、GTE Cyber​​Trust Global Root( 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. 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

あるいは:Debianには、/etc/ca-certificates.confというファイルもあり、!mozilla/GTE_CyberTrust_Global_Root.crt行の感嘆符はそれを使用しないことを示しています1。その名前の証明書のコピーを/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 に関連しているかどうか尋ねました。いいえ。Heartbleedは、RAM内のデータの盗聴に関連するopensslの脆弱性です。 MozillaはGTE Cyber​​Trustを削除しました (2回)彼らが望んでいたので すべての1024ビットルート証明書を削除します -調査によると、国民国家は1024ビットプライムを破る可能性があります。

18
William Turrell

古い証明書が必要です。

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

ページで定義されているように:

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

RSA-1024が削除されました

Mandrill aMailchimpはRSA-1024バージョンを使用していると思います。

それはあなたが必要とするものです。私も同じ問題を抱えていました。

8
Michal-sk

Debianおよびその他のオペレーティングシステムとブラウザは、安全とは見なされなくなったため、1024ビットの証明書を削除しました。しかし、Mailchimpはまだより安全性の高い証明書に切り替えていません。したがって、古い証明書をシステムに手動で再度追加する必要があります。

debianの場合、正しい解決策は 1024bルートCAの削除後の代替チェーン検証の失敗 の指示に従うことです。

  1. まず、 GTE Cyber​​Trust Global Root に移動し、Certificate:セクションをコピーします(-----BEGIN CERTIFICATE----------END CERTIFICATE-----を含めます。ファイルに貼り付けますこのコマンドで/usr/share/ca-certificates/mozilla/GTE_CyberTrust_Global_Root.crtcat > /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

0
Simon Woodside