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 のルート パスワードを忘れる方法

推薦する

MySQL 8.0.19 インストールチュートリアル

公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...

Centos7 の起動プロセスと Systemd での Nginx の起動構成

Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...

Mysql論理アーキテクチャの詳細な説明

1. 全体的なアーキテクチャ図他のデータベースと比較すると、MySQL は、そのアーキテクチャがさま...

Vue 親コンポーネントが子コンポーネント関数の実装を呼び出す

Vue親コンポーネントは子コンポーネントの関数を呼び出す親コンポーネントはイベントを通じて子コンポー...

ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン

いわゆるファビコンは、Favorites Icon の略で、中国語ではウェブサイトアバターと呼ばれて...

ChromeとIEに対応したWMPに埋め込まれたHTMLの詳細な紹介

実際には、対応する記述方法は多数ありますが、最も一般的なのは object + embedded で...

Vue の基本入門: Vuex のインストールと使用

目次1. vuexとは何か2. インストールと導入3. vuexの使用4. プロセスの紹介5. 突然...

Linux でタイムアウト付きの接続関数を試す

前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...

iframe の src を about:blank に設定した後の詳細

iframe の src を 'about:blank' に設定した後、"...

MySQLデータベース入門:マルチインスタンス構成方法の詳しい説明

目次1. マルチインスタンスとは2. 複数インスタンスのインストールの準備3. MYSQLの複数イン...

CSS 要素の非表示の原則と display:none および visibility:hidden

1. CSS 要素の非表示<br />CSS では、要素を非表示にする (つまり、画面の...

Centos7でのSambaサーバー構成(実戦)

サンバの概要Samba は、Linux および UNIX システム上で SMB プロトコルを実装する...

Flask アプリケーションの Docker デプロイ実装手順

1. 目的Flask アプリケーションをローカルで作成し、Docker でパッケージ化し、独自のサー...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...

LinuxでIPアドレスを手動で設定するための詳細な手順

目次1.まずネットワークカードの設定ディレクトリに入る2. ifcfg-ens33ネットワークカード...