サーバ証明書更新自動化マニュアル
2026年3月からは発行日から200日
2027年3月からは発行日から100日
2029年3月以降は発行日から47日
と徐々に短くなります。
手動更新を継続すると、非常に手間がかかることになりますので、早めの自動化をお勧めします。
ACMEという仕組みを利用してサーバ証明書を自動更新するための方法を解説します。
Webサーバの公開範囲に合わせた方式を参照してください。
| 公開範囲 | 方式 |
|---|---|
| 学外 | HTTP-01チャレンジ方式 |
| 学内のみ | DNS-01チャレンジ方式 |
※多少煩雑な部分もありますので、エラーが起こってうまく証明書が設定できない場合は情報システム課までご連絡ください。
目次
HTTP-01チャレンジ方式
学外に公開しているサーバの証明書を自動更新させる方式です。
該当サーバのhttp(80ポート)、https(443ポート)が外部に対して開いている必要があります。
80:証明書取得のため
443:ウェブサイトにおける通信のため
Linux
certbotの準備
certbotはsnap版の動作が安定しているため、snap版でのインストール方法を解説します。
- snapインストール
- snapdをsystemtlに登録・有効化
- snapコマンドを使えるようにシンボリックリンク作成
(後ほどcertbotを”–classic”オプションでインストールするためにこのシンボリックリンクが必要です) - snapでcertbotをインストール
- certbotコマンドを使えるようにシンボリックリンク作成
sudo dnf install snapd -y RedHat系
sudo apt install snapd -y Debian系
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
証明書登録作業
- certbotコマンド実行
- まず以下のコマンドで証明書だけを取得します。
- 取得に成功すると、以下のように証明書・秘密鍵のパスが表示されます。
- 証明書を指定するconfファイル(ssl.conf等)を編集します。
- webサーバをリロードすると新しい証明書が適用されます。
- 自動更新時のwebサーバ自動リロード設定
- 作成したスクリプトに実行権限を付与します。
NIIから発行されたコマンド(情報システム課が提供したコマンド)をそのまま実行します。
sudo certbot
--server https://secomtrust-acme.com/acme/
--eab-hmac-key XXXXXXXXXXXXXXXXXXX
--eab-kid XXXXX
-d ○○.yamanashi.ac.jp
--key-type rsa
sudo certbot
--server https://secomtrust-acme.com/acme/
--eab-hmac-key XXXXXXXXXXXXXXXXXXX
--eab-kid XXXXX
-d ○○.yamanashi.ac.jp
--key-type rsa
--config-dir /etc/letsencrypt_○○
--work-dir /var/lib/letsencrypt_○○
--logs-dir var/log/letsencrypt_○○
質問が来るので、以下の通り対応します。
・apacheか、nginxかを選択し番号をEnter
・email:何も入力せずEnterで問題ありません
・Do you agree?:YでEnter
上記で自動的にconfファイルに証明書情報が書き換えられて、webサーバがリロードされます。
証明書だけをまず取得し、confファイルを手動設定してその証明書を読み込ませます。
sudo certbot certonly
--webroot -w ドキュメントルート
--server https://secomtrust-acme.com/acme/
--eab-hmac-key XXXXXXXXXXXXXXXXXXX
--eab-kid XXXXX
-d ○○.yamanashi.ac.jp
--key-type rsa
※ドキュメントルートはwebサーバにて設定しているconfファイルのDocumentRootの行を参照してください。
sudo certbot certonly
--webroot -w ドキュメントルート
--server https://secomtrust-acme.com/acme/
--eab-hmac-key XXXXXXXXXXXXXXXXXXX
--eab-kid XXXXX
-d ○○.yamanashi.ac.jp
--key-type rsa
--config-dir /etc/letsencrypt_○○
--work-dir /var/lib/letsencrypt_○○
--logs-dir var/log/letsencrypt_○○
※ディレクトリを指定した場合は、/etc/letsencryptの部分が–config-dirで指定したもの(/etc/letsencrypt_○○等)になります。
Certificate is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
Key is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
※中間証明書は証明書ファイル(fullchain.pem)に含まれますので、中間証明書を別途confファイルで指定している場合は、その行(SSLCertificateChainFileの行)を削除・またはコメントアウトしてください。
SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/chain.pem
Apache / RedHat系
sudo systemctl reload httpd
Apache / Debian系
sudo systemctl reload apache2
nginx
sudo systemctl reload nginx
/etc/letsencrypt/renewal-hooks/deploy/以下にスクリプトを作成します。
名前はwebserver_reload.sh等任意で構いません。
※ディレクトリを指定した場合は、/etc/letsencryptの部分を–config-dirで指定したものに変更してください。
Apacheの場合(RedHat系)
#!/bin/bash
systemctl reload httpd
Apacheの場合(Debian系)
#!/bin/bash
systemctl reload apache2
nginxの場合
#!/bin/bash
systemctl reload nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/webserver_reload.sh
※ディレクトリを指定した場合は、/etc/letsencryptの部分を–config-dirで指定したものに変更してください。
確認作業
証明書確認
証明書を使用しているサーバ(ウェブサイト等)にアクセスして、取得した証明書が適用され、エラーが起こっていないことを確認します。
自動更新設定・確認
/usr/bin/certbot renew --config-dir /etc/letsencrypt_○○ --work-dir /var/lib/letsencrypt_○○ --logs-dir /var/log/letsencrypt_○○
以下はタイマーで特定ドメイン○○の証明書更新コマンドを毎日、3時15時に実行させる設定例です。
※serviceファイルとtimerファイルは必ず同じ名前である必要があります。
- /etc/systemd/system/certbot_○○.service を以下の内容で作成
[Unit]
Description=Certbot renew (○○←どのドメインかを書いておく)
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --config-dir /etc/letsencrypt_○○ --work-dir /var/lib/letsencrypt_○○ --logs-dir /var/log/letsencrypt_○○
[Unit]
Description=Run certbot_○○ twice daily
[Timer]
OnCalendar=*-*-* 03,15:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now certbot_○○.timer
sudo systemctl status certbot_○○.timer
「active」になっていればOK.
sudo systemctl list-timers
作成したtimerで次回の実行時刻がNEXT欄に表示されていればOK.
ディレクトリを変更しなかった場合は以下の通りご確認ください。
sudo systemctl status snap.certbot.renew.timer
タイマーがactiveになっていればOK。
自動更新のシミュレーション
sudo certbot renew --dry-run
Congratulations, all simulated renewals succeeded: などが出ていればOK。
Windows Server
win-acmeの準備
ダウンロード
win-acmeのサイトから、zipファイルをダウンロードし、任意のフォルダに展開します。
設定変更
setting.jsonのCsr RsaのKeyBitsを2048に変更し上書き保存します。

win-acme実行~証明書登録~
PowerShellでwin-acmeのフォルダに移動し、情報システム課から提供されたwacsコマンドを実行します。
.\wacs.exe --baseuri "https://secomtrust-acme.com/acme/" --accepttos --eab-key-identifier XXXXXXXXXX --eab-key XXXXXXXXXXXXXXXXXXXXXXXX
対話モードに入ります。
はじめは「N」を選択してEnter。
IISで更新対象のサイトがバインドされていれば、そのままEnterを押し続けるとデフォルトの選択で進み、自動的に証明書が自動取得されます。

※上記選択は、それぞれの環境に合わせて適宜対応してください。
確認作業
証明書確認
証明書を使用しているサーバ(ウェブサイト等)にアクセスして、取得した証明書が適用され、エラーが起こっていないことを確認します。
自動更新確認
PowerShellで以下のコマンドを打ち、更新のスケジュールが組まれていればOK。
Get-ScheduledTaskInfo -TaskName "win-acme renew (secomtrust-acme.comacme)"

DNS-01チャレンジ方式
学外に公開していないサーバの証明書を自動更新させる方式です。
Linux
certbotの準備
certbotはsnap版の動作が安定しているため、snap版でのインストール方法を解説します。
- snapインストール
- snapdをsystemtlに登録・有効化
- snapコマンドを使えるようにシンボリックリンク作成
- snapでcertbotをインストール
- certbotコマンドを使えるようにシンボリックリンク作成
sudo dnf install snapd -y RedHat系
sudo apt install snapd -y Debian系
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
インストーラの配置・実行~証明書登録~
- インストールスクリプトを配置
- スクリプトに実行権限付与
- スクリプト実行
- 取得に成功すると、以下のように証明書・秘密鍵のパスが表示されます。
- 証明書を指定するwebサーバのconfファイル(ssl.conf等)を編集します。
- webサーバをリロードすると新しい証明書が適用されます。
- 自動更新時のwebサーバ自動リロード設定
- 作成したスクリプトに実行権限を付与します。
情報システム課よりスクリプトを提供しますのでそのスクリプトを以下のような形で保存してください(ファイル名は任意です)。
/tmp/setup_dns01.sh
chmod +x /tmp/setup_dns01.sh
sudo /tmp/setup_dns01.sh
エラーがなければこれで証明書の取得ができます。
Certificate is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
Key is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
※中間証明書は証明書ファイル(fullchain.pem)に含まれますので、中間証明書を別途confファイルで指定している場合は、その行(SSLCertificateChainFileの行)を削除・またはコメントアウトしてください。
SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/chain.pem
Apache / RedHat系
sudo systemctl reload httpd
Apache / Debian系
sudo systemctl reload apache2
nginx
sudo systemctl reload nginx
/etc/letsencrypt/renewal-hooks/deploy/以下にスクリプトを作成します。
名前はwebserver_reload.sh等任意で構いません。
Apacheの場合(RedHat系)
#!/bin/bash
systemctl reload httpd
Apacheの場合(Debian系)
#!/bin/bash
systemctl reload apache2
nginxの場合
#!/bin/bash
systemctl reload nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/webserver_reload.sh
確認作業
証明書確認
証明書を使用しているサーバ(ウェブサイト等)にアクセスして、取得した証明書が適用され、エラーが起こっていないことを確認します。
自動更新確認
sudo systemctl status snap.certbot.renew.timer
タイマーがactiveになっていればOK。
自動更新のシミュレーション
sudo certbot renew --dry-run
Congratulations, all simulated renewals succeeded: などが出ていればOK。
Windows Server
win-acmeの準備
ダウンロード
win-acmeのサイトから、zipファイルをダウンロードし、任意のフォルダに展開します。
設定変更
setting.jsonのCsr RsaのKeyBitsを2048に変更し上書き保存します。

セットアップスクリプト実行
情報システム課から提供したDNS01チャレンジ準備用のPowerShell(setup-dns01.sh)を実行します。

これで、C:\dns01以下に必要なデータやスクリプトが格納されます。
win-acmeの実行~証明書登録~
PowerShellでwin-acmeのを展開したフォルダに移動し、情報システム課から提供されたwacsコマンドを実行します。(HTTP-01チャレンジと同じコマンドです)
.\wacs.exe --baseuri "https://secomtrust-acme.com/acme/" --accepttos --eab-key-identifier XXXXXXXXXX --eab-key XXXXXXXXXXXXXXXXXXXXXXXX
対話モードに入ります。
はじめは「M」を選択してEnter。
その後は以下のような流れとなります。

※上記選択は、それぞれの環境に合わせて適宜対応してください。
確認作業
証明書確認
証明書を使用しているサーバ(ウェブサイト等)にアクセスして、取得した証明書が適用され、エラーが起こっていないことを確認します。
自動更新確認
PowerShellで以下のコマンドを打ち、更新のスケジュールが組まれていればOK。
Get-ScheduledTaskInfo -TaskName "win-acme renew (secomtrust-acme.comacme)"
