はじめに
タイトルの通りです。
ブラウザで https://localhost/
で html ファイルが閲覧できるようになるところをゴールとします。
確認環境
- WSL2(Ubuntu22.04.3 LTS)
- Docker (24.0.6)
- Docker Compose (2.4.1)
- Apache 2.4.58
※Apache については こちら の環境ベースで書き進めます
設定方法
秘密鍵と証明書ファイルを作成
既存の設定ファイル conf/extra/httpd-ssl.conf
のデフォルト設定で鍵と認証ファイルのパスが
/usr/local/apache2/conf/server.crt
/usr/local/apache2/conf/server.key
になっているため、このパスの通りにファイルが配置されるように進めます
shell実行
# 設定ファイルのフォルダに移動(事前にプロジェクトフォルダに移動)
cd conf
# RSA 暗号方式の秘密鍵を作成
openssl genrsa 2048 > server.key
# 作成した秘密鍵からCSR(証明書署名要求)ファイルを作成
openssl req -new -key server.key > server.csr
# 自己署名証明書(CRT)を作成
openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
# 不要なCSRファイルを削除
rm server.csr
Apacheの設定
conf/httpd.conf ※以下をコメントアウト
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
compose.ymlの設定
composeファイルに、443ポートからアクセスできるように修正
compose.yml
ports:
- '443:443'
※80は削除した方が良い
※すでにコンテナを起動している場合は、再作成が必要
確認方法
ブラウザで https://localhost/
に対してアクセスする
※初回は、セキュリティの警告が出るが無視して接続する
※Locationのプロキシ設定も巻き込んで、httpsで接続できるようになります
おまけ
conf/extra/httpd-ssl.conf
を有効にせず conf/httpd.conf
に対して直接記載したい場合は、
Listen 443
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
</VirtualHost>
のみを末尾に追加しても接続可能
参考
最後に
設定ファイルがあらかじめ用意されているのは良いかもですが、module有効設定は調べるのが面倒です…
Nginxでは違った面倒さみたいなものがありますかね…