◆はじめに
従来、ワイルドカード証明書を使用していましたが、お名前ドットコムのDNS環境では自動更新に対応しておらず、手動での更新作業が必要でした。
今回、SAN証明書への移行により自動更新が可能になり、運用コストの削減が実現できたため、その手順を記録します。

おすすめ記事
更新前のワイルドカード証明書

◆SAN証明書とは
SAN(Subject Alternative Name)証明書(マルチドメイン証明書)は、1枚の証明書で複数の異なるドメイン名、ホスト名、またはIPアドレスを指定・保護できるサーバ証明書です。
・SAN証明書の特徴
- 証明書の拡張フィールド「SAN」に最大100〜250個程度の追加名前を登録可能(認証局による)
- CN(Common Name)とSANを併用し、異なるドメイン(例: example.com と example.net)や特定サブドメイン、IPアドレスをカバー
- certbotなどのACMEクライアントで発行・更新しやすく、ApacheやIISなどのサーバで仮想ホスト対応
・ワイルドカード証明書との比較表
以下、両者の違いを比較表にまとめます。
| 項目 | ワイルドカード証明書 | SAN証明書 (マルチドメイン証明書) |
|---|---|---|
| 対応範囲 | 同一ドメインの全サブドメイン (例: *.example.com でwww.example.com など無制限) | 任意の複数ドメイン・ホスト・IPを明示指定 (例: example.com, www.example.com, example.net) |
| 柔軟性 | サブドメイン専用で他ドメイン不可 | 異なるドメイン対応可能だが、指定外は不可 |
| 用途例 | 大量サブドメインの一括管理 | 少数の特定ホストやマルチドメイン管理 |
| certbot対応 | 一部環境で制限あり (お名前ドットコムなど) | 広く対応しやすく自動更新向き |
| コスト・管理 | 1ドメイン特化でシンプル | 複数指定でコスト効率高く拡張性あり |
◆前提条件
- Certbot がインストール済みであること
- Webサーバ(Nginx)が稼働していること
- DNS設定で各ホスト名が正しく設定されていること
- ポート80/443が解放されていること
◆変更要領
・SAN証明書の発行
以下のコマンドで、複数のドメイン/ホストを含むSAN証明書を発行します。
sudo certbot --nginx --cert-name maruweb.jp.net -d maruweb.jp.net -d marusrv.maruweb.jp.net -d www.maruweb.jp.net -d art.maruweb.jp.net
オプション説明:
- –nginx: Nginxプラグインを使用
- –cert-name: 証明書の識別名(既存証明書を上書きする場合に指定)
- -d: 証明書に含めるドメイン/ホスト名(複数指定可能)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
You are updating certificate maruweb.jp.net to include new domain(s):
+ art.maruweb.jp.net
+ marusrv.maruweb.jp.net
+ maruweb.jp.net
+ www.maruweb.jp.net
You are also removing previously included domain(s):
- *.maruweb.jp.net
Did you intend to make this change?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(U)pdate certificate/(C)ancel: U
Renewing an existing certificate for maruweb.jp.net and 3 more domains
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/maruweb.jp.net/fullchain.pem
Key is saved at: /etc/letsencrypt/live/maruweb.jp.net/privkey.pem
This certificate expires on 2025-12-21.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for maruweb.jp.net to /etc/nginx/nginx.conf
Successfully deployed certificate for marusrv.maruweb.jp.net to /etc/nginx/nginx.conf
Successfully deployed certificate for www.maruweb.jp.net to /etc/nginx/conf.d/www.maruweb.jp.net.conf
Successfully deployed certificate for art.maruweb.jp.net to /etc/nginx/conf.d/art.maruweb.jp.net.conf
Your existing certificate has been successfully renewed, and the new certificate has been installed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
既存のワイルドカード証明書のディレクトリを上書きしSAN証明書を発行します。
・サービスの再起動
sudo systemctl reload nginx
sudo systemctl restart cockpit
・証明書の確認
SAN証明書に含まれるホストを確認します。
sudo openssl x509 -in /etc/letsencrypt/live/maruweb.jp.net/fullchain.pem -text -noout | grep DNS:
DNS:art.maruweb.jp.net, DNS:marusrv.maruweb.jp.net, DNS:maruweb.jp.net, DNS:www.maruweb.jp.net
・ブラウザで証明書の確認
証明書の有効期間の確認

SAN証明書(サブジェクトの代替名)の確認

◆自動更新設定
・自動更新サービスの起動
証明書の更新を自動実行するためのサービスを起動します。
sudo systemctl enable --now certbot-renew.timer
タイマーの確認
sudo systemctl list-timers | grep certbot
Tue 2025-09-23 07:24:15 JST 8h left Mon 2025-09-22 22:57:00 JST 10min ago certbot-renew.timer certbot-renew.service
・サービス再起動スクリプトの作成
証明書が自動更新された場合、NginxやCockpitのサービスを再読み込みさせる必要があるのでスクリプトを作成します。
sudo vi /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
#!/bin/bash
# 証明書更新後に自動実行される
systemctl reload nginx
systemctl restart cockpit
・実行権限の付与
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
ls -la /etc/letsencrypt/renewal-hooks/deploy/
total 12
drwxr-xr-x 2 root root 4096 Sep 22 23:22 .
drwxr-xr-x 5 root root 4096 Oct 8 2024 ..
-rwxr-xr-x 1 root root 106 Sep 22 23:22 reload-services.sh
・自動更新の確認
証明書ディレクトリの確認
sudo ls -la /etc/letsencrypt/live/maruweb.jp.net/
total 12
drwxr-xr-x 2 root root 4096 Nov 22 08:24 .
drwx------ 3 root root 4096 Sep 22 22:17 ..
-rw-r--r-- 1 root root 692 Oct 9 2024 README
lrwxrwxrwx 1 root root 38 Nov 22 08:24 cert.pem -> ../../archive/maruweb.jp.net/cert6.pem
lrwxrwxrwx 1 root root 39 Nov 22 08:24 chain.pem -> ../../archive/maruweb.jp.net/chain6.pem
lrwxrwxrwx 1 root root 43 Nov 22 08:24 fullchain.pem -> ../../archive/maruweb.jp.net/fullchain6.pem
lrwxrwxrwx 1 root root 41 Nov 22 08:24 privkey.pem -> ../../archive/maruweb.jp.net/privkey6.pem
ファイルの更新日時が11月22日となっているのが確認できます。
ブラウザでSAN証明書の有効期間の確認

発行日がこちらも11月22日、有効期限も2026年2月20日と更新されているのが確認できます。
SAN証明書(サブジェクトの代替名)の確認

ホスト名も含められています。
◆注意事項
- 新しいホストを追加する場合
既存のSAN証明書に新しいホストを追加する際は、すべてのホスト名を再度指定する必要があります。一部のみを指定すると、指定しなかったホストが証明書から除外されます。 - ホスト数の上限
Let’s Encryptでは1つの証明書に最大100個のホスト名を含めることができます。 - 更新の仕組み
certbot-renew.timerは1日2回実行され、有効期限まで30日を切った証明書を自動更新します。
◆トラブルシューティング
- 自動更新が失敗する場合
更新ログを確認:sudo journalctl -u certbot-renew.service - 手動で更新テスト:
sudo certbot renew --dry-run - Nginxの設定エラーの場合
設定ファイルの構文チェック:sudo nginx -t
sudo journalctl -u certbot-renew.service
◆さいごに
SAN証明書への移行により、以下のメリットが得られました。
【改善点】
- 手動更新作業の削除(3ヶ月1回の作業が不要に)
- 更新忘れのリスク排除
- 複数ホストを1枚の証明書で管理可能
- 自動更新による運用負荷の軽減
【今後の展開】
新しいサブドメインを追加する際は、全ホスト名を指定してcertbotコマンドを実行するだけで、簡単に証明書を更新できます。
Let’s Encryptの自動更新により、証明書管理の手間が大幅に削減され、より本質的な作業に集中できる環境が整いました。




コメント