CentOS7で自己証明書を信頼する方法

オンプレミスに構築したGitLabでCIするときに、以下のエラーが発生しました。

 Pulling docker image example.tsuchinokometal.com/pages/php-ci-sample:latest ...
 ERROR: Preparation failed: Error response from daemon: Get https://example.tsuchinokometal.com/v2/: x509: certificate signed by unknown authority (docker.go:196:0s)

GitLabでの表示だと以下の通り。

ここでプルしようとしているレジストリはこちらで構築したプライベートレジストリです。
同じサーバーにコンテナで構築したプライベートレジストリからコンテナイメージをプルするときに、自己証明書が信頼できないからエラーになっているようですね。
自分で自分が信頼できないとはめんどくさいやつです。

GitLab Runnerのコンテナ内で設定するのかと思いましたが、
どうやらホスト側(今回の場合はCentOS7)で設定するようです。
実際CentOS上でプルしようとしたら同じエラーが表示されます。

[centos@centos ~]$ docker pull example.tsuchinokometal.com/pages/php-ci-sample:latest
Error response from daemon: Get https://example.tsuchinokometal.com/v2/: x509: certificate signed by unknown authority

update-ca-trustコマンドを使う方法

調べてみたところ、update-ca-trustで登録できるようです。
まずは、試した環境です。

[centos@centos ~]$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[centos@centos ~]$ docker --version
Docker version 19.03.6, build 369ce74a3c

Dockerのドキュメントを見ると、
以下のコマンドを実行するようですが、僕の環境じゃうまくいきませんでした。

cp certs/domain.crt /etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt
update-ca-trust

そこで、「/etc/pki/ca-trust/source/anchors/」ではなく、
「/etc/pki/tls/certs/」にコピーしたらうまくいきました。
nginxでTLSを使うように設定しているからですかね?

$ sudo cp certs/server.crt /etc/pki/tls/certs/
$ sudo update-ca-trust
$ sudo systemctl restart docker

無事プルできました。
GitLabのジョブもpassedになりました。

[centos@centos gitlab]$ docker pull example.tsuchinokometal.com/pages/php-ci-sample:latest
latest: Pulling from pages/php-ci-sample
ab5ef0e58194: Already exists 
09e595793d1e: Already exists 
a8815aee6005: Already exists 
79c6a430181f: Pull complete 
Digest: sha256:f3d7fa93ea9511459055efdd431e048acee03ab09ed9e18b5d9bc40b49183348
Status: Downloaded newer image for example.tsuchinokometal.com/pages/php-ci-sample:latest
example.tsuchinokometal.com/pages/php-ci-sample:latest

おまけ:trustコマンドを使った証明書の管理

こちらのRedHatのドキュメントにあるtrustコマンドを使うと、
登録した自己証明書の削除が簡単にできました。

$ sudo trust anchor --remove /etc/pki/tls/certs/server.crt
$ sudo rm /etc/pki/tls/certs/server.crt
$ sudo systemctl restart docker

また、trustコマンドで自己証明書の登録は、以下のようにしたらできました。
※自己証明書を/etc/pki/tls/certs/以外に置いていたらうまくいきませんでした。

$ sudo cp certs/server.crt /etc/pki/tls/certs/
$ sudo trust anchor /etc/pki/tls/certs/server.crt
$ sudo systemctl restart docker

シェアする

  • このエントリーをはてなブックマークに追加

フォローする