見出し画像

HomeLabのLet's Encrypt証明書を全自動更新するスクリプト

こんにちは!大阪・堺市に拠点を置く、中古PCとOA機器の専門店 ナベキンファクトリー のサポート担当兼、技術ライターです。現場の「困った!」を解決するTIPSをお届けしています。

さて、自宅サーバー(HomeLab)で、複数のサービスを、独自ドメインで運用している皆さん。3ヶ月に一度、Let's Encryptから届く「証明書の有効期限が近づいています」という、あの通知メールに、うんざりしていませんか?サービスごとに、サーバーを止めて、手動で更新コマンドを実行する…そんな“面倒な儀式”は、今日で終わりにしましょう。

画像

この記事を読めば、Certbotという公式ツールを使い、複数のドメインや、ワイルドカード証明書(*.your-domain.com)さえも、一括で、完全に自動更新するための、具体的なスクリプトと、その設定手順が、手に取るように分かります。

原因と概要

Let's Encryptの証明書の有効期間が「90日」と短いのは、決して“意地悪”ではありません。それは、「証明書の更新プロセスは、そもそも人間が手でやるものではなく、プログラムが自動でやるべき」という、設計思想の表れです。手動更新に頼ることは、この思想に逆行し、「更新忘れ」によるサービス停止という、人為的ミス(トラブル)の温床となります。

▼自動化の鍵:「DNS-01チャレンジ」
この“完全自動化”を実現する上で、最も強力な武器が、「DNS-01チャレンジ」という、ドメイン所有権の確認方法です。

例えるなら…
郵便局(Let's Encrypt)が、あなたの住所(ドメイン)の本人確認をしたい時。
・ 旧来の方法(HTTP-01): あなたの家の玄関(サーバーの80番ポート)に、「確認に来ました」と、直接、訪問する。家の玄関を、常に、公道に晒しておく必要がある。
・ DNS-01: 郵便局が、あなたにだけ分かる“秘密の合言葉”を伝える。あなたは、自宅の表札の横(DNSのTXTレコード)に、その合言葉を、一時的に書き出す。郵便局員は、遠くから、その表札を見て、「確かに、本人だ」と確認する。あなたの家に、直接、訪問する必要はない

この「表札を書き換える」作業を、プログラム(Certbot)が、API経由で、自動で行うのが、DNS-01チャレンジの神髄です。これにより、サーバーを外部に公開する必要がなく、ワイルドカード証明書も取得可能になるなど、圧倒的な柔軟性が手に入ります。

今すぐできる!自動更新スクリプト導入への“3ステップ準備”

今回は、API対応DNSサービスの代表格である「Cloudflare」を例に、説明します。

1. Certbotと、DNSプラグインをインストールする

  • 所要時間の目安: 5分

  • 必要な物: HomeLabサーバーの管理者権限付きターミナル

お使いのLinuxディストリビューションのパッケージマネージャーで、Certbot本体と、Cloudflare用のDNSプラグインを、インストールします。

Plaintext

# Debian/Ubuntu系の場合
sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare

2. DNSプロバイダーのAPI認証情報を、準備する

  • 所要時間の目安: 5分

  • 必要な物: Cloudflareのアカウント

Certbotが、あなたの代わりに、DNSレコードを書き換えるための“許可証(APIトークン)”を、用意します。

1, Cloudflareのダッシュボードにログインし、「マイプロフィール」→「APIトークン」→「APIトークンを作成する」へ進みます。

2, 「Edit zone DNS」テンプレートを使い、操作対象のゾーン(ドメイン)を指定して、APIトークンを作成します。

3, 作成したトークンを、サーバーの安全な場所に、以下の形式で保存します。

Ini, TOML

# /etc/letsencrypt/cloudflare.ini などに保存
dns_cloudflare_api_token = "ここに、あなたのAPIトークンを貼り付け"

4, このファイルのパーミッションを、所有者以外、読み取れないように、厳格に設定します。

Plaintext

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

3. 最初の証明書を“手動”で取得し、動作確認する

  • 所要時間の目安: 5分

  • 必要な物: (同上)

まず、一度だけ、手動でコマンドを実行し、証明書が、正しく取得できるか、確認します。

Plaintext

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d your-domain.com \
  -d *.your-domain.com

(your-domain.comの部分を、あなたのドメイン名に置き換えてください) Successfully received certificateと表示されれば、準備は完了です。

詳細ガイド&追加の豆知識

● コピペで使える!全自動更新スクリプト

証明書の更新、および、更新後のサービス再起動を、一括で行う、シェルスクリプトを作成します。

Bash

#!/bin/bash
# /usr/local/bin/renew_certs.sh などの名前で保存

# --- ユーザー設定項目 ---
# Certbotの実行パス
CERTBOT_CMD="/usr/bin/certbot"
# Cloudflareの認証情報ファイル
CLOUDFLARE_CREDS="/etc/letsencrypt/cloudflare.ini"
# ログファイル
LOG_FILE="/var/log/letsencrypt/renewal.log"
# 証明書を更新した後に、再起動が必要なサービス(例: Nginxリバースプロキシ)
DEPLOY_HOOK_CMD="sudo systemctl restart nginx"

# --- スクリプト本体 ---
echo "--- Cert renewal process started at $(date) ---" >> ${LOG_FILE}

# Certbotの更新コマンドを実行。--deploy-hookで、更新成功時のみ、サービスを再起動
${CERTBOT_CMD} renew \
  --dns-cloudflare \
  --dns-cloudflare-credentials ${CLOUDFLARE_CREDS} \
  --deploy-hook "${DEPLOY_HOOK_CMD}" >> ${LOG_FILE} 2>&1

echo "--- Cert renewal process finished at $(date) ---" >> ${LOG_FILE}
echo "" >> ${LOG_FILE}

exit 0


画像
CertbotがDNS-01チャレンジで、DNSプロバイダにAPI経由でTXTレコードを書き込むイメージ図

● cronに、スクリプトを“予約”する

最後に、このスクリプトを、システムに、自動で、定期実行するように、予約します。

  1. sudo crontab -eコマンドで、cronの設定ファイルを開きます。

  2. ファイルの末尾に、以下の一行を追記します。

Plaintext

15 4,16 * * * /usr/local/bin/renew_certs.sh

Tips:cron設定の意味
これは「毎日、午前4時15分と、午後4時15分に、このスクリプトを実行せよ」という命令です。1日に2回実行しておくことで、どちらかのタイミングで、ネットワークの問題などが発生しても、もう片方で、リトライが効き、更新の成功率が、格段に上がります。

まとめ

  • 要点①: Let's Encryptの証明書更新は、CertbotDNS-01チャレンジを使い、完全に自動化するのが、現代のHomeLab運用の常識。

  • 要点②: DNSプラグインAPIキーを準備し、certbot renewコマンドを、シェルスクリプト化するのが、確実な自動化への、最短ルート。

  • 要点③: 更新した証明書を、サービスに反映させる--deploy-hookと、実行結果を、後から確認できるログ出力の設定が、安定運用の鍵を握る。

  • 再発防止ポイント: APIキーなどの認証情報を記述したファイル(.iniファイルなど)の、パーミッション(権限)を、必ず600に設定し、所有者(root)以外が、絶対に読み取れないようにすること。これが、セキュリティ上の、絶対的な鉄則です。

おまけ:ナベキンファトリー紹介

24時間365日、証明書の自動更新のような、重要なタスクを任せるHomeLabの“心臓部”には、やはり、省電力で、信頼性の高い、安定したサーバーが不可欠です。

中古PCとOA機器の専門店 ナベキンファトリー では、HomeLabサーバーとしても最適な、エンタープライズグレードの、高品質な中古サーバーや、小型PCも取り扱っています。興味があればぜひチェックしてみてくださいね。

#OA機器
#HomeLab
#Let 's_Encrypt
#スクリプト
#ナベキンファクトリー


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
HomeLabのLet's Encrypt証明書を全自動更新するスクリプト|中古パソコン屋のナベキンファクトリー
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1