このガイドでは、mod_sslを使用したApache HTTP ServerへのSSL証明書のインストール手順を解説します。GetHTTPS、Certbot、その他のCAからの証明書で動作します。
証明書をまだ持っていない場合は、5分で無料で取得できます。
前提条件
- **Apache 2.4+**がインストールされHTTPでサイトを提供中(ポート80)
- root/sudoアクセス
- 証明書ファイル — Apacheには3つの別々のファイルが必要:
cert.pem— 証明書(エンドエンティティのみ)privkey.pem— 秘密鍵chain.pem— 中間CA証明書チェーン
なぜ3つのファイル? Nginx(単一の
fullchain.pemを使用)と異なり、Apacheは伝統的に証明書とチェーンを別々のファイルとして必要とします。Apache 2.4.8以降はSSLCertificateFileでfullchain.pemを使用し、SSLCertificateChainFileを省略できます。
ステップ1:証明書ファイルをアップロード
sudo mkdir -p /etc/ssl/gethttps
sudo cp cert.pem chain.pem privkey.pem /etc/ssl/gethttps/
sudo chmod 600 /etc/ssl/gethttps/privkey.pem
sudo chmod 644 /etc/ssl/gethttps/cert.pem /etc/ssl/gethttps/chain.pem
sudo chown root:root /etc/ssl/gethttps/*
ステップ2:必要なApacheモジュールを有効化
# Debian/Ubuntu
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2
# CentOS/RHEL/Amazon Linux
sudo yum install mod_ssl
sudo systemctl restart httpd
ステップ3:HTTPS VirtualHostを設定
# ─── HTTPSサーバー ────────────────────────────
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/gethttps/cert.pem
SSLCertificateKeyFile /etc/ssl/gethttps/privkey.pem
SSLCertificateChainFile /etc/ssl/gethttps/chain.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
DocumentRoot /var/www/html
</VirtualHost>
# ─── HTTPリダイレクト ───────────────────────────
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
ステップ4:サイトを有効化してテスト
# Debian/Ubuntu
sudo a2ensite yourdomain-ssl.conf
sudo apachectl configtest
sudo systemctl reload apache2
# CentOS/RHEL
sudo apachectl configtest
sudo systemctl reload httpd
トラブルシューティング
”AH02572: Failed to configure certificate” — 鍵の不一致
証明書と秘密鍵が対応していません:
openssl x509 -noout -modulus -in /etc/ssl/gethttps/cert.pem | md5sum
openssl rsa -noout -modulus -in /etc/ssl/gethttps/privkey.pem | md5sum
2つのハッシュが同一でなければなりません。
ブラウザが「証明書が信頼されていない」と表示
中間チェーンが欠落しています。SSLCertificateChainFile が chain.pem を指していることを確認してください。
HTTPSは動作するが「保護されていない通信」
混合コンテンツ — ページが http:// でリソースを読み込んでいます。DevTools → コンソールで http:// URLを修正してください。
よくある質問
fullchain.pem を別々のcert + chainの代わりに使えますか?
はい、Apache 2.4.8以降で可能です。SSLCertificateFile /path/to/fullchain.pem を使用し、SSLCertificateChainFile ディレクティブを完全に削除してください。
Apacheの再起動とリロードのどちらが必要ですか?
リロード(systemctl reload)で十分で、ダウンタイムゼロです。再起動(systemctl restart)はすべてのアクティブ接続を切断します。証明書の変更には常にリロードを使用してください。
ApacheはECDSA証明書に対応していますか?
はい。Apache 2.4以降はECDSAをRSAと同じように扱います。同じディレクティブ、同じファイルフォーマットです。GetHTTPSはデフォルトでECDSA P-256を生成します。