AWS S3にWindowsのphpコマンドでアクセスしようとしたときにエラーが出てきたときの対応です。
phpのcURLが問題だった
S3に試しに接続しようとしてスクリプトを書いて実行してみたところ、
Error executing "AssumeRole" on "https://sts.amazonaws.com"; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
とエラーが出力されてしまいました。
ただ調べて行くと、どうもAWSのライブラリなどではなく、WindowsのphpにおけるcURLのSSL証明書設定が問題みたいでした。
とりあえずGitの証明書を使用してみた
とりあえず動くことが確認したかったので、WindowsにインストールしてたGitに入っていた証明書を指定してみたら無事動きました。
開発環境にインストールされていたGitの証明書は「C:\Program Files\Git\etc\pki\ca-trust\extracted\openssl\ca-bundle.trust.crt」で、これをphp.iniにあるcurlの設定に指定しました。
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
curl.cainfo="C:\Program Files\Git\etc\pki\ca-trust\extracted\openssl\ca-bundle.trust.crt"
正常に動作するようになったのでとりあえずこれで動かしましたが、本番環境で使うのであれば、どこか別から持ってきた方がよいのかもしれません。(ちょっとそこまでは探していなくてすみません)
参考:
Azure Web Apps のPHPでSecureなAPIにアクセスするときの設定
S3を対象としたものではないですが、結局こういうことでした。