Webアプリケーションの開発において、「Docker Compose」を使ったコンテナベースの環境構築は今や主流となっています。しかし、開発環境であってもセキュリティを軽視すると、社内ネットワーク内での情報漏洩や攻撃リスクを招きかねません。
特に、HTTPS(SSL/TLS)対応は開発環境でも重要です。ブラウザによる検証やAPIのCORSチェックなどでHTTPSが前提になっているため、本番を想定したテストにも不可欠です。
この記事では、SSL証明書を活用してDocker Composeで安全な開発環境を構築する方法を、初心者の方にもわかりやすく解説します。
なぜ開発環境にもSSL対応が必要なのか?
開発環境だからといってHTTPのままで運用していると、次のような問題が発生します。
🔒 問題点
- ブラウザが警告を出してAPI通信がブロックされる
- フロントエンドとバックエンドのCORS検証が正しく行えない
- 本番と環境が異なるため、事前テストの意味が薄れる
- 社内Wi-Fiなどを経由した平文通信が盗聴される可能性も
開発中でも「本番相当のセキュリティ設計」をすることは、後のトラブルを減らす重要な一歩です。
Docker Composeとは?かんたんにおさらい
Docker Composeは、複数のコンテナを一つの設定ファイル(docker-compose.yml)で一括管理できるツールです。Webアプリ、DB、キャッシュ、リバースプロキシなどを構成するときに便利です。
yamlversion: "3"
services:
web:
build: ./app
ports:
- "443:443"
volumes:
- ./certs:/etc/nginx/certs
ここにSSL証明書とNginxなどのリバースプロキシを組み合わせることで、安全なHTTPS対応が可能になります。
自己署名SSL証明書を使ってHTTPSを構築する手順
開発環境では、本番で使うような有償SSLは不要です。ここでは無料で簡単に使える自己署名証明書を生成し、Docker Compose環境に組み込む方法を解説します。
✅ ステップ1:OpenSSLで自己署名証明書を作成
まず、ローカルのcertsディレクトリで以下のコマンドを実行します。
bashmkdir 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
yamlversion: "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
nginxserver {
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再起動で証明書が消えた | ボリューム設定が未定義 | volumes で certs を永続化する |
まとめ
開発環境でのHTTPS対応は、もはやオプションではなく必要条件です。Docker Composeを活用し、自己署名SSL証明書とNginxを組み合わせれば、セキュリティも利便性も両立した開発環境が構築できます。
SSLの基礎を理解し、安全な環境の上で開発することは、本番トラブルを未然に防ぐ最大の手段です。小さな工夫が、信頼されるサービスの礎になります。


















