今までGOGETSSLの証明書を使っていましたが、更新期限が来たのと、今後、証明書の期限が200日以内になるという話もあるので、これを機にLet’s Encryptに乗り換えてみました。
Let’s Encryptは無料で使えますが、有効期限が90日なので、自動更新でもしないとやってられません。はい。自動更新の仕組みあります(^^;
今回は、Claude Codeに手順を出してもらって実施しました。完璧に動きました。すごい。(操作も含めて実行してもらうこともできるのですが、ちょっと怖かったので手順を出してもらって自分で事項しましたが、全く問題ありませんでした。本当にびっくりです。)
手順は以下の通り
Let’s Encrypt SSL証明書の自動更新(Apache + Postfix)
1. Certbot のインストール
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-apache
# RHEL/CentOS/Rocky Linux
sudo dnf install certbot python3-certbot-apache
2. Apache 用の証明書取得
# Certbot が Apache の設定を自動的に更新する場合
sudo certbot --apache -d example.com -d www.example.com
# 証明書のみ取得(Apache 設定は手動)
sudo certbot certonly --apache -d example.com -d mail.example.com
mail.example.comを Postfix 用に同じ証明書に含めることを推奨
3. Postfix の SSL 設定
sudo nano /etc/postfix/main.cf
# TLS 設定
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_security_level = may
smtp_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtp_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtp_tls_security_level = may
sudo systemctl reload postfix
4. 自動更新の設定(重要)
Certbot はインストール時に systemd タイマーまたは cron を自動登録します。確認:
# systemd の場合
sudo systemctl status certbot.timer
sudo systemctl enable certbot.timer
# cron の場合(/etc/cron.d/certbot が存在するか確認)
cat /etc/cron.d/certbot
5. 更新後フック(サービス自動リロード)
更新後に Apache と Postfix を自動リロードするフックを作成:
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
#!/bin/bash
# Let's Encrypt 更新後に Apache と Postfix をリロード
echo "Reloading Apache and Postfix after certificate renewal..."
systemctl reload apache2 # Ubuntu/Debian
# systemctl reload httpd # RHEL/CentOS
systemctl reload postfix
echo "Done: $(date)"
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
6. 動作テスト
# ドライランで更新をテスト(実際には更新しない)
sudo certbot renew --dry-run
# フックも含めてテスト
sudo certbot renew --dry-run --deploy-hook /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
7. 証明書の状態確認
# 証明書一覧と有効期限
sudo certbot certificates
# Postfix の TLS 確認
openssl s_client -connect mail.example.com:25 -starttls smtp 2>/dev/null | openssl x509 -noout -dates
まとめ・ポイント
| 項目 | 内容 |
|---|---|
| 証明書の場所 | /etc/letsencrypt/live/example.com/ |
| 自動更新タイミング | 有効期限 30 日前(Certbot が自動判断) |
| フックの場所 | /etc/letsencrypt/renewal-hooks/deploy/ |
| 更新頻度 | 1 日 2 回チェック(systemd timer) |
ポイント:
- Apache と Postfix で 同じ証明書ファイルを共有 できる
deploy/フォルダのスクリプトは更新成功時のみ実行される- ポート 80 が外部から到達可能である必要がある(HTTP-01 チャレンジ)
ドメイン名や OS の種類を教えていただければ、より具体的な設定を出せます。
以上、本当にすごい時代になったものです。