Ubuntu 26.04 の Apache で HTTPS を扱う場合、証明書と秘密鍵を配置し、ssl モジュールを有効化し、443 番ポート用の VirtualHost を設定します。
この記事では、Apache の基本設定ができている前提で、TLS 設定、証明書ファイルの確認、protocol / cipher 設定、HTTP から HTTPS への誘導、ログ確認までをまとめます。
- Apache で HTTPS を有効化する流れ
- 証明書ファイルと秘密鍵の配置確認
sslモジュールと TLS 用 VirtualHost- TLS protocol / cipher 設定の考え方
- HTTP から HTTPS への誘導とログ確認
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| Web サーバー | Apache HTTP Server |
| 主なモジュール | ssl、必要に応じて headers、rewrite |
| HTTPS 設定 | /etc/apache2/sites-available/default-ssl.conf |
| 設定検証 | sudo apache2ctl -t |
TLS 設定の前提を確認する
TLS 設定では、Apache 本体の起動確認に加えて、証明書ファイル、秘密鍵、FQDN、VirtualHost、ファイアウォールやロードバランサーの公開ポートを合わせて確認します。
- 対象 FQDN が決まっている
- 証明書ファイルと秘密鍵がサーバー上にある
- 秘密鍵を公開ディレクトリに置いていない
- Apache の基本設定で
apache2ctl -tが成功している - 443/tcp を公開する設計になっている
証明書と秘密鍵を確認する
証明書と秘密鍵のパスを確認します。ここでは例として /etc/ssl/certs/www.example.com.crt と /etc/ssl/private/www.example.com.key を使います。秘密鍵は root だけが読める権限にします。
sudo ls -l /etc/ssl/certs/www.example.com.crt
sudo ls -l /etc/ssl/private/www.example.com.key
sudo chmod 0644 /etc/ssl/certs/www.example.com.crt
sudo chmod 0600 /etc/ssl/private/www.example.com.key
sudo chown root:root /etc/ssl/certs/www.example.com.crt /etc/ssl/private/www.example.com.keyssl モジュールを有効化する
Apache で HTTPS を使うには ssl モジュールを有効化します。HSTS や追加ヘッダーを扱う場合は headers、HTTP から HTTPS への誘導に rewrite を使う場合は rewrite も確認します。
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo apache2ctl -M
sudo apache2ctl -tHTTPS 用 VirtualHost を作成する
443 番ポート用の VirtualHost を作成します。ServerName、DocumentRoot、証明書、秘密鍵、ログ出力先を明示します。
sudo tee /etc/apache2/sites-available/www.example.com-ssl.conf >/dev/null <<'EOF'
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www/www.example.com/html
ErrorLog ${APACHE_LOG_DIR}/www.example.com-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/www.example.com-ssl-access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/www.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/www.example.com.key
IncludeOptional /etc/apache2/conf-enabled/tls-cipher.conf
</VirtualHost>
</IfModule>
EOF
sudo a2ensite www.example.com-ssl.conf
sudo apache2ctl -t
sudo systemctl reload apache2.service
sudo apache2ctl -STLS protocol と cipher を設定する
TLS protocol と cipher は、利用者の端末、社内標準、公開先の要件に合わせて決めます。新しい構成では TLS 1.2 と TLS 1.3 を基本にし、古い protocol は無効化する方針が扱いやすいです。
sudo tee /etc/apache2/conf-available/tls-cipher.conf >/dev/null <<'EOF'
SSLProtocol -All +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder On
EOF
sudo a2enconf tls-cipher
sudo apache2ctl -t
sudo systemctl reload apache2.serviceHTTP から HTTPS へ誘導する
HTTP で受けたリクエストを HTTPS に誘導する場合は、80 番ポート側の VirtualHost で redirect を設定します。アプリケーションやロードバランサーで HTTPS 化している場合は、どこで誘導するかを重複させないようにします。
sudo tee /etc/apache2/sites-available/www.example.com-redirect.conf >/dev/null <<'EOF'
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
EOF
sudo a2ensite www.example.com-redirect.conf
sudo apache2ctl -t
sudo systemctl reload apache2.service
curl -I http://www.example.com/
curl -I https://www.example.com/証明書の内容を確認する
証明書の subject、issuer、有効期限、SAN を確認します。公開環境では、ブラウザだけでなくコマンドでも証明書チェーンと期限を確認しておくと更新漏れに気づきやすくなります。
openssl x509 -in /etc/ssl/certs/www.example.com.crt -noout -subject -issuer -dates
openssl x509 -in /etc/ssl/certs/www.example.com.crt -noout -ext subjectAltName
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/nullログを確認する
TLS 設定後は、Apache の error log、HTTPS VirtualHost の access log、systemd journal を確認します。証明書パスの誤り、秘密鍵の権限、VirtualHost の選択ミスは error log に出やすいです。
systemctl status apache2.service --no-pager
sudo apache2ctl -t
sudo apache2ctl -S
sudo tail -n 100 /var/log/apache2/error.log
sudo tail -n 100 /var/log/apache2/www.example.com-ssl-error.log
journalctl -u apache2.service --no-pager -n 100公開前の確認ポイント
sudo apache2ctl -tが成功するsslモジュールが有効になっている- 証明書と秘密鍵のパスが正しい
- 秘密鍵の権限が広すぎない
apache2ctl -Sで HTTPS VirtualHost が意図どおり選ばれている- HTTP から HTTPS への誘導をどこで行うか決めている
- 証明書の有効期限と SAN を確認している
まとめ
Ubuntu 26.04 の Apache TLS 設定では、証明書と秘密鍵を確認し、ssl モジュールを有効化し、443 番ポート用の VirtualHost と TLS protocol / cipher を設定します。
設定後は apache2ctl -t、apache2ctl -S、curl -I、openssl、ログ確認を組み合わせると、証明書パス、VirtualHost、リダイレクト、TLS 応答を切り分けやすくなります。

