Webサイトを運営していると、「HTTPSでアクセスできない」という問題に直面することがあります。特に、証明書の期限が切れているかどうかを疑うことが多いですが、実際には設定ミスが原因であることがよくあります。今回は、私が遭遇した「証明書切れ?」という指摘とその原因について解説します。
問題の概要
症状: 「HTTPSでアクセスできない」
「証明書が切れている」と周りから指摘されたが、実際には証明書自体は有効で、Apacheの設定が問題だった。
- Webサーバー: Apache2(アパッチ)
- 証明書の状況: Let’s Encrypt の証明書は2025年5月11日まで有効。
- エラーメッセージ: 「ERR_SSL_PROTOCOL_ERROR」などのエラーが表示された。
原因の特定
最初に疑ったのは、証明書が切れていることでしたが、certbot certificates で確認したところ、証明書は有効でした。そこで、Apacheの設定を確認した結果、以下の2点に問題があることが判明しました。
- Apacheの設定ファイルでの競合 000-default.conf と default-ssl.conf の両方に *:443 の設定 がありました。 これにより、Apacheがどちらの設定を適用すべきかを迷い、HTTPSが機能しませんでした。
- SSLCertificateFile の誤設定 default-ssl.conf の SSLCertificateFile が cert.pem になっており、正しい証明書のファイルである fullchain.pem を指定していませんでした。 この設定ミスにより、証明書が正しく適用されず、HTTPS接続時にエラーが発生しました。
修正手順
1. 000-default.conf の修正
000-default.conf に記載されていた :443 設定を削除し、:80 のリダイレクト設定だけを残しました。
apache コピーする 編集する <VirtualHost *:80> ServerName onigiri1999.com Redirect permanent / https://onigiri1999.com/
2. default-ssl.conf の修正
default-ssl.conf に SSLCertificateFile を fullchain.pem に変更し、証明書設定を正しいものに修正しました。
<VirtualHost *:443> ServerName onigiri1999.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/onigiri1999.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/onigiri1999.com/privkey.pem
DocumentRoot /var/www/html
3. Apacheの設定を再適用
設定ファイルを修正した後、Apacheのサイト設定を再適用し、サーバーを再起動しました。
sudo a2ensite default-ssl sudo a2dissite 000-default sudo systemctl restart apache2
4. 設定の確認
apachectl -S を実行して、設定が正しく適用されているか確認しました。
sudo apachectl -S
*:80 onigiri1999.com (/etc/apache2/sites-enabled/000-default.conf:1) *:443 onigiri1999.com (/etc/apache2/sites-enabled/default-ssl.conf:1)
5. HTTPS接続確認
最後に、HTTPS接続が正常に機能していることを確認するために、ブラウザーでアクセスしてみます。
結論
証明書自体は有効だった: 証明書の期限切れが原因ではありませんでした。 設定の競合とミスが原因: Apacheの設定ファイルが競合しており、証明書の指定も間違っていたため、HTTPSが正しく動作しなかったことが原因でした。 今後、SSL証明書やHTTPSに関して問題が発生した場合、まずは設定ファイルの競合や証明書のパスを確認することが重要です。