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

推薦する

vue.js を使用してドラッグ アンド ドロップ機能を実装する方法

序文ドラッグ アンド ドロップ機能を追加すると、プログラムがより自然でユーザーフレンドリーになります...

Vueでjsonpを使用する方法

目次1. はじめに2. インストール3. 使用4. vueファイルの使用1. はじめに最近、手書き入...

MySQLの一般的なバックアップコマンドとシェルバックアップスクリプトの共有

複数のデータベースをバックアップするには、次のコマンドを使用できます。 mysqldump -uro...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

MySql データベースにおける単一テーブル クエリと複数テーブル結合クエリの効率の比較

この間、プロジェクトに取り組んでいるときに、データ間の接続が非常に複雑なモジュールに遭遇しました。テ...

Dockerコンテナでアプリケーションサービスを自動的に起動する方法の例

コンテナの起動時に Docker コンテナ内のアプリケーション サービスを自動的に起動する場合。 D...

初心者がHTMLタグを学ぶ(2)

関連記事:初心者が学ぶ HTML タグ (1)初心者は、いくつかの HTML タグを理解することで ...

外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介

MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

JavaScriptの詳細な説明 thisキーワード

目次1. はじめに2.これを理解する3. これは誰ですか? 4.矢印関数はさらに読む要約する1. は...

MySQL が UNION を使用して 2 つのクエリを接続できない理由の詳細な説明

概要連合接続データセットキーワードは、2つのクエリ結果セットを1つに連結し、同一のレコードを除外する...

antd ツリーと親子コンポーネント間の値転送問題について (React のまとめ)

プロジェクト要件: 製品ツリー ノードをクリックすると、そのノードのすべての親ノードが取得され、表に...

docker を使用して kafka プロジェクトをデプロイする Centos6 方法の分析

この記事では、Docker を使用して Centos6 に Kafka プロジェクトをデプロイする方...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

Linux で実行可能ファイルを実行するときに「そのようなファイルまたはディレクトリはありません」というプロンプトが表示される場合の解決策

最近、Linux オペレーティング システムを使用して実行可能ファイルを実行していたところ、「そのよ...