LoginSignup
12
2

More than 1 year has passed since last update.

Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate.

Posted at

このページについて

passenger-ruby のdocker imageが突然ビルドに失敗するようになったので調査した。
エラーの原因と解決方法についてまとめる。

事象

Dockerのビルド時に apt-get update && apt-get install で以下エラーが発生する

Err:5 https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release
  Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate.  Could not handshake: Error in the certificate verification. 

E: The repository 'https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release' does not have a Release file.

使用していたDockerfile

FROM phusion/passenger-ruby26@sha256:c187cae81ba7b0b3aba0f67f0aad4c24fb1352857dcbaf598301fdd2220ea32f

RUN apt-get update && apt-get install -y shared-mime-info \
    && apt-get clean
・・・

原因

passengerでは証明書に Let's Encrypt を使用しており、その証明書が2021/9/30で期限切れとなった。
docker image 内で新しい証明書である ISRG RootX1 をサポートしていなかったため証明書エラーが発生した。

対処方法

passengerのissueを確認したところ、同事象でのissueが上がっており、ca-certificates をアップデートすることで解消できるとのこと。

apt update && apt install -y ca-certificates

しかし、自分の場合はそもそも apt update の段階で証明書エラーが発生してしまいアップデートできなかった。
そのため解消方法を漁っていたところ、以下issueを発見。
https://github.com/phusion/passenger-docker/issues/322

RUN mv /etc/apt/sources.list.d /etc/apt/sources.list.d.bak
RUN apt update && apt install -y ca-certificates
RUN mv /etc/apt/sources.list.d.bak /etc/apt/sources.list.d 

apt update の前に /etc/apt/sources.list.d を退避させるとうまくいくとのことで、試して見たところビルドに成功した。

修正後のDockerfile

FROM phusion/passenger-ruby26@sha256:c187cae81ba7b0b3aba0f67f0aad4c24fb1352857dcbaf598301fdd2220ea32f

RUN mv /etc/apt/sources.list.d /etc/apt/sources.list.d.back

RUN apt-get update && apt-get install -y \
        libnginx-mod-http-headers-more-filter shared-mime-info \
    && apt-get clean

RUN mv /etc/apt/sources.list.d.back /etc/apt/sources.list.d
...

まとめ

今回の事象の原因は、Let's Encryptの新しい証明書にコンテナが対応していなかったことだった。
事象を解決するには ca-certificates の更新が必要。
しかし docker image として使用していた passenger-ruby の場合、 /etc/apt/sources.list.d/passenger.list がデフォルトで含まれているため、 apt update 時にこのファイルが読み込まれ証明書エラーが発生してしまっていた。
そのため ca-certificates の更新前に /etc/apt/sources.list.d/ を退避させて読み込まれないようにすることで解決した。

12
2
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
12
2