手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Apache TLS の基本設定 – HTTPS と証明書を構成する

関連する記事

Ubuntu 26.04 の Apache で HTTPS を扱う場合、証明書と秘密鍵を配置し、ssl モジュールを有効化し、443 番ポート用の VirtualHost を設定します。

この記事では、Apache の基本設定ができている前提で、TLS 設定、証明書ファイルの確認、protocol / cipher 設定、HTTP から HTTPS への誘導、ログ確認までをまとめます。

この記事で扱うこと
  • Apache で HTTPS を有効化する流れ
  • 証明書ファイルと秘密鍵の配置確認
  • ssl モジュールと TLS 用 VirtualHost
  • TLS protocol / cipher 設定の考え方
  • HTTP から HTTPS への誘導とログ確認
対象 OSUbuntu 26.04 Server
Web サーバーApache HTTP Server
主なモジュールssl、必要に応じて headersrewrite
HTTPS 設定/etc/apache2/sites-available/default-ssl.conf
設定検証sudo apache2ctl -t
参考書籍
参考書籍
Bulletproof TLS and PKI
TLS、証明書、PKI、HTTPS の運用を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

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.key

ssl モジュールを有効化する

Apache で HTTPS を使うには ssl モジュールを有効化します。HSTS や追加ヘッダーを扱う場合は headers、HTTP から HTTPS への誘導に rewrite を使う場合は rewrite も確認します。

コマンド
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo apache2ctl -M
sudo apache2ctl -t

HTTPS 用 VirtualHost を作成する

443 番ポート用の VirtualHost を作成します。ServerNameDocumentRoot、証明書、秘密鍵、ログ出力先を明示します。

コマンド
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 -S

TLS 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.service

HTTP から 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 -tapache2ctl -Scurl -Iopenssl、ログ確認を組み合わせると、証明書パス、VirtualHost、リダイレクト、TLS 応答を切り分けやすくなります。

関連する記事
Ubuntu 26.04 Apache TLS の基本設定 – HTTPS と証明書を構成する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る