こんにちは!今回は、Dockerコンテナ環境でローカルホストをHTTPS化する方法について詳しく解説していきます。
目的 :
ローカルホストをhttps化したい (例: localhost:8080 -> https://localhost:8080)
前提
- ホストマシンはWindows10
- コンテナはDocker Desktopで作成している
ローカル開発でHTTPS化するメリット
開発環境でHTTPSを使用したいケースは多々あります。例えば:
- PWAの開発
- セキュアなAPIのテスト
- 本番環境に近い開発環境の構築
今回は、Docker環境でApacheを使用したHTTPS化の方法を紹介します。
HTTPS化手順の概要と予備知識
- OpenSSL で自己著名SSL証明書の作成
- Docker コンテナで証明書の設定
- ブラウザでの証明書の信頼設定
自己署名証明書とは
自己署名証明書とは、認証局(CA)を介さずに自分自身で作成・署名したSSL/TLS証明書のことです。
- 証明書の即時発行が可能
- コストがかからない
- 更新・再発行が容易
証明書の内容
データの暗号化
- 通信内容を暗号化
- パスワードやクレジットカード情報を安全に送信可能
改ざん防止
- データが途中で変更されていないことを保証
- 安全な通信を実現
OpenSSLとは
opensslコマンドは、ターミナルから直接実行できる暗号化関連のツールです。
主な用途は:
- 証明書の作成と管理
- 暗号鍵の生成
- ファイルの暗号化と復号化
- 証明書や鍵の内容確認
コマンドラインツール以外にもプログラミング言語でライブラリとして機能を利用することも可能です
自己署名証明書の作成
OpenSSLコマンドを使用して、自己署名証明書を作成します。
Windowsでopensslコマンドを使用する方法
opensslコマンドで自己署名SSL証明書を作成します。以下のコマンドを使用します:
openssl req -x509 -nodes -newkey rsa:2048 -addext "subjectAltName = DNS:localhost" -keyout localhost+2-key.key -out localhost+2.crt
このコマンドで以下のファイルが生成されます:
localhost+2.crt
:証明書ファイル
localhost+2-key.key
:秘密鍵ファイル
- 作業したいフォルダで右クリック
- 「Open Git Bash here」を選択
Apacheの設定
services:
web:
image: httpd:2.4
ports:
- "443:443"
volumes:
- ./conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./conf/server.crt:/usr/local/apache2/conf/server.crt
- ./conf/server.key:/usr/local/apache2/conf/server.key
Apacheの設定では、以下のモジュールを有効化する必要があります:
- ssl_module
- socache_shmcb_module
ブラウザでの証明書の信頼設定(NET::ERR_CERT_AUTHORITY_INVALID 解決策)
自己署名証明書を使用すると、ブラウザでNET::ERR_CERT_AUTHORITY_INVALID
エラーが表示されます。これを解決するには:
- 証明書ファイル(.crt)をダブルクリック
- 「証明書のインストール」をクリック
- 「ローカルコンピューター」を選択
- 「信頼されたルート証明機関」を選択
- インストールを完了
これにより、ブラウザが証明書を信頼するようになります。
キュリティに関する注意点
- 自己署名証明書は開発環境専用です
- 本番環境では必ず信頼された認証局から証明書を取得してください
- 証明書と秘密鍵の取り扱いには十分注意が必要です
まとめ
ローカル開発環境でHTTPSを使用することで、本番環境に近い開発が可能になります。ただし、自己署名証明書の使用は開発環境に限定し、本番環境では適切な証明書を使用することを忘れないようにしましょう。
Happy Coding! 🚀