TLS暗号化通信を使用してDockerにリモート接続する詳細な例

TLS暗号化通信を使用してDockerにリモート接続する詳細な例

デフォルトでは、Docker はネットワーク化されていない UNIX ソケット上で実行されます。オプションの通信には HTTP ソケットを使用することもできます。
ネットワーク経由で Docker に安全にアクセスする必要がある場合は、信頼できる CA 証明書を指すように Docker フラグを指定して TLS を有効にすることができます。
デーモン モードでは、この CA によって署名された証明書によって認証されたクライアントからの接続のみが許可されます。クライアント モードでは、その CA によって署名された証明書を持つサーバーにのみ接続します。

# CA証明書ディレクトリを作成 [root@localhost ~]# mkdir tls
[root@localhost ~]# cd tls/
# CA キーを作成 [root@localhost tls]# openssl genrsa -aes256 -out ca-key.pem 4096
RSA秘密鍵の生成、4096ビット長の係数
..............................................................................................++
.............................................................................................................................................................................................................++
eは65537(0x10001)
ca-key.pem のパスフレーズを入力してください:
検証中 - ca-key.pem のパスフレーズを入力してください:
# CA 証明書を作成 [root@localhost tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
ca-key.pem のパスフレーズを入力してください:
[root@localhost tls]# ll
総投与量 8
-rw-r--r--. 1 ルート ルート 3326 12月3日 17:20 ca-key.pem
-rw-r--r--. 1 ルート ルート 1765 12月 3日 19:03 ca.pem
# サーバーの秘密鍵を作成 [root@localhost tls]# openssl genrsa -out server-key.pem 4096
RSA秘密鍵の生成、4096ビット長の係数
................................................................................++
...............++
eは65537(0x10001)
[root@localhost tls]# ll
総投与量 12
-rw-r--r--. 1 ルート ルート 3326 12月3日 17:20 ca-key.pem
-rw-r--r--. 1 ルート ルート 1765 12月 3日 19:03 ca.pem
-rw-r--r--. 1 ルート ルート 3243 12月3日 19:03 server-key.pem
# 秘密鍵に署名する [root@localhost tls]# openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
[root@localhost tls]# ll
総投与量 16
-rw-r--r--. 1 ルート ルート 3326 12月3日 17:20 ca-key.pem
-rw-r--r--. 1 ルート ルート 1765 12月 3日 19:03 ca.pem
-rw-r--r--. 1 ルート ルート 1574 12月3日 19:04 server.csr
-rw-r--r--. 1 ルート ルート 3243 12月3日 19:03 server-key.pem
CA証明書と秘密鍵で署名し、上記で設定したパスワードを入力します [root@localhost tls]# openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
署名OK
件名=/CN=*
CA秘密鍵の取得
ca-key.pem のパスフレーズを入力してください:
#クライアントキーを生成 [root@localhost tls]# openssl genrsa -out key.pem 4096
RSA秘密鍵の生成、4096ビット長の係数
...................................................................................................................................................++
..................................++
eは65537(0x10001)
#クライアントに署名 [root@localhost tls]# openssl req -subj "/CN=client" -new -key key.pem -out client.csr
# 設定ファイル [root@localhost tls] を作成# echo ExtendedKeyUsage=clientAuth > extfile.cnf
#証明書に署名 [root@localhost tls]# openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
署名OK
件名=/CN=クライアント
CA秘密鍵の取得
ca-key.pem のパスフレーズを入力してください:
[root@localhost tls]# ll
総投与量40
-rw-r--r--. 1 ルート ルート 3326 12月3日 17:20 ca-key.pem
-rw-r--r--. 1 ルート ルート 1765 12月 3日 19:03 ca.pem
-rw-r--r--。1 ルート ルート 17 12月 3 19:35 ca.srl
-rw-r--r--。1 ルート ルート 1696 12月 3日 19:35 cert.pem
-rw-r--r--. 1 ルート ルート 1582 12月 3日 19:29 client.csr
-rw-r--r--. 1 ルート ルート 28 12月3日 19:32 extfile.cnf
-rw-r--r--. 1 ルート ルート 3243 12月 3日 19:08 key.pem
-rw-r--r--. 1 ルート ルート 1647 12月 3日 19:08 server-cert.pem
-rw-r--r--. 1 ルート ルート 1574 12月3日 19:04 server.csr
-rw-r--r--. 1 ルート ルート 3243 12月3日 19:03 server-key.pem
# 不要なファイルを削除する [root@localhost tls]#

クライアントでのテスト

[root@client ~]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 バージョン
クライアント: Docker Engine - コミュニティ
 バージョン: 19.03.13
 APIバージョン: 1.40
 Goバージョン: go1.13.15
 Gitコミット: 4484c46d9d
 作成日: 2020年9月16日水曜日 17:03:45
 OS/アーキテクチャ: linux/amd64
 実験的: 偽

サーバー: Docker Engine - コミュニティ
 エンジン:
 バージョン: 19.03.13
 API バージョン: 1.40 (最小バージョン 1.12)
 Goバージョン: go1.13.15
 Gitコミット: 4484c46d9d
 作成日: 2020年9月16日水曜日 17:02:21
 OS/アーキテクチャ: linux/amd64
 実験的: 偽
 コンテナ:
 バージョン: 1.3.9
 Gitコミット: ea765aba0d05254012b0b9e595e995c09186427f
 ランク:
 バージョン: 1.0.0-rc10
 Gitコミット: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
 バージョン: 0.18.0
 Gitコミット: fec3683

以上で、TLS 暗号化通信を使用して Docker にリモート接続する方法についての説明は終了です。Docker への TLS 暗号化リモート接続の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerは安全なTLSリモート接続アクセスを可能にします
  • サーバーのDockerコンテナへのvscodeリモート接続を設定する方法
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • Docker で MySQL をインストールし、リモート接続を実装するチュートリアル
  • Docker はリモート接続のサンプルコードを実現するために MySQL をデプロイします
  • dockerデーモンのリモート接続設定の詳しい説明
  • Dockerリモート接続設定の実装例

<<:  Vueルーティングルーターの詳細な説明

>>:  Windows 10 システムで Mysql8.0.13 のルート パスワードを忘れる方法

推薦する

CSS の vertical-align プロパティとベースラインの問題に関する深い理解

vertical-align属性は、主にインライン要素の配置を変更するために使用されます。インライン...

Dockerfile における VOLUME と docker -v の違い

Dockerfile でのボリュームのマウントと docker -v コマンドによるマウントには明ら...

Centos は chrony 時間同期サーバー プロセス図を構築します

私の環境: 3 centos7.5 1804マスター 192.168.100.140ノード1 192...

Linux Zabbixカスタム監視およびアラーム実装プロセスの分析

ターゲットzabbix フロントエンド監視の iostat コマンドでデータの 1 つを表示します。...

CentOS8でyumソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

jQuery ツリービュー ツリー構造アプリケーション

この記事では、jQueryツリービューツリー構造のアプリケーションコードを例として紹介します。具体的...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

Linux リモート開発に vs2019 を使用する方法

通常、Linux プログラムを開発する場合、次の 2 つのオプションがあります。 Linux上で直接...

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

Linux での MySQL のアンインストールとインストールのグラフィック チュートリアル

ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...

ウェブページ読み込み時に左右にジャンプする原因の分析と解決

最近、ウェブサイトを設計するときにこの問題に遭遇しています。メンバーセンターを設計し、コンテンツを ...

Linux で特殊文字のファイル名やディレクトリを削除する方法

inode番号でファイルを削除するまずls -iを使用して、削除するファイルのinode番号を見つけ...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...