サーバ証明書更新自動化マニュアル

サーバ証明書の有効期間は、
2026年3月からは発行日から200日
2027年3月からは発行日から100日
2029年3月以降は発行日から47日
と徐々に短くなります。
手動更新を継続すると、非常に手間がかかることになりますので、早めの自動化をお勧めします。

ACMEという仕組みを利用してサーバ証明書を自動更新するための方法を解説します。

Webサーバの公開範囲に合わせた方式を参照してください。

公開範囲 方式
学外 HTTP-01チャレンジ方式
学内のみ 「DNS-01チャレンジ方式」

※多少煩雑な部分もありますので、エラーが起こってうまく証明書が設定できない場合は情報システム課までご連絡ください。

HTTP-01チャレンジ方式

学外に公開しているサーバの証明書を自動更新させる方式です。
該当サーバのhttp(80ポート)、https(443ポート)が外部に対して開いている必要があります。

Linux

certbotの準備

certbotはsnap版の動作が安定しているため、snap版でのインストール方法を解説します。

  1. snapインストール
  2. sudo dnf install snapd -y RedHat系
    sudo apt install snapd -y Debian系

  3. snapdをsystemtlに登録・有効化
  4. sudo systemctl enable --now snapd.socket

  5. snapコマンドを使えるようにシンボリックリンク作成
    (後ほどcertbotを”–classic”オプションでインストールするためにこのシンボリックリンクが必要です)
  6. sudo ln -s /var/lib/snapd/snap /snap

  7. snapでcertbotをインストール
  8. sudo snap install --classic certbot

  9. certbotコマンドを使えるようにシンボリックリンク作成
  10. sudo ln -s /snap/bin/certbot /usr/bin/certbot

証明書登録作業

  1. certbotコマンド実行
  2. NIIから発行されたコマンド(情報システム課が提供したコマンド)をそのまま実行します。

    
    sudo certbot 
     --server https://secomtrust-acme.com/acme/ 
    	--eab-hmac-key XXXXXXXXXXXXXXXXXXX 
    	--eab-kid XXXXX 
    	-d ○○.yamanashi.ac.jp 
    	--key-type rsa
    	

    質問が来るので、以下の通り対応します。
    ・apacheか、nginxかを選択し番号をEnter
    ・email:何も入力せずEnterで問題ありません
    ・Do you agree?:YでEnter

    上記で自動的にconfファイルに証明書情報が書き換えられて、webサーバがリロードされます。

    certbotがwebサーバの設定を自動確認できずエラーが起こる場合

    1. まず以下のコマンドで証明書だけを取得します。
    2. 
      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の行を参照してください。

    3. 取得に成功すると、以下のように証明書・秘密鍵のパスが表示されます。
    4. 
      Certificate is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
      Key is saved at:         /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
      
    5. 証明書を指定するconfファイル(ssl.conf等)を編集します。
    6. 
      SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
      

      ※中間証明書は証明書ファイル(fullchain.pem)に含まれますので、中間証明書を別途confファイルで指定している場合は、その行(SSLCertificateChainFileの行)を削除・またはコメントアウトしてください。

    7. webサーバをリロードすると新しい証明書が適用されます。
    8. Apache / RedHat系
      sudo systemctl reload httpd

      Apache / Debian系
      sudo systemctl reload apache2

      nginx
      sudo systemctl reload nginx

  3. 自動更新時のwebサーバ自動リロード設定
  4. /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
    
  5. 作成したスクリプトに実行権限を付与します。
  6. 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に変更し上書き保存します。

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版でのインストール方法を解説します。

  1. snapインストール
  2. sudo dnf install snapd -y RedHat系
    sudo apt install snapd -y Debian系

  3. snapdをsystemtlに登録・有効化
  4. sudo systemctl enable --now snapd.socket

  5. snapコマンドを使えるようにシンボリックリンク作成
  6. sudo ln -s /var/lib/snapd/snap /snap

  7. snapでcertbotをインストール
  8. sudo snap install --classic certbot

  9. certbotコマンドを使えるようにシンボリックリンク作成
  10. sudo ln -s /snap/bin/certbot /usr/bin/certbot

インストーラの配置・実行~証明書登録~

  1. インストールスクリプトを配置
  2. 情報システム課よりスクリプトを提供しますのでそのスクリプトを以下のような形で保存してください(ファイル名は任意です)。
    /tmp/setup_dns01.sh

  3. スクリプトに実行権限付与
  4. chmod +x /tmp/setup_dns01.sh

  5. スクリプト実行
  6. sudo /tmp/setup_dns01.sh

    エラーがなければこれで証明書の取得ができます。

  7. 取得に成功すると、以下のように証明書・秘密鍵のパスが表示されます。
  8. 
    Certificate is saved at: /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
    
  9. 証明書を指定するwebサーバのconfファイル(ssl.conf等)を編集します。
  10. 
    SSLCertificateFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/○○.yamanashi.ac.jp/privkey.pem
    

    ※中間証明書は証明書ファイル(fullchain.pem)に含まれますので、中間証明書を別途confファイルで指定している場合は、その行(SSLCertificateChainFileの行)を削除・またはコメントアウトしてください。

  11. webサーバをリロードすると新しい証明書が適用されます。
  12. Apache / RedHat系
    sudo systemctl reload httpd

    Apache / Debian系
    sudo systemctl reload apache2

    nginx
    sudo systemctl reload nginx

  13. 自動更新時のwebサーバ自動リロード設定
  14. /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
    
  15. 作成したスクリプトに実行権限を付与します。
  16. 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)"