目次

SSL証明書のapacheの適用方法

モジュールの確認

cat /etc/apache2/mods-available/rewrite.load
cat /etc/apache2/mods-available/ssl.load
cat /etc/apache2/mods-available/headers.load

モジュール有効化

以下、必須となるモジュールの確認と設定です。

sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers

モジュール反映

sudo systemctl restart apache2

Apache設定ファイルの作成

ここでは、Redmineサイトの常時SSL化を元に行います。どのWebアプリであっても、Apacheであれば、この手順は一緒です。

  • http接続のみの設定ファイル無効化とコンフィグファイル退避
sudo mkdir -p /etc/apache2/old
cd /etc/apache2/sites-available && pwd
sudo a2dissite redmine.conf
sudo systemctl restart apache2.service

http接続のみの設定ファイルを無効化し、設定を反映します

sudo mv redmine.conf ../old/redmine.conf.$(date +%Y%m%d)

上記、http接続のみの設定ファイルをバックアップ用ディレクトリに移動します

  • 常時SSL化の設定ファイル作成
  • 自分の環境に合わせます。(【】でくくっている部分の直下にコメントで詳細を書いています
  • cat ~ __EOF__の部分をコピーして別のエディタに貼り付け → 【】内を編集(このとき、【】も取り除きます) → コマンド実行という流れがやりやすいです。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
    servername 【hoge.example.com】
    # ドメイン名を指定します
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>

<VirtualHost *:443>
    ServerName 【hoge.example.com】
    # ドメイン名を指定します
    DocumentRoot 【/home/www-data/redmine/public】
    # 自身の環境に合わせます
    <Directory 【/home/www-data/redmine/public】>
    # 自身の環境に合わせます
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1
  # SSLを有効化します

  SSLProtocol -ALL +TLSv1.2 +TLSv1.3
  SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
  SSLHonorCipherOrder off
  SSLSessionTickets off

# SSL Stapling 設定
# 2025年5月より、Let's EncryptはOCSP Staplingを無効化しました。
# そのため、筆者環境では以下のように Stapling を明示的に無効化しています。
SSLUseStapling Off

# ※ SSL Stapling が有効な証明書(たとえば GlobalSign や Sectigo 等)を使用する場合は、
# 以下をコメントインし、上の行をコメントアウトしてください。
#SSLUseStapling On
#SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"


SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します

# SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します

#セキュリティヘッダー付与

    Header always set Strict-Transport-Security "max-age=63072000"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"

</VirtualHost>
__EOF__

設定を反映します

sudo a2ensite redmine

再設定したredmineの設定を有効化します

sudo apache2ctl configtest

Syntax OKを確認します。エラーがある場合はモジュールのインストールミスやファイルの指定ミスが多いです。

sudo systemctl restart apache2.service

設定反映後、ブラウザで指定したredmineのドメインにアクセスします。

  • https接続になっている
  • 証明書が設定されている
  • 設定した証明書が有効期限である

を確認します。