cURL を使用して、WordPress プラグインで PayPal トランザクションを検証します。最近、トランザクションを確認できなかったため、ユーザーが購入プロセスを完了できないというバグ レポートを受け取るようになりました。私はエラーを追跡しました:
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
ここ StackOverflow で同じ問題に関連する多くの質問を見つけました。それらのほとんどは、解決策はCURLOPT_CAINFO
cURL のオプションを使用して CA のバンドルを提供することであると述べました。http://curl.haxx.se/ca/cacert.pemの最新バージョン (2012 年 6 月 28 日に変換) をダウンロードして、プラグインと共に出荷しています。それは私が受け取った問題のほとんどを解決しました。
ここでの問題は、支払いが失敗したという別のレポートを受け取ったところですが、エラーは同じでした: SSL certificate problem, verify that the CA cert is OK.
. 興味深いのは、解決策はオプションを削除することだったということです。CURLOPT_CAINFO
これについての説明があるかどうか疑問に思っています。ダウンロードしたものなど、更新された CA バンドルを使用するのが一般的な解決策だと思っていましたが、そうではないようです。
この種の問題の一般的な解決策は何でしょうか? また、更新された CA バンドルを使用すると、SSL 証明書の問題が修正されるのではなく、問題が発生することを説明できるものは何ですか?
これは cURL 構成です。
<?php
$ch = curl_init("https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
?>
更新: www.paypal.com の証明書は VeriSign によって署名されています。証明書階層 (Firefox で表示) は次のとおりです。
- VeriSign Class 3 Public Primary Certification Authority - G5
- VeriSign Class 3 Extended Validation SSL CA
- www.paypal.com
VeriSign Class 3 Public Primary Certification Authority - G5の証明書が、使用しているhttp://curl.haxx.se/ca/cacert.pemのバージョンに含まれていることを確認できます。
ご協力いただきありがとうございます。