Docker で TLS と CA 認証を有効にする方法

Docker で TLS と CA 認証を有効にする方法

前書き: Docker がポート 2375 を直接開くのは安全ではありません。他のユーザーが接続する限り、何でもできます。以下は、Docker の TLS と CA 認証を有効にし、Jenkins と Portainer を使用して接続する方法です。

1. 証明書を生成する

サーバーのホスト名を確認する

ホスト名

docker-tls-ca.sh を自動生成します

# !/bin/bash

# ワンクリックで TLS 証明書と CA 証明書を生成# 作成日: 2021-08-25
# 更新日: 2021-08-25
# @著者: wuduoqiang

# サーバーホスト名 SERVER="6c377ffb8e86"
# パスワード PASSWORD="2cx&BUjsV4u%3TW9"
# 国 COUNTRY="CN"
# 省 STATE="海南省"
# 都市 CITY="海口"
# 組織名 ORGANIZATION="Xiao Qiangzi Company"
# 組織単位 ORGANIZATIONAL_UNIT="Little Qiangzi Unit"
# メール EMAIL="[email protected]"

# CA キーを生成する openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 2048

# CA 証明書を生成 openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca-cert.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

# サーバーキーを生成する openssl genrsa -out server-key.pem 2048

# サーバー証明書に署名するためのリクエストファイルを生成します openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr

# サーバー証明書を生成します openssl x509 -req -days 3650 -in server-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem

# クライアントキーを生成する openssl genrsa -out client-key.pem 2048

# クライアント証明書署名要求ファイルを生成する openssl req -subj '/CN=client' -new -key client-key.pem -out client-req.csr

# クライアント証明書を生成 sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
openssl x509 -req -days 3650 -in client-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out client-cert.pem -extfile extfile.cnf

# キーの権限を変更する chmod 0400 ca-key.pem server-key.pem client-key.pem
# 証明書の権限を変更する chmod 0444 ca-cert.pem server-cert.pem client-cert.pem
# 不要なファイルを削除します# rm ca-cert.srl client-req.csr server-req.csr extfile.cnf 

ファイルの説明

ca.srl: CA 証明書のシリアル番号レコード ファイルca-cert.pem: CA 証明書ca-key.pem: CA キーserver-key.pem: サーバー キーserver-req.csr: サーバー証明書署名要求ファイルserver-cert.pem: サーバー証明書client-key.pem: クライアント キーextfile.cnf: クライアント証明書拡張構成ファイルclient-req.csr: クライアント証明書署名要求ファイルclient-cert.pem: クライアント証明書

コマンド分析

# -subj /C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL
-subjは指定された証明書申請者の情報です。Cは国名です。
STは州または県名です
Lは地域名を表します
Oは組織名です
OUは組織単位名です
CNは一般名です
emailAddressはメールアドレスです

2. リモートを有効にする

DockerのリモートアクセスAPIを有効にする

# ファイルを編集する vim /etc/systemd/system/docker.service
# 内容を変更します。証明書の指定された場所に注意してください。ExecStart=/usr/bin/dockerd \
--tlsverify \
--tlscacert=/etc/docker/ca-cert.pem \
--tlscert=/etc/docker/server-cert.pem \
--tlskey=/etc/docker/server-key.pem \
-H unix:///var/run/docker.sock \
-H tcp://0.0.0.0:2375
# サービスを再起動します systemctl daemon-reload && systemctl restart docker 

キーと証明書がないと接続できません

docker -H 192.168.8.248:2375 イメージ

キーと証明書がないとホスト名を使用して接続することはできません。

docker -H 6c377ffb8e86:2375 イメージ

さらに、ホスト名を使用せずにキーと証明書を接続することはできません。

curl https://192.168.8.248:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem 

キーと証明書を追加し、ホスト名を使用してアクセスします

curl https://6c377ffb8e86:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem 

3. リモート接続

3.1 Jenkins接続

資格情報を追加する

情報を入力してください

接続をテストします。ここではホスト名を使用する必要があります。

JenkinsがDockerによってインストールされている場合は、ホスト名をマッピングする必要があります

バージョン: '3'
サービス:
  ジェンキンス:
    再起動: 常に
    イメージ: 192.168.8.247/xiaoqiangzai/jenkins:latest
    コンテナ名: jenkins
    ポート:
      - '8888:8080'
      - '50000:50000'
    ボリューム:
      - ./data/jenkins_home:/var/jenkins_home
      ./data/war/jenkins.war:/usr/share/jenkins/jenkins.war
    環境:
      JENKINS_OPTS: "--prefix=/jenkins"
    追加ホスト:
      - 「6c377ffb8e86:192.168.8.248」

3.2 ポーテナー接続

クライアントキーと証明書、およびCA証明書を選択します

接続OK

Portainerがdockerでインストールされている場合は、ホスト名をマッピングする必要があります

バージョン: '3'
サービス:
  ポーター:
    再起動: 常に
    画像: portainer/portainer-ce:latest
    コンテナ名: ポーテナー
    特権: true
    ポート:
      - '9000:9000'
    ボリューム:
      - ./データ/データ:/データ
      - ./data/public:/public
    追加ホスト:
      - 「6c377ffb8e86:192.168.8.248」

Docker で TLS と CA 認証を有効にする手順についてはこれで終わりです。Docker で TLS と CA 認証を有効にする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TLS暗号化通信を使用してDockerにリモート接続する詳細な例
  • docker リモート API のワンクリック TLS 暗号化の実装
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • Dockerは安全なTLSリモート接続アクセスを可能にします

<<:  HTML メタビューポート属性の詳細な説明

>>:  Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

推薦する

docker runコンテナの自動終了の解決策

今日、Dockerfile を使用してイメージを作成したときに問題が発生し、イメージの実行後にコンテ...

Dockerのローカルイメージ作成方法の分析

コンテナと呼ばれるものは、実際には親イメージに基づいて読み取りおよび書き込み可能なファイル階層を作成...

カレンダー効果を実現するJavaScript

この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

jsを使用して簡単なスネークゲームを書く

この記事では、参考までに、jsで書かれたシンプルなスネークゲームの具体的なコードを紹介します。具体的...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文信じてください。この記事の 7️⃣ ステップを覚えておけば、JS の this リファレンスを完...

Docker Swarmを使用してWordPressを構築する方法

原因かつて私は Vultr に WordPress を設定しましたが、よく知られている理由により、こ...

JavaScriptイテレータを学ぶ

目次導入js のイテレータはどのように見えるか反復プロトコル反復可能なプロトコルイテレータプロトコル...

Linux で大きなファイルの内容を消去または削除する 5 つの方法

Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...

HTML外部参照CSSファイルが効果を発揮しない理由の分析と解決

フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...

mysql8.0.14.zip のインストール中にデータ フォルダを自動的に作成できませんでした。サービスを開始できません。

今日システムを再インストールした後、コンピューターに mysql を再インストールし、ZIP ファイ...

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

MySQLの認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...

ドキュメントの場所の比較

<br />2 年前に PPK が投稿した素晴らしいブログ記事では、contains()...