WordPressの管理画面からプラグインやテーマ、本体の更新をしようとしたときに、次のようなエラーが表示されて更新が止まってしまうことがあります。
cURL error 60: SSL certificate problem: unable to get local issuer certificate
見慣れないエラーコードに戸惑う方も多いかもしれませんが、原因ははっきりしており、対処も難しくありません。
本記事では、なぜこのエラーが出るのか、そしてどう直せばいいのかを、初心者の方にもわかるように順を追ってまとめます。
このエラーが出るのはどんなとき?
「cURL error 60」がよく出るのは、次のような状況です。
- しばらくメンテナンスをしていない、更新頻度の低いサイト
- 数年前に構築したまま、サーバー側の環境を触っていないサイト
- プラグインやテーマ、WordPress本体を更新しようとしたタイミング
いずれのケースにも共通しているのは、「サイトそのものは動いているのに、更新だけがうまくいかない」という点です。表示は普段どおりでも、裏側の通信でつまずいているというイメージです。
原因:WordPressが使っている証明書ストアが古い
WordPressは、プラグインの最新版を取得したり、外部サービスと通信したりする際に、内部で安全な通信(HTTPS)を使っています。
この通信が本当に安全かどうかを確認するために、WordPressは自分自身の中に「信頼できる認証局の証明書一覧」を持っています。これが /wp-includes/certificates/ca-bundle.crtというファイルです。
このファイルは、いわば「世の中の正規の証明書発行元リスト」のようなものです。ところが、このリストは時間の経過とともに更新される必要があります。証明書の世界では、古い認証局の証明書が期限切れになったり、新しい認証局に切り替わったりすることが定期的に起こるためです。
長期間WordPress本体を更新していないサイトでは、このリストが数年分古いままになっていることがあります。その結果、接続先のサーバーが提示する証明書を「知らない発行元のもの」と判断してしまい、通信そのものを拒否してしまうのです。これが「cURL error 60」の正体です。
つまり、サイトのセキュリティ設定が壊れているわけでも、サーバーに障害が起きているわけでもなく、WordPress内部の証明書リストが古くなっているだけというのがポイントです。
対処方法:ca-bundle.crt を最新のものに差し替える
対処自体はシンプルで、古くなった証明書ファイルを、最新の内容に差し替えるだけです。手順は次のとおりです。
1. 念のため、元のファイルをバックアップする
作業前に、必ず現在のファイルを別の場所にコピーしておきましょう。何か想定外のことが起きても、すぐに元へ戻せるようにしておくと安心です。
対象ファイルはこちらです。
/wp-includes/certificates/ca-bundle.crt
FTPソフトやサーバーの管理画面、SSHでの操作など、普段お使いの方法でこのファイルをダウンロードし、日付を付けたファイル名などで保管しておいてください。
2. 最新のca-bundle.crtを取得する
WordPress公式のリポジトリで管理されている最新版が、以下のURLから取得できます。
https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt
ブラウザでこのURLを開いてファイルとして保存するか、サーバー上でコマンドを使って直接取得することもできます。SSHが使える環境であれば、次のようなコマンドで取得可能です。
wget https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt
3. 既存のファイルと差し替える
取得した最新のファイルを、サーバー上の /wp-includes/certificates/ca-bundle.crt にアップロードし、元のファイルを上書きします。
作業手順としては、
- 元のファイルをバックアップ
- 最新版をダウンロード
- サーバー上のファイルを新しいものに置き換え
という順番になります。難しい設定変更を伴うものではないので、落ち着いて一つずつ進めれば問題ありません。
4. 更新を再度試してみる
差し替えが完了したら、あらためて管理画面からプラグインやWordPress本体の更新を試してみてください。多くの場合、これで「cURL error 60」は解消し、通常どおり更新が行えるようになります。
それでも直らない場合
まれに、ファイルを差し替えても症状が変わらないケースもあります。その場合は、以下のような点も合わせて確認してみてください。
- サーバー側(OS)にインストールされているPHPやcURLのバージョンが極端に古くないか
- レンタルサーバーやVPSの契約プランで、外部通信そのものが制限されていないか
- 差し替えたファイルのパーミッション(権限)が、元のファイルと同じになっているか
このあたりで改善しない場合は、サーバー会社のサポートに問い合わせるか、サーバー側のPHP環境自体の見直しが必要になることもあります。
まとめ
- 「cURL error 60: SSL certificate problem: unable to get local issuer certificate」は、更新頻度の低いサイトでよく発生するエラー
- 原因は、WordPress内部の証明書リスト(ca-bundle.crt)が古くなっていること
- 対処法は、最新のca-bundle.crtをダウンロードして差し替えるだけ
- 作業前には、必ず元のファイルをバックアップしておくこと
普段あまり触らない部分のファイルなので身構えてしまいがちですが、やること自体は「ファイルを一つ、新しいものに入れ替える」だけです。手順どおりに進めれば、初めての方でも問題なく対応できるはずです。プラグインの更新が急に動かなくなったときは、まずこの証明書ファイルを疑ってみてください。