SSL証明書とDocker Composeで構築する安全な開発環境設定法

SSL記事

Webアプリケーションの開発において、「Docker Compose」を使ったコンテナベースの環境構築は今や主流となっています。しかし、開発環境であってもセキュリティを軽視すると、社内ネットワーク内での情報漏洩や攻撃リスクを招きかねません。

特に、HTTPS(SSL/TLS)対応は開発環境でも重要です。ブラウザによる検証やAPIのCORSチェックなどでHTTPSが前提になっているため、本番を想定したテストにも不可欠です。

この記事では、SSL証明書を活用してDocker Composeで安全な開発環境を構築する方法を、初心者の方にもわかりやすく解説します。


NordVPN

なぜ開発環境にもSSL対応が必要なのか?

開発環境だからといってHTTPのままで運用していると、次のような問題が発生します。

🔒 問題点

  • ブラウザが警告を出してAPI通信がブロックされる
  • フロントエンドとバックエンドのCORS検証が正しく行えない
  • 本番と環境が異なるため、事前テストの意味が薄れる
  • 社内Wi-Fiなどを経由した平文通信が盗聴される可能性も

開発中でも「本番相当のセキュリティ設計」をすることは、後のトラブルを減らす重要な一歩です。


Docker Composeとは?かんたんにおさらい

Docker Composeは、複数のコンテナを一つの設定ファイル(docker-compose.yml)で一括管理できるツールです。Webアプリ、DB、キャッシュ、リバースプロキシなどを構成するときに便利です。

yaml

version: "3"
services:
web:
build: ./app
ports:
- "443:443"
volumes:
- ./certs:/etc/nginx/certs

ここにSSL証明書とNginxなどのリバースプロキシを組み合わせることで、安全なHTTPS対応が可能になります。


自己署名SSL証明書を使ってHTTPSを構築する手順

開発環境では、本番で使うような有償SSLは不要です。ここでは無料で簡単に使える自己署名証明書を生成し、Docker Compose環境に組み込む方法を解説します。


✅ ステップ1:OpenSSLで自己署名証明書を作成

まず、ローカルのcertsディレクトリで以下のコマンドを実行します。

bash

mkdir certs
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout certs/server.key \
-out certs/server.crt \
-days 365 \
-subj "/CN=localhost"

これで、server.key(秘密鍵)と server.crt(証明書)が生成されます。


✅ ステップ2:Docker Composeの設定(例:Nginx + Node.js)

以下は、Node.jsアプリをNginxでリバースプロキシし、HTTPS通信を実現する構成です。

📄 docker-compose.yml

yaml

version: "3.8"
services:
web:
build: ./web
expose:
- "3000"

nginx:
image: nginx:latest
ports:
- "443:443"
volumes:
- ./certs:/etc/nginx/certs
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web

📄 nginx.conf

nginx

server {
listen 443 ssl;
server_name localhost;

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;

location / {
proxy_pass http://web:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

この構成により、https://localhost でアクセス可能な開発環境が完成します。


✅ ステップ3:ブラウザに証明書を信頼させる(任意)

自己署名証明書は初回アクセス時に警告が表示されます。もし毎回の警告を避けたい場合は、ローカルのブラウザやOSに証明書をインポートして「信頼済み」とすることが可能です。

  • macOS:キーチェーンアクセスにドラッグ&ドロップ
  • Windows:証明書スナップインで「信頼されたルート」に登録

さらに安全性を高めるための工夫

✅ クライアント証明書(双方向認証)

より強固な環境を求めるなら、**クライアント証明書による双方向認証(mTLS)**も開発環境で試しておくとよいです。

✅ Let’s Encrypt のステージング証明書で練習

本番運用を視野に入れて、Let’s Encrypt のACMEステージング環境で証明書発行フローを練習するのも有効です。


よくあるトラブルと対処法

トラブル原因解決策
鍵マークが出ない中間証明書が不足、HTTPSでないURLを呼んでいるnginx設定とリソース読み込みURLを確認
“NET::ERR_CERT_AUTHORITY_INVALID”自己署名証明書が信頼されていないローカルにCA証明書を追加
Docker再起動で証明書が消えたボリューム設定が未定義volumescerts を永続化する

まとめ

開発環境でのHTTPS対応は、もはやオプションではなく必要条件です。Docker Composeを活用し、自己署名SSL証明書とNginxを組み合わせれば、セキュリティも利便性も両立した開発環境が構築できます。

SSLの基礎を理解し、安全な環境の上で開発することは、本番トラブルを未然に防ぐ最大の手段です。小さな工夫が、信頼されるサービスの礎になります。

タイトルとURLをコピーしました