LoginSignup
0
0

More than 3 years have passed since last update.

curl を使っているPHP スクリプトで https がエラーになる件の解決方法

Last updated at Posted at 2020-04-04

Moodle の管理をしていて、ハマった事項を解決したので共有します。

「言語パック」をクリックすると環境によってエラーになる問題です。
Moodle のダウンロードサイトから https 通信により curl コマンドで言語パックファイルをダウンロードしようとして、エラーになってしまうのです。AWSのインスタンスで、出たり出なかったりしました。

プログラムの動作としては、curl コマンドを内部で実行しているのですが、デバッグ
してみたところ、lib/filelist.php で以下のように PHP の curl エラーになっています。

[77] => 'CURLE_SSL_CACERT_BADFILE',

要すれば、curl が俺が使うためのCACERTファイルがない、と文句を言っているようです。
以下のサイトから、最新の cacert.pem をダウンロードして、一連の CACERT の仲間に
加えてあげることで、直りました。
(リンク)
https://curl.haxx.se/docs/caextract.html

たまに次の手順をやってあげる必要がありそうです。

  1. 上記リンクからダウンロードした最新の .pem ファイルを以下にコピー。

/etc/pki/ca-trust/source/anchors

  1. 次のコマンドを実行
  # update-ca-trust
  1. サービスを再読み込み
 # systemctl reload php-fpm
 # systemctl reload httpd 

(参考)
/etc/pki/ca-trust/source/README
(マニュアル)
man update-ca-trust
(PHP)
https://www.php.net/manual/ja/function.curl-errno.php
(関連)
https://stackoverflow.com/questions/23434792/php-curl-working-locally-error-77-on-aws-server
(近い)
https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0