Machine: ローカルVMDockerマシンにCA証明書をインストールするための推奨される方法

作成日 2015年09月03日  ·  34コメント  ·  ソース: docker/machine

通常、会社のルートCA証明書は、ITによって開発者のマシンとサーバーにインストールされます(OSには付属していません)。 ローカルVM(virtualbox)でDockerマシンを使用する場合、会社のネットワークでホストされているDockerレジストリと通信するために、VMに会社のルートCA証明書をインストールする必要がありますか?

ローカルVMにCA証明書をインストールするための推奨される方法は何ですか? ここでの答えの始まりのよう

また、中間企業のCAがある場合、推奨される方法は何ですか? すべての証明書をバンドルしますか?

areidentity

最も参考になるコメント

これには多くの掘り下げが必要であり、解決策は恥ずかしいほど単純です(しかし明白ではありません)。 そして、注意すべきことがいくつかあります。 答えはここにありました-しかし、あなたは別のアプローチへのコードセクションを過ぎて読む必要があります。

基本的に、CAトラストチェーンのpem(Base64エンコード)バージョンを/var/lib/boot2docker/certs/にコピーします。 caバンドルは使用できません。 boot2dockerブートスクリプトは、そこでpemファイルを自動的に取得し、それらをssl構成に追加します。 また、これは特別なディレクトリであり、再起動後も保持されます。

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

これはもっと簡単なはずなので、私はサポートします(#1799)。 さらに、(信頼チェーン全体のように)複数の証明書を簡単に追加できるように、pemファイルでいっぱいのディレクトリを指定できる必要があります。

全てのコメント34件

これも知りたいです。 手順(https://docs.docker.com/articles/https/)に従って、新しいCAと証明書を作成しました。 ファイル/ var / lib / boot2dockerと/ var / lib / boot2docker / tlsを配置しようとしましたが、生成した証明書を/etc/init.d/dockerstartスクリプトで上書きするのに問題があります。

これをもう少し調べてみると、docker-machineがホスト.docker / machine / machine / default内のすべてのものを生成した証明書で上書きするようです。 また、/ var / lib / boot2dockerのboot2dockervm内のファイルを置き換えます。 ログインしてvm内のファイルを置き換え、/ var / lib / boot2docker / profileを更新することは可能ですが、これは起動時にも置き換えられます(何によって置き換えられるかはわかりませんが、「docker-machine envdefault」によって置き換えられる可能性があります)。

@ooblesは、 --tls-ca-cert--tls-cert 、および--tls-keyオプションを使用して、既存の証明書を指定できるはずです。

docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vmと、コマンドは次のように失敗します。

Error creating machine: error generating server cert: crypto/tls: private key does not match public key

ここでのポイント(そしてほとんどの企業では推測できます)は、会社のCAを管理していないため、 --tls-ca-keyオプションを指定できないため、秘密鍵がわかりません。

ここで何が欠けていますか? これらのオプションは、自分のCAを管理し、自分の証明書に署名する人にのみ役立ちますか?

(VM上の)Dockerクライアントを会社のレジストリにdocker loginして、会社のCAによって署名された証明書を表示したいだけです。

何か助けはありますか?

ここで同じ問題がありますか?

+1。 私たちの組織でも同じ問題があります。

私が状況を回避する方法は次のとおりです。
レジストリサーバーの場合:

  1. Dockerドキュメントの状態として自己署名証明書を作成します。
  2. キーと証明書ファイルを連結する.pemファイルを作成します

Dockerマシンの場合:

  1. scpを介してpemファイルを[email protected] :/ home /
  2. ssh [email protected] (パスワード:tcuser)経由でpemファイルを/ var / lib / boot2docker / certs /に移動します
  3. Dockerマシンを再起動します

https接続からダウンロードすると、コンテナのビルドがunable to find valid certificationになります。 私の会社では、中間のZScaler CAルート証明書を使用し、PACファイルを使用してプロキシを自動的に構成しています。

これに+1。 既存のCA(証明書とキー)とクライアント証明書(証明書とキー)を再利用できる場合は、Docker-machineを使用してDockerエンジンに証明書をデプロイするときに、既存のTLSインフラストラクチャを再利用できるはずです。

  • --tls-server-cert
  • --tls-server-key
docker-machine create -d ... \
  --tls-ca-cert cacert.pem \
  --tls-ca-key cacert.key \
  --tls-client-cert local_user.pem \
  --tls-client-key local_user.key \
  --tls-server-cert server.pem \
  --tls-server-key server.key

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: failed to parse private key cacert.keyはパスワードで保護されているため、

+1

👍、これは私たちにとって主要なブロッカーです。 私たちの企業IT組織は、企業ファイアウォールの内側からパブリックインターネットに送信されるすべてのリクエストにカスタムHTTPS証明書を設定しているため、これらの証明書を正しく構成できなければ、コンテナーのDockerハブに接続することもできません。

誰かがこれに対する解決策をまだ見つけましたか? 私たちのエンタープライズITは、すべてのHTTPS証明書を置き換えるためにMitMを実行します。

やってみたら…
docker-machine --tls-ca-cert root.cer create --driver virtualbox default次のエラーがスローされます

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: private key does not match public key

マシンの作成時にtls証明書をスキップすることになりました。 作成したら
この機械:

docker-machine scp certfile default:ca.crt
docker-machinesshのデフォルト
sudo mv〜 / ca.crt /etc/docker/certs.d/docker.io/ca.crt

その後、それは動作するはずです。 mvの前にサブディレクトリをmkdirする必要があるかもしれません
指図。 必要に応じて、内部レジストリホストをdocker.ioに置き換えます。

2016年8月11日木曜日、AndyRuestowの[email protected]は次のように書いています。

誰かがこれに対する解決策をまだ見つけましたか? 私たちのエンタープライズITはMitMを実行します
すべてのHTTPS証明書を置き換えます。

やってみたら…
docker-machine --tls-ca-cert root.cer create --driver virtualbox default
次のエラーがスローされます

マシンの作成エラー:プロビジョニングの実行エラー:エラーの生成
サーバー証明書:crypto / tls:秘密鍵が公開鍵と一致しません


コメントしたのでこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/docker/machine/issues/1799#issuecomment -239175647、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM

+ 1 GEはZscalerを使用しており、MitM証明書のマングリングを行っており、Dockerは現在すべての開発者マシンで使用できません。

+1、今もこれを解決しようとしています。

+1、これも企業環境で解決しようとしています

+1も企業環境であり、プロキシはMitM証明書のマングリングを行います。 証明書をインストールする方法が必要です。

これには多くの掘り下げが必要であり、解決策は恥ずかしいほど単純です(しかし明白ではありません)。 そして、注意すべきことがいくつかあります。 答えはここにありました-しかし、あなたは別のアプローチへのコードセクションを過ぎて読む必要があります。

基本的に、CAトラストチェーンのpem(Base64エンコード)バージョンを/var/lib/boot2docker/certs/にコピーします。 caバンドルは使用できません。 boot2dockerブートスクリプトは、そこでpemファイルを自動的に取得し、それらをssl構成に追加します。 また、これは特別なディレクトリであり、再起動後も保持されます。

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

これはもっと簡単なはずなので、私はサポートします(#1799)。 さらに、(信頼チェーン全体のように)複数の証明書を簡単に追加できるように、pemファイルでいっぱいのディレクトリを指定できる必要があります。

@rpomeroyどうもありがとう、私はすべて同じことをしていましたが、VMの再起動が必要であることを知りませんでした。そのため、証明書を

Docker forWindowsの修正

@rpomeroyありがとうございます。会社のルートCAを/etc/docker/certs.d/hostname/に物を入れる必要がありますか

スレッドで前述したように、boot2dockerの下にあるLinuxディストリビューションは基本的に不変であるため、/ etc / docker / certsにデータを入れても存続しません。 var / lib / boot2docker / certsのみが変更可能で永続的です。 このすべての情報は、新しいバージョンのboot2dockerで再確認する必要がある場合があることに注意してください。

Windows 7 + VirtualBox(v5.2.6)+ Docker Toolbox(Boot2Dockerバージョン18.02.-ce)を実行していますが、同じ問題が発生しました。
たとえば、コンテナを実行しようとすると、次のエラーが発生します。
docker run ubuntu / bin / echo'Hello world '
画像 ' ubuntu:latest 'がローカルに見つかりません
C:\ Program Files \ Docker Toolboxdocker.exe:デーモンからのエラー応答: https ://registry-1.docker.io/v2/を取得:x509:不明な機関によって署名された証明書。
「C:\ ProgramFiles \ Docker Toolboxdocker.exerun--help」を参照してください。

次の解決策が私のために働いた:

  1. デフォルトのDockerVMにログインします
  2. 会社のルート証明書をダウンロードする
  3. 新しいディレクトリを作成します。
    sudo mkdir / var / lib / boot2docker / certs
  4. 会社のルート証明書を新しく作成したフォルダーにコピーします。
    sudo cp Root-Ca1.crt Root-Ca2.crt / var / lib / boot2docker / certs
  5. デフォルトのVMを再起動します
    今、それは画像を引っ張っています:)

@kvvoroninaimはあなたと同じ問題に直面しています。 代わりに、Win8.1でDockerツールボックスを実行しています
私はあなたのステップを使おうとしています。 ただし、直接接続を使用しています(つまり、手順2と4で会社のルート証明書を提供できません)。 これを解決する方法は? ありがとう

こんにちは、

ゴーストに感謝します。これで動作し、画像を取得できるようになりました。
しかし、この例のイメージをビルドすることはできません: https
このエラーを取得します:
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt ---> Running in b700eb53b7b2 Collecting Flask (from -r requirements.txt (line 1)) Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAI LED] certificate verify failed (_ssl.c:726)'),)': /simple/flask/
その問題はありますか?

Ubel、私は同じ問題を抱えています。プルするイメージを取得しましたが、Dockerを使用してイメージを構築することはできません。ウォークスルーを開始します。 問題を克服することができましたか?

@cmenjivar :いいえ、まだ同じ問題があります...

@Ubel :Dockerfileで、1つではなく3つすべてのホストされたPythonホストを追加するだけで解決策を見つけました...

RUN pip install --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org -r requirements.txt

@cmenjivar :あなたの助けに感謝します。 それは私のためにも働いています。

今、私はnugetパッケージのURLで同じことを試す必要があります

誰かがWindowsホストとWindowsコンテナ用にこれを更新できますか?

その価値については、 @ rpomeroyが正しい答えを持っています...

Windowsを使用している場合は、「Dockerクイックスタートターミナル」で次のコマンドを発行して、適切な環境を確保します。 「$」はプロンプトです。その部分を貼り付けないでください。 以下のコマンドを実行する前に、 cd ~/Downloadsを発行してダウンロードフォルダーに移動することをお勧めします。 追加する必要のある認証局(中間またはその他)ごとに、2つの中間ステップ(corp-ca.pem)を繰り返すことができ、それらに異なる名前を付けるだけです。 ワイルドカードを使用することもできます。たとえば、corp-ca-root.pem、corp-ca-intermediate.pem、およびcorp-issuing-ca.pemがある場合はcorp-*.pemです。

上記の@rpomeroyからコピー:

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

--tls-cert、-tls-key、および--tls-ca-certを使用しようとしているユーザーは、誤ったオプションを使用しています。 これらは、Dockerクライアントとサーバー間の認証用です。

私が言いたい唯一のポイントは、/ etc内のファイルシステムは実際には「不変」ではなく、実際には「エフェメラル」(tmpfs)であり、再起動するたびに消えることを意味します。 / var / lib / boot2docker / certsの情報は、/ etc / docker / certsの正しい場所に再入力されます...

とにかく、docker-machineがホストシステムが信頼する証明書を自動的に信頼するのであれば、それは素晴らしいことです。

このソリューションを残して、boot2dockerセットアップでのみ機能し、Docker for Windows(Hyper-V)セットアップでは機能しないと考えている人にとっては、この( @rpomeroyのソリューション)も完全に機能しているように見えます。 このスレッドは、Docker for Windows環境に固有のものではなかったため、半ダース回読んで却下したに違いありません。

@rpomeroyのソリューションは、boot2dockerとDocker forWindowsの両方で機能します。

Dockerコンテナの/ etc / pki / ca-trust / source / anchorsディレクトリ内に会社の.cer証明書をアップロードし、以下のコマンドを入力しました。

update-ca-trust enable
update-ca-trust

上記の手順を実行した後、curlから必要な出力を取得できました

ただチャイムを鳴らします。

コンテナにこれらのマウントの両方を追加すると、ほとんどの構成で機能するようです。

    volumes:
      - /etc/ssl/certs:/etc/ssl/certs
      - /usr/share/ca-certificates:/usr/share/ca-certificates

Windowsは別の話です。可能であれば、WindowsDockerホストの使用は避けたいと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価