web-dev-qa-db-ja.com

SSL証明書を変更するプロキシの背後にあるDocker

次のdockerコマンドを実行しようとしています。

docker run -i -t ubuntu /bin/bash

しかし、私はエラーが出ます:

Unable to find image 'ubuntu' (tag: latest) locally

Pulling repository ubuntu
2013/11/28 14:00:24 Get https://index.docker.io/v1/images/ubuntu/ancestry: x509: certificate signed by unknown authority

私たちの会社がhttpsリクエストのためにその場でSSL証明書を置き換えることを知っています。

私の会社のCA証明書を次のように入力して信頼しようとしました。

 /etc/pki/tls/certs/ca-bundle.crt

そして

/etc/pki/tls/cert.pem

しかし、それはまだ機能していません。

何か案は?

18
reen

Dockerをプロキシシステムで動作するように設定するには、最初にHTTPS_PROXY/HTTP_PROXY環境変数をdocker sysconfigファイルに追加する必要があります。ただし、init.dまたはサービスツールのどちらを使用するかに応じて、「export」ステートメントを追加する必要があります。回避策として、両方のバリアントをdockerのsysconfigファイルに追加するだけです。

/etc/sysconfig/docker

HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"

Dockerがsslインターセプトプロキシで動作するようにするには、プロキシルート証明書をシステムのトラストストアに追加する必要があります。

CentOSの場合、ファイルを/ etc/pki/ca-trust/source/anchors /にコピーし、caトラストストアを更新します。その後、Dockerサービスを再起動します。プロキシがNTLM認証を使用している場合-cntlmなどの中間プロキシを使用する必要があります。 このブログ投稿では詳細に説明しています

7

@jpetazzoの答えは全体的に正しいですが、同じことを実行するより良い方法があります(ca-bundleファイルを手動で編集する必要はありません)。

  • centOS:

    Sudo cp yourcert.crt /etc/pki/ca-trust/source/anchors/
    Sudo update-ca-trust extract
    Sudo service docker restart
    
  • debianの場合:

    Sudo cp yourcert.crt /usr/local/share/ca-certificates/
    Sudo update-ca-certificates
    Sudo service docker restart
    

Dockerデーモンを再起動する必要があることに注意してください!

13

http://golang.org/src/pkg/crypto/x509/root_unix.go によると、次のいずれかに証明書を追加する必要があります。

  • /etc/ssl/certs/ca-certificates.crt
  • /etc/pki/tls/certs/ca-bundle.crt
  • /etc/ssl/ca-bundle.pem
  • /etc/ssl/cert.pem
  • /usr/local/share/certs/ca-root-nss.crt

システムに存在するものを見つけ、それに証明書を追加します。

(そして、そのファイルを含むパッケージをアップグレードするとき、再びそれをする準備ができている...)

より良い方法があるといいのですが、これが私がこれまでに見つけた唯一の方法です:-)

13
jpetazzo