web-dev-qa-db-ja.com

不明な機関によって署名された「ドッカープル」証明書

DockerレジストリからDockerイメージをプルしようとしていましたが、次の問題が発生しました。

$ docker pull <docker registry>/<image name>/<tag> 
Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authority

「カール」を試してみたところ、同様のエラーメッセージが表示されました。

 curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.

そこで、次のコマンドを使用してCA証明書をダウンロードし、サーバー(RedHat Linux 7)にインポートしました。

cp root_cert.cer /etc/pki/ca-trust/source/anchors/
update-ca-trust

ルート証明書がインポートされた後、curlが正常に機能していることが確認できます。証明書エラーは報告されませんが、docker pullを使用しても同じ問題が発生します。 dockercurlとは異なるCA証明書の場所を使用していますか?この状況でdocker pullの問題を解決するにはどうすればよいですか?

16
Chen Xie

OS証明書の変更を検出するには、Dockerサービスを再起動する必要がある場合があります。

Dockerには、個別のレジストリサーバーCAを信頼するために使用できる追加の場所があります。 CA証明書は/etc/docker/certs.d/<docker registry>/ca.crt。イメージタグでポート番号を指定する場合は、ポート番号を含めます。

/etc/docker/certs.d/my-registry.example.com:5000/ca.crt
16
BMitch
  • 最初にファイルを作成します-/etc/docker/daemon.json
  • 次を実行して証明書を追加するより

    openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/<registry_address>/ca.crt
    

再起動せずに動作します

[〜#〜]または[〜#〜]

のようなシステムに証明書をインポートする

  • 上記のコマンドのように、証明書をファイルに保存します(ポートは重要であり、プロトコルは不要です)

    openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.crt
    
  • / usr/local/share/ca-certificates /にコピーします

    cp ca.crt /usr/local/share/ca-certificates/
    
  • update-ca-certificatesを実行する

    Sudo update-ca-certificates
    
  • ドッカーを再起動してください!
10
matson kepson

ここに簡単な解決策があります:

  • /etc/docker/daemon.jsonファイルを編集または作成し、insecure-registriesを追加します。

docker.squadwars.orgの例:

        {
“insecure-registries” : [“docker.squadwars.org:443”]
}
  • Dockerデーモンを再起動します

    systemctl restart docker

  • Hostと同じ名前のディレクトリを作成します。

docker.squadwars.orgの例:

mkdir -p /etc/docker/certs.d/docker.squadwars.org
  • 証明書を取得し、作成したディレクトリに保存します。

    ex + '/ BEGIN CERTIFICATE /、/ END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect docker.squadwars.org:443)-scq> /etc/docker/certs.d/docker.squadwars.org/ docker_registry.crt

2
William Santos