2016-11-18 11 views
1

TLS認証についての知識は非常に限られています。ドッカーデーモンにhttpsを有効にしたかったのです。私はthisチュートリアルに続いたが、最終的にドッカーデーモンの起動に失敗した。DockerでTLSが失敗しました

私はUbuntu 16.04 VMでドッカーを使用しています。クライアントとサーバーは同じマシンです。だから私はすべてのプロセスの間に 'Common Name'として$hostnameを使用します。

私は

sudo dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 

を実行したときにドッキングウィンドウのドキュメントの全体のプロセスを以下の後、私は情報を取得 "API listen on [::]:2376"

私は以下のコマンドを使用すると、そのログ:

docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version 

をI適切な応答を得る。

しかし、私はデーモンをリロードし、ドッキングウィンドウを起動しようとすると、それは言うがドッキングウィンドウを起動すると「journalctl -xe」は以下のmessage-

Job for docker.service failed because the control process exited with error code. 
See "systemctl status docker.service" and "journalctl -xe" for details. 

出力を与えることができなかったです。
enter image description here

必要な証明書を~/.docker/にコピーし、/lib/systemd/system/docker.serviceファイルの「ExecStart」は:

ExecStart=/usr/bin/dockerd -H fd:// -H 0.0.0.0:2376 \ 
    --tlsverify --tlscacert=/home/sakib/.docker/ca.pem \ 
    --tlskey=/home/sakib/.docker/key.pem \ 
    --tlscert=/home/sakib/.docker/cert.pem 
です

が、私は次の応答を取得するAPIと通信しようとすると:

$ curl -X GET https://0.0.0.0:2376/images/json 

curl: (35) gnutls_handshake() failed: Certificate is bad 

$ docker version 

Client: 
Version:  1.12.1 
API version: 1.24 
Go version: go1.6.3 
Git commit: 23cf638 
Built:  Thu Aug 18 05:33:38 2016 
OS/Arch:  linux/amd64 
An error occurred trying to connect: Get https://EL802:2376/v1.24/version: x509: certificate is valid for $HOST, not EL802 

注:EL802は、私は「ホスト」環境変数として設定私のホスト名です。

クライアント証明書を作成する際に選択した「CN」という名前が問題だと思います。私のクライアントとサーバは、私が$HOSTとして設定私のホストマシン(EL802)であるとして

openssl req -subj '/CN=$HOST' -new -key key.pem -out client.csr 

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr    

はクライアント:私はbelow-

サーバーとして、サーバーとクライアント証明書を作成します変数。

答えて

1

あなたの絵は完全なエラー行が表示されませんが、エラーメッセージがある場合:

pid file found, ensure docker is not running or delete /var/run/docker.pid 

は試してみて、削除のpidを、そして再起動してください。
また、docker installation on Ubuntuとそのsystemd configurationも再確認してください。

X509:証明書は、代わりにその実際の値の文字列$ HOSTを使用して作成された証明書を意味しないEL802

の$ HOSTに対して有効です。単一引用符の引用

openssl req -subj '/CN=$HOST' 

強いが、その値で$HOSTを置き換えるためにシェルを防止するであろう。二重引用符を使用してください。

+0

PIDの問題をありがとう。写真を撮るのは間違いだった。私は問題を編集しました。私の主な問題は、実際にはserver/clientのCSRを作成する際に選択したCNの名前です。しかし、私は私はそれに応じて私の答えを編集した任意のドメイン(EX- XXcom) –

+0

@zamansakibに属していないシンプルなVMを使用していたときに、サーバー/クライアントのFQDN名(例:CN名)がどうあるべきか分かりません。 – VonC

+0

ソリューションのおかげで、それは、新たなエラーが発生します。私はこれについて新しい問題を作り出すべきかどうか確信していません。 APIに接続しようとすると、次のような警告が表示されます。これはかなり奇妙です。 $カールます。https:// $のHOST: \ 2376 /画像/ JSON> --cert〜/ .docker/cert.pemを\ > --key〜/ .docker/key.pem \ > SSL:証明書サブジェクト名(EL802)がターゲットホスト名 'EL802'と一致しません –

関連する問題