Docker レジストリ用の自己署名 SSL 証明書の生成方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

あなたのDockerレジストリをセキュアにすることは、コンテナイメージの整合性を維持し、Dockerベースのアプリケーションの安全性を確保するために重要です。このチュートリアルでは、Dockerレジストリ用の自己署名SSL証明書を生成するプロセスを案内します。これにより、Dockerクライアントとレジストリの間に信頼できる接続を確立できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/pull -.-> lab-411544{{"Docker レジストリ用の自己署名 SSL 証明書の生成方法"}} docker/tag -.-> lab-411544{{"Docker レジストリ用の自己署名 SSL 証明書の生成方法"}} docker/push -.-> lab-411544{{"Docker レジストリ用の自己署名 SSL 証明書の生成方法"}} docker/login -.-> lab-411544{{"Docker レジストリ用の自己署名 SSL 証明書の生成方法"}} docker/build -.-> lab-411544{{"Docker レジストリ用の自己署名 SSL 証明書の生成方法"}} end

自己署名SSL証明書の理解

SSL(Secure Sockets Layer)証明書は、クライアントとサーバーの間にセキュアな接続を確立するために使用されます。これにより、両者間で送信されるデータが暗号化され、不正アクセスから保護されます。自己署名SSL証明書は、信頼された証明機関(CA)によって署名されるのではなく、同じエンティティによって作成および署名されるSSL証明書の一種です。

自己署名SSL証明書は、CA署名証明書を取得するコストと複雑さが不要な開発やテスト環境でよく使用されます。信頼されたCAが利用できない場合や、組織が証明書管理プロセスをよりコントロールしたい場合にも使用できます。

ただし、自己署名SSL証明書は、デフォルトではWebブラウザやその他のクライアントによって信頼されません。クライアントが自己署名証明書に遭遇すると、通常、証明書が信頼されていないことを示す警告メッセージが表示されます。これは、セキュアな接続に依存するWebアプリケーションやその他のサービスに問題を引き起こす可能性があります。

本番環境で自己署名SSL証明書を使用するには、アプリケーションまたはサービスにアクセスするすべてのクライアントによって証明書が信頼されることを確認する必要があります。これは、自己署名証明書をクライアントに配布し、証明書を信頼するように構成することで行うことができます。

Dockerレジストリのコンテキストでは、自己署名SSL証明書を使用することは実用的なソリューションになります。特に、組織内でプライベートレジストリを実行している場合には、自己署名証明書を生成してDockerに設定することで、信頼されたCA署名証明書を必要とせずに、Dockerクライアントとレジストリの間の通信をセキュアにすることができます。

Dockerレジストリ用の自己署名SSL証明書の生成

前提条件

自己署名SSL証明書を生成する前に、以下の前提条件を満たしていることを確認してください。

  • Linuxベースのシステム(この例ではUbuntu 22.04を使用)
  • OpenSSLがインストールされている(多くのLinuxディストリビューションでは通常事前にインストールされている)

自己署名SSL証明書を生成する手順

  1. Ubuntu 22.04システムでターミナルを開きます。

  2. SSL証明書用の秘密鍵を生成します。

openssl genrsa -out registry.key 2048
  1. 秘密鍵を使用して自己署名SSL証明書を生成します。
openssl req -new -x509 -key registry.key -out registry.crt -days 365

このコマンドは、証明書の共通名(CN)など、証明書に関するさまざまな詳細を入力するように促します。この共通名は、Dockerレジストリのホスト名またはIPアドレスと一致する必要があります。

  1. 生成された証明書を検証します。
openssl x509 -in registry.crt -text -noout

これにより、生成された自己署名SSL証明書の詳細が表示されます。

  1. (任意)Dockerレジストリにカスタムドメイン名を使用したい場合は、Dockerクライアントが実行されるシステムの/etc/hostsファイルを更新して、ドメイン名をDockerレジストリのIPアドレスにマッピングします。
graph LR A[Generate Private Key] --> B[Generate Self-Signed SSL Certificate] B --> C[Verify Certificate] C --> D[Update /etc/hosts (Optional)]

これらの手順に従うことで、Dockerレジストリをセキュアにするために使用できる自己署名SSL証明書を生成しました。次のステップは、Dockerにこの自己署名証明書を使用するように構成することです。

自己署名証明書を使用するようにDockerを構成する

自己署名証明書をDockerホストにコピーする

  1. 前の手順で生成したregistry.crtファイルをDockerホストにコピーします。ファイル転送ツールやscpコマンドを使ってファイルをコピーできます。
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt

user@docker-hostを適切なユーザーとDockerホストのホスト名またはIPアドレスに置き換え、myregistry.example.comをDockerレジストリのホスト名またはIPアドレスに置き換えてください。

自己署名証明書を使用するようにDockerを構成する

  1. Dockerホストで、自己署名証明書用のディレクトリを作成します。
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
  1. registry.crtファイルを新しく作成したディレクトリにコピーします。
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
  1. Dockerデーモンを再起動して変更を適用します。
sudo systemctl restart docker

構成を検証する

  1. Dockerクライアントを使ってDockerレジストリからイメージをプルしてみます。
docker pull myregistry.example.com/my-image:latest

構成が正しければ、DockerクライアントはSSL/TLS関連のエラーなしでレジストリに接続できるはずです。

graph LR A[Copy Certificate to Docker Host] --> B[Create Certificate Directory] B --> C[Copy Certificate to Directory] C --> D[Restart Docker Daemon] D --> E[Verify Configuration]

これらの手順に従うことで、Dockerレジストリ用に自己署名SSL証明書を使用するようにDockerを構成しました。これにより、信頼された証明機関によって署名されていない証明書であっても、Dockerクライアントとレジストリの間の通信がセキュアになります。

まとめ

このチュートリアルで紹介した手順に従えば、Dockerレジストリ用の自己署名SSL証明書を生成し、Dockerに証明書を使用するように構成し、Dockerクライアントとレジストリの間のセキュアな通信を確保できます。これにより、Dockerベースのインフラストラクチャのセキュリティを強化し、全体的なDocker展開プロセスを円滑に進めることができます。