web-dev-qa-db-ja.com

Windows上のDocker(Boot2Docker)-不明な機関によって署名された証明書エラー

Windows(boot2docker + Oracle Virtual Box)でDockerを実行しています。私の企業環境では、CAが会社の自己署名CAになるように証明書を変更します。したがって、チェーンは次のようになります。

Company's CA
    |__
        Company's Intermediate CA
            |__
               Docker Certificate

次のようなコマンドを実行しようとすると:

docker run hello-world

私はこのエラーを受け取ります:

Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority

私はこの問題に対するいくつかの答えを見つけましたが、常にLinux環境についてです。 Windowsでこの問題を回避するにはどうすればよいですか?

33
codependent

この一般的な問題は、数か月間私を悩ませてきました。ローカル仮想マシンを取得してPythonパッケージを取得しようとしたときに最初に気づいたので、証明書が問題になると既に考えていました。VMで解決しましたが、今日までDockerのソリューションを作成することができました。Dockerの証明書ストアに証明書を追加し、それらを永続化するのがコツです。これはbootlocal.shマシンが起動するたびに実行されるスクリプト。

Linuxの答えをすでに見つけているなら、最初のステップはすでにわかっていると思います。他の人がここまで得ていないかもしれないので、徹底するためにここでそれらを文書化します。以前の試みで#1と#2を既に完了している場合は、以下の#3から始めます。

  1. 企業が設定したブラウザにインストールする必要がある企業のルート証明書のセットを取得します。 Chromeでは、[設定]に移動し、[詳細設定を表示]をクリックし、[証明書の管理]を選択できるHTTPS/SSLまで下にスクロールできます。私の組織は、それらを信頼されたルート証明機関に置き、組織にちなんで命名しました。それぞれ(2つあります)、1つずつエクスポートします。 DER形式を選択し、以下の手順2を実行して[〜#〜] pem [〜 #〜]、またはBase-64エンコードx.509(.CER)を選択して、単に。pemに拡張し、ステップ2をスキップします。

  2. 既知の場所に保存したら、ダックとして保存しない限り、PEM形式に変換する必要があります。これを行うために見つけた最も簡単な方法は、Dockerクイックスタートターミナル内からopenssl.exe [1]コマンドを実行することでした。

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  3. .pemファイルを取得したら、Dockerマシンがアクセスできる場所にそれらをコピーします。通常、MS Windowsの場合、ホストマシンの/ c/Usersがドッカーマシン内に自動的にマウントされます。 c:\ Users \my.username\ certsにディレクトリを作成し、そこにコピーしました。

  4. このステップは厳密には必要ではないかもしれませんが、それは私がやったことであり、動作します。これらの証明書を永続的なboot2dockerパーティションにコピーする必要があります。デフォルトのマシンに接続しています。これはISステップ5で必要なことです。

    MINGW64:$ docker-machine ssh default
    
    docker@default:~$ Sudo -s
    root@default:/home/docker# mkdir /var/lib/boot2docker/certs
    root@default:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/
    
  5. 次に、システムが起動するたびに証明書を適切な場所にコピーするbootlocal.shスクリプトを作成します。[2]まだ行っていない場合は、手順4でマシンへのSSH接続を開きます。

    touch /var/lib/boot2docker/bootlocal.sh && chmod +x /var/lib/boot2docker/bootlocal.sh
    vi /var/lib/boot2docker/bootlocal.sh
    

    以下を挿入して、ファイルを保存します。

    #!/bin/sh
    
    mkdir -p /etc/docker/certs.d && cp /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d
    
  6. マシン内からリブートコマンドを使用するか、Dockerターミナルからdocker-machineコマンドを使用して、マシンを再起動します。

    docker-machine restart default
    

これで、「hello-world」などを実行できるはずです。これがお役に立てば幸いです。


ソース

[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem

[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-18911204

73
Aaron Helton

Firefoxでこれを行うには、URLに移動します。 https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io 、クリック証明書の詳細を表示し、crtとして抽出します。

ファイルをVMにコピーします。osはcrtを保存します。

CentOS

etc/pki/ca-trust/source/anchors/
# Then run
update-ca-trust force-enable
update-ca-trust extract

Ubuntu

/usr/share/ca-certificates
#Then run
Sudo dpkg-reconfigure ca-certificates

Dockerを再起動すると、動作するはずです

2

証明書をエクスポートするには、ファイル形式を「Base-64 encoded x.509(.CER)」として選択し、最後に証明書拡張子の名前を「。pem」に変更します。

1
QiJie Zhang