【レアケース】Let's Encryptのルート証明書の切り替えができていなかった場合の対処法


9月末でLet's Encryptのルート証明書が切り替わり、ISRG Root X1というものに変わりました。
それに伴ってサーバーの方も確認しなければならなかったのですが、直前にca-certificatesのアップデートが来てたのでてっきり新しいルート証明書に対応していると思ってました。

いざLet's Encryptを使ったサイトにwgetでアクセスしたらエラーが。

ということでいくつか試して解決するかやってみました。

旧ルート証明書を無効化する

一番ベターな方法です。普通は、これがca-certificatesのアップデート時に行われているはずです。
ブラックリストに入ってるはずなので /etc/ca-certificates.confを見てみます。

ca-certificates.conf
!mozilla/DST_Root_CA_X3.crt

ちゃんと「!」が付いているので無効化されていました。
それにISRG Root X1も追加されてました。
それなのにおかしい。

証明書ファイルを消してみる

解決できなかったので、straceコマンドでwgetがどんな挙動をしているか見てみました。
すると、

stat("/usr/local/ssl/certs/8d33f237.0", 0x7ffecc263f40) = 0

というログがあって、なにかのルート証明書を読み込んでいることが分かりました。
これが何なのか調べます。opensslコマンドで確認します。

$ openssl x509 -text -noout -in /usr/local/ssl/certs/8d33f237.0

なんとDST Root CA X1でした。なぜか読み込まれています。
このようなケースは稀と見られます。

ということで古いルート証明書を削除して、証明書ストアを更新します。

$ sudo rm /usr/local/ssl/certs/8d33f237.0
$ sudo update-ca-certificates

解決

再びwgetでletsencrypt.orgにアクセスできるか試したところ、うまく行きました。
今回は極めてレアケースであったため記事にしましたので、参考になればと思います。