WordPressで「cURL error 60」が出続けた原因

― WordPress内部のCA証明書だった話 ―


発生した問題

ある日突然、WordPress管理画面から

  • プラグインの更新ができない

  • テーマの更新ができない

という状態になった。

表示されるエラーは以下。

cURL error 60: SSL certificate problem

ブラウザでサイト表示はできる。
記事の更新や編集もできる。

それでも、WordPressだけが外部通信できない。


最初に疑ったこと(一般的な切り分け)

まずは、さくらサーバーのサポートにメール連絡した。

メールで確認したのは、次の2点。

  • 本サーバーのPHP(cURL)が参照しているCA証明書

  • SSL証明書チェーンが正しく設定されているか

この2点を確認した結果、
いずれも問題なし。

続けて、次のような内容だった。

WordPressは、内部で独自にCA証明書を管理しております。
その為、こちらの内容はWordPressの問題となり、
お客様コンテンツ上にて発生している問題となってしまい、
弊社のサポート対象外となりますため、
お客様にてお調べいただきご対応いただく必要がございます。


WordPressは「独自のCA証明書バンドル」を持っている

このメールの内容で、
WordPressは内部で独自にCA証明書バンドルを持っている
ということが理解できた
(正直、この時点でやっと理解できた)。

WordPressは、

wp-includes/certificates/ca-bundle.crt

この 内部CAバンドル を使って
SSL検証を行う。

つまり、

  • OSのCA証明書

  • PHP / curl の設定

が正常でも、

👉 WordPress内部のCAが古ければ失敗する

という構造になっている。


決定的証拠

実際に ca-bundle.crt の中身を確認すると、
明らかに問題のある証明書が含まれていた。

  • GTE CyberTrust Global Root

  • 有効期限:2018年

  • 署名アルゴリズム:md5RSA

現在では、
OS側では多くの環境で
Disallowed(信頼拒否)扱いとなっている証明書らしい。

この時点で、
cURL error 60 が出ていた原因はほぼ確定した。


解決方法

WordPress内部のCA証明書バンドルを更新する

やったことはシンプルだった。

1. 既存ファイルをバックアップ

wp-includes/certificates/ca-bundle.crt

ca-bundle.crt.bak_20251222

2. 最新のCAバンドルを取得

WordPress公式GitHubから取得。

https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt

3. 新しい ca-bundle.crt を配置

wp-includes/certificates/ca-bundle.crt

に、そのままアップロード。

4. 確認

管理画面からプラグイン更新を実行 → 成功

cURL error 60 は完全に消えた。


なぜ「可能性は低い」と言われがちなのか

正直に言うと、この原因はレアケース

僕がwordpressの更新を何年もしていなかった。(←本当の原因はこれ汗)

多くの場合は、

  • OSのCA証明書更新

  • PHP / curl の調整

で解決する。

しかし今回のように、

  • WordPress本体が非常に古い

  • 長期間アップデートされていない

  • OS側は更新されている

という条件が揃うと、

👉 WordPress内部のCAだけが取り残される

という状態が起きる。


同じ症状の人へ(もし、いるならば・・・)

以下がすべて当てはまったら、
WordPress内部のCA証明書バンドルを疑う価値がある。

  • WordPressが古い(5.x以前など)

  • プラグイン更新に失敗して、↓↓

  • cURL error 60 が出る

  • OS / PHP / curl は正常


まとめ

  • WordPressは内部にCA証明書バンドルを持っている。

  • OSやPHPが正常でも、内部CAが古いとSSLエラーになる。

  • wp-includes/certificates/ca-bundle.crt の更新で解決する場合がある。

今回の原因は、ただ自分の更新の怠りだった。(言い訳すると、更新の大切さを知らなかった)


おわりに

「可能性は低い」と言われる原因ほど、
実際にハマると抜けにくい。

今回のように、
実体を確認し、1つずつ潰していくことの大切さを改めて感じた。

同じエラーで時間を溶かしている人の助けになれば幸いです。