postgresウェブサイトから証明書キーをインポートするときにエラーが発生し始めました。
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
#6 0.310 --2021-10-04 20:56:35-- https://www.postgresql.org/media/keys/ACCC4CF8.asc
#6 0.315 Resolving www.postgresql.org (www.postgresql.org)... 87.238.57.232, 72.32.157.230, 217.196.149.50, ...
#6 0.318 Connecting to www.postgresql.org (www.postgresql.org)|87.238.57.232|:443... connected.
#6 0.902 ERROR: The certificate of 'www.postgresql.org' is not trusted.
#6 0.902 ERROR: The certificate of 'www.postgresql.org' has expired.
私は以下を使ってこの問題を解決しようとしました--no-check-certificate
。
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
postgresql-client-common postgresql-client-13 \
&& rm -rf /var/lib/apt/lists/*
#9 2.579 404 Not Found [IP: 147.75.85.69 80]
#9 2.606 Fetched 7888 kB in 2s (3486 kB/s)
#9 2.606 Reading package lists...
#9 2.974 W: The repository 'http://apt.postgresql.org/pub/repos/apt -pgdg Release' does not have a Release file.
#9 2.974 E: Failed to fetch http://apt.postgresql.org/pub/repos/apt/dists/-pgdg/main/binary-arm64/Packages 404 Not Found [IP: 147.75.85.69 80]
#9 2.974 E: Some index files failed to download. They have been ignored, or old ones used instead.
この問題を解決する他の方法はありますか?今日、突然このようなことが起こり始めました。
答え1
PostgreSQL.org は LetsEncrypt 署名証明書(今確認済み)を使用し、ルート証明書を確認します。
証明書の有効期限が切れました。。更新されたがシステムにCA証明書がない可能性があるため、システムは新しいX1証明書を検証できないため、これを拒否します。
私が知っている限り、HTTPSアップグレードを自動的に実行するhttpリポジトリでも同じことが起こります。このアップグレードを報告する適切な内容が表示されないため、試してみましたが、自動的に失敗し、実際のエラーが「ファイルを取得するために接続できません」に近い場合は、「該当ファイルなし」エラーが発生しているようです。以下で確認できます。無効な証明書を無視するように指示する。
しかし、あなたがすべきことはCA証明書の更新。アップデートに「ca-certificate」パッケージがあることがわかります。いったんそれが所定の位置にあると、他のすべてが再び動作し始めます。
ISRG X1 証明書の強制インストール
- 得る資格(例えば
curl -k https://letsencrypt.org/certs/isrgrootx1.pem > isrgrootx1.pem
) - CRT抽出
openssl crl2pkcs7 -nocrl -certfile isrgrootx1.pem | openssl pkcs7 -print_certs -out isrgrootx1.crt
- にコピー
/usr/local/share/ca-certificates/
- ランニング
sudo update-ca-certificates
。
重複した証明書が報告されたら、/etc/ssl/certsで見つけて確認してください。 「subject=C=US,O=Internet Security Research Group,CN=ISRG Root X1」の場合、ISGR X1 証明書が既にインストールされているため、問題は別の場所にあります。
答え2
~に帰属LSerniが私に正しい方向を教えてくれました。私の場合、問題を解決するために実行する必要がある1つのステップがあります。明らかに無効mozilla/DST_Root_CA_X3.crt
(使用済みsed
、以下を参照/etc/ca-certificates.conf
)
さらに興味深いのは、Dockerを使用してDockerでバグを再現することはできませんが、debian:stretch
Dockerを使用するとバグを再現できることですpython:3.7.8-stretch
。
バグを再現するコマンドは基本的に次の3つです。
apt-get update && apt-get install -y lsb-release wget
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
上記のコマンドを実行すると、デフォルトの問題であるgpg: no valid OpenPGP data found.
出力が生成されます。
エラーを再現するために使用されたイメージID:
me@home$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.7.8-stretch b64658cdf594 14 months ago 902MB
エラーを再現するための出力:
me@home$ docker run -it python:3.7.8-stretch /bin/bash
root@771da843c08d:/# apt-get update && apt-get install -y lsb-release wget
Ign:1 http://deb.debian.org/debian stretch InRelease
Get:2 http://security.debian.org/debian-security stretch/updates InRelease [53.0 kB]
Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]
Get:4 http://deb.debian.org/debian stretch Release [118 kB]
Get:5 http://deb.debian.org/debian stretch Release.gpg [3177 B]
Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [720 kB]
Get:7 http://deb.debian.org/debian stretch/main amd64 Packages [7080 kB]
Fetched 8067 kB in 1s (4448 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
wget is already the newest version (1.18-5+deb9u3).
Suggested packages:
lsb
The following NEW packages will be installed:
distro-info-data lsb-release
0 upgraded, 2 newly installed, 0 to remove and 106 not upgraded.
Need to get 32.9 kB of archives.
After this operation, 78.8 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 distro-info-data all 0.36 [5810 B]
Get:2 http://deb.debian.org/debian stretch/main amd64 lsb-release all 9.20161125 [27.1 kB]
Fetched 32.9 kB in 0s (274 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package distro-info-data.
(Reading database ... 30586 files and directories currently installed.)
Preparing to unpack .../distro-info-data_0.36_all.deb ...
Unpacking distro-info-data (0.36) ...
Selecting previously unselected package lsb-release.
Preparing to unpack .../lsb-release_9.20161125_all.deb ...
Unpacking lsb-release (9.20161125) ...
Setting up distro-info-data (0.36) ...
Setting up lsb-release (9.20161125) ...
root@771da843c08d:/# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
root@771da843c08d:/# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
gpg: no valid OpenPGP data found.
解決された問題を示す出力(解決ステップを含む):
root@479753dc1044:/# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
root@479753dc1044:/# # Remove the DST X3 root certificate, per
root@479753dc1044:/# # https://medium.com/geekculture/will-you-be-impacted-by-letsencrypt-dst-root-ca-x3-expiration-d54a018df257
root@479753dc1044:/# sed -i 's/mozilla\/DST_Root_CA_X3.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf
root@479753dc1044:/# update-ca-certificates
Updating certificates in /etc/ssl/certs...
0 added, 1 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
root@479753dc1044:/# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
OK
root@479753dc1044:/# apt-get update
Ign:1 http://deb.debian.org/debian stretch InRelease
Hit:2 http://security.debian.org/debian-security stretch/updates InRelease
Hit:3 http://deb.debian.org/debian stretch-updates InRelease
Hit:4 http://deb.debian.org/debian stretch Release
Get:6 http://apt.postgresql.org/pub/repos/apt stretch-pgdg InRelease [81.6 kB]
Get:7 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 Packages [270 kB]
Fetched 352 kB in 1s (220 kB/s)
Reading package lists... Done
上記の修正を適用した後に続行できます(たとえば、以前のPostgresクライアントのインストール)。
root@479753dc1044:/# apt-get -y install postgresql-client-12
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpq-dev libpq5 pgdg-keyring postgresql-client-common
Suggested packages:
postgresql-doc-14 postgresql-12 postgresql-doc-12
The following NEW packages will be installed:
pgdg-keyring postgresql-client-12 postgresql-client-common
The following packages will be upgraded:
libpq-dev libpq5
2 upgraded, 3 newly installed, 0 to remove and 104 not upgraded.
Need to get 1823 kB of archives.
After this operation, 6032 kB of additional disk space will be used.
Get:1 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 libpq-dev amd64 14.0-1.pgdg90+1 [135 kB]
Get:2 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 libpq5 amd64 14.0-1.pgdg90+1 [169 kB]
Get:3 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 pgdg-keyring all 2018.2 [10.7 kB]
Get:4 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 postgresql-client-common all 231.pgdg90+1 [91.3 kB]
Get:5 http://apt.postgresql.org/pub/repos/apt stretch-pgdg/main amd64 postgresql-client-12 amd64 12.8-1.pgdg90+1 [1417 kB]
Fetched 1823 kB in 1s (1422 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 30604 files and directories currently installed.)
Preparing to unpack .../libpq-dev_14.0-1.pgdg90+1_amd64.deb ...
Unpacking libpq-dev (14.0-1.pgdg90+1) over (9.6.17-0+deb9u1) ...
Preparing to unpack .../libpq5_14.0-1.pgdg90+1_amd64.deb ...
Unpacking libpq5:amd64 (14.0-1.pgdg90+1) over (9.6.17-0+deb9u1) ...
Selecting previously unselected package pgdg-keyring.
Preparing to unpack .../pgdg-keyring_2018.2_all.deb ...
Unpacking pgdg-keyring (2018.2) ...
Selecting previously unselected package postgresql-client-common.
Preparing to unpack .../postgresql-client-common_231.pgdg90+1_all.deb ...
Unpacking postgresql-client-common (231.pgdg90+1) ...
Selecting previously unselected package postgresql-client-12.
Preparing to unpack .../postgresql-client-12_12.8-1.pgdg90+1_amd64.deb ...
Unpacking postgresql-client-12 (12.8-1.pgdg90+1) ...
Setting up libpq5:amd64 (14.0-1.pgdg90+1) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...
Setting up pgdg-keyring (2018.2) ...
Removing apt.postgresql.org key from trusted.gpg: OK
Setting up libpq-dev (14.0-1.pgdg90+1) ...
Setting up postgresql-client-common (231.pgdg90+1) ...
Setting up postgresql-client-12 (12.8-1.pgdg90+1) ...
update-alternatives: using /usr/share/postgresql/12/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
答え3
根本原因
最近、LSerniが答えたように、ルート証明書が期限切れになり、いくつかの問題が発生しました。
以下はLetscryptの公式の答えです。
プラットフォームが Let's Encrypt 証明書を検証できるかどうかを決定する主な要因は、プラットフォームが ISRG の「ISRG Root X1」証明書を信頼するかどうかです。 2021年9月以前は、一部のプラットフォームでIdenTrustの「DST Root CA X3」証明書を信頼していたため、ISRG Root X1が含まれていなくても証明書を確認できました。 2021年10月以降、ISRG Root X1を信頼するプラットフォームのみがLet's Encrypt証明書を確認します(Androidを除く)。
詳しくはこちらhttps://letsencrypt.org/docs/certificate-compatibility/
すべてのDebianバージョン> = jessieには、Letsencryptを認識するために必要な証明書が含まれている必要があります。 (更新済み)
ストレッチには、ここにリストされているISRGルートX1証明書を含める必要があります。
更新するには、以下を試してください。
apt update
apt install -y libssl1.0.2 ca-certificates
詳細については、ここをクリックしてくださいhttps://serverfault.com/questions/1079199/client-on-debian-9-erroneously-reports-expired-certificate-for-letsencrypt-issue
Postgresqlのインストールに関する注意
の記事を参照してくださいhttps://wiki.postgresql.org/wiki/Apt#Quickstart2021年8月20日に「apt-keyは廃止されました」と更新されました。
以下を交換することもできます。
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
通過:
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg
また、ストレッチ時にlsb_releaseをインストールする必要はなく、/ etc / os-releaseファイルを使用できます。たとえば、次のようになります。
OS_CODENAME=$(awk -F= '$1=="VERSION_CODENAME" { print $2 ;}' /etc/os-release)