WordPressが自分でルート証明書の一覧を持ってた話
概要
2021/9/30でLet's Encryptが使ってたルート証明書が期限切れになった。
サーバへのデプロイ時にWP CLIを使ってプラグインをインストールしていたが証明書期限関連のエラーが発生してデプロイが失敗するようになったので、それで確認したこととかをつらつら書いていく。
結論
WordPressは自前でルート証明書を管理していた。
WP CLIなどWordPressの機能に依存したものを使ってプラグインなどをダウンロードする場合にはこの証明書を内部でプログラム内で指定してダウンロードを行なっている。
GitHub上でこのファイルが更新されたのは10/4だが、9/22付近でマイナーバージョンアップを施した際にはこの変更は入っておらず、10/4以降にマイナーバージョンアップされたWordPressが公開はされなかったのでバンドルファイルだけダウンロードして差し替えを行った。
※ マイナーバージョンが更新されなかっただけで稼働しているものと同じバージョンを新しく落としたWordPressのバンドルファイルは更新されてたので単にバージョンアップするルールになってなかったっぽい。
経緯
- デプロイ後に一部機能が動作していないのを発見
- デプロイログ確認時にプラグインのダウンロード時にcurlが証明書エラーで落ちていることを確認
- curlなのでシステムのルート証明書を更新
- curlコマンドを直打ちした場合は成功するが依然デプロイ時のログが解消しない
- WP CLIのプログラムをおってWordPress側が用意しているバンドルファイルを直接指定してダウンロードを実行していることを確認
- WordPressが持つバンドルファイルを更新
- デプロイ時のエラーログが解消したことを確認
やったこと
サーバで持ってるシステムの証明書を更新
yumでca-certificatesを入れていたため以下で更新できた。
$ sudo yum update ca-certificates
WordPressのバンドルファイルの更新
一応上書き前にバックアップ取りたかったのでwgetで単純にダウンロード。
$ sudo wget https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt
まとめ
滅多に無いことではあるが、WordPressを使ってる場合にルート証明書に変更が入る場合は注意が必要。
WordPress内部のRequestのクラスを使ったりしている場合にはWordPressが持つ証明書が使われることになる。