curl の SSL証明書関連エラー対策 (cURL error code 60)
AWS SDK for php 1の1.6.2と2.4.2を一緒に使ったときに遭遇。v1のオブジェクトでだけ該当エラーがでて、v2のオブジェクトではエラーが出ない状態でした。
- 環境
PHP Fatal error:
Uncaught exception 'cURL_Exception' with message 'cURL resource: Resource id #175;
cURL error: SSL certificate problem:
unable to get local issuer certificate (cURL error code 60).
See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.' in C:\php53\pear\AWSSDKforPHP\lib\requestcore\requestcore.class.php:849
こんなコード書いてて、$s3v1->listBuckets() で、該当エラーがでる状態。v2の方は、全く問題なく動く。
<?php $aws = Aws\Common\Aws::factory('./config_v1v2.php'); $s3v1 = $aws->get('v1.s3'); $s3v2 = $aws->get('s3'); $response = $s3v1->listBuckets(); $result = $s3v2->listBuckets(); ?>
簡単に検索しても、同じエラーが出てるポストを発見できず。最終的に、後述のサイトを参考に、SDK v1の sdk.class.php の触り方があったので、コード上から次のようにプロパティを設定して回避(SSL通信は行うが、証明書の妥当性チェックを行わない)することにしました。
$s3v1->ssl_verification = false;
v2 での curl 関連設定がどうなってるのかは、未調査。一緒にCA証明書が配布されるようになったのかなぁ?それとも、pear で v1 をインストールしていれば、証明書関係の問題も解決されるようになってるのだろうか?
参考サイト
- https://forums.aws.amazon.com/thread.jspa?threadID=68349
- 最後の方にあるコメント参考にしました
- http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/side-by-side.html
- Example 1 - Dual Amazon S3 Clients をベースに試した