FileMaker Server 2024で標準サポートされたLet's Encryptを使ってTLS証明書を自動更新する
はじめに
FileMaker Server 2024から、Let's EncryptによるTLS(SSL)証明書の自動更新が標準サポートされました。もともとLet's Encryptで取得した証明書はFileMaker Serverで利用可能でしたが、自動で更新する仕組みを作るのはかなり大変でした。今回、TLS証明書を自動で更新するスクリプトが公式に用意されたことで、設定がかなり容易になりました。この記事では、FileMaker Server 2024でLet's Encryptを使ってTLS証明書を自動更新する手順を紹介します。
公式ドキュメントはこちらです。
Let's Encryptの動作の仕組みについては、こちらを参照してください。
前提条件
この記事では、以下の環境を前提としています。あてはまらない場合は、公式ドキュメント等を参照してください。
- Apple Silicon搭載のMacにFileMaker Server 2024をインストールしている
- 独自ドメインを取得しており、FileMaker Serverに設定済みである
- 80番ポートがインターネット側からアクセス可能である
事前準備
Let's Encryptを利用するには、certbotをインストールする必要があります。Macにcertbotをインストールするには、事前にHomebrewをインストールしておく必要があります。
Homebrewのインストール
Homebrewをまだインストールしていない場合は、以下のコマンドでインストールしてください。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
つづいて、次のコマンドを実行してHomebrewのパスを通します。
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/$USER/.zprofile
zsh
eval "$(/opt/homebrew/bin/brew shellenv)"
動作確認してみましょう。次のコマンドを実行して、Homebrewのバージョンが表示されればOKです。
brew -v
certbotのインストール
次のコマンドを実行して、certbotをインストールします。
brew install certbot
これで事前準備は完了です。
スクリプト変数の変更
編集する必要のあるスクリプトは、以下の2つです。
- fm_request_cert.sh
- fm_renew_cert.sh
どちらも、/Library/FileMaker Server/Tools/Lets_Encrypt
ディレクトリに格納されています。このディレクトリは、FileMaker Server 2024のインストール時に自動的に作成されます。テキストエディタを用いて、それぞれのスクリプトを編集してください。テキストエディタは、VSCodeやvimなどがおすすめです。
fm_request_cert.shの編集
fm_request_cert.shは、TLS証明書の初回取得時に実行するスクリプトです。以下の変数を編集してください。
- PROMPT: 1を設定すると、以下の設定値を無視して対話型で設定値の入力を求められます。通常は0を設定しておきましょう。
- RESTART_SERVER: 1を設定すると、証明書の取得後にFileMaker Serverを再起動します。テスト中は安全のため、必ず0を設定しておきましょう。
- DOMAIN: FileMaker Serverに設定したドメイン名を設定します。例:
example.com
- EMAIL: Let's Encryptからの通知を受け取るメールアドレスを設定します。
- TEST_CERTIFICATE: 1を設定すると、Let'S Encryptのリクエストを消費せずに設定のテストが出来ます。最初は必ず1を設定しておきましょう。
- UPDATE_EXISTING_CERT: 1を設定すると、既存の証明書を更新します。通常は1を設定しておきましょう。
その他の変数は、デフォルト値のままにしてください。
fm_renew_cert.shの編集
fm_renew_cert.shは、証明書の更新を自動化するスクリプトです。編集すべき変数はfm_request_cert.shと同じです。fm_request_cert.shが正常に動作していれば、TEST_CERTIFICATE
の値は最初から0でいいかもしれません。
環境変数の設定
各スクリプトはAdmin Consoleを呼び出す関係上、認証情報を必要とします。スクリプトに直接認証情報を記述するのは危険なので、環境変数を用いて認証情報を設定します。まずは、以下のコマンドでユーザー名を設定しましょう。
export FAC_USERNAME={ユーザー名}
続いて、パスワードを設定します。
export FAC_PASSWORD={パスワード}
これで環境変数の設定は完了です。
証明書の取得
TEST_CERTIFICATE
に0が設定されていることを確認してから、次のコマンドを実行してください。
cd /Library/FileMaker\ Server/Tools/Lets_Encrypt
sudo -E ./fm_request_cert.sh
sudoの-E
オプションは、環境変数を引き継ぐために必要です。エラーが発生した場合は、エラーメッセージをよく読んで対応してください。一例として、443番ポートだけ開放して80番ポートを開放し忘れているとLet's Encryptの認証に失敗します。
スクリプトが正常に終了した場合は、TEST_CETIFICATE
を1に変更してから再度実行してください。証明書の取得に成功すると、証明書が/Library/FileMaker Server/CStore/Certbot/live/
ディレクトリに保存されます。
証明書の更新
続いて、証明書の更新をテストします。
sudo -E ./fm_renew_cert.sh
エラーなくスクリプトが完了することを確認してください。正常に終了した場合は、次のようなメッセージが最後に表示されます。
Please restart the FileMaker Server service to apply the change.
Lets Encrypt certificate renew script completed without any errors.
スケジュールの設定
証明書の更新が正常に動作することを確認したら、スケジュールを設定して自動更新されるようにします。FileMaker Server Admin Consoleにログインし、「構成 → スケジュール」を開き、「スケジュールの作成」をクリックしてください。
設定内容は以下の通りです。
- スケジュールタイプ: システムスクリプト
- スケジュール名: 任意の値(例: LetsEncrypt)
- デフォルト以外のアカウントを使用: 必要に応じてチェック、および認証情報を設定
- システムスクリプト: Sys_Default_ReloadLetsEncryptCertificate
- 頻度: 毎日
設定を保存したら、作成したスケジュールを選択して「今すぐ実行」をクリックしてテストしましょう。証明書の更新が成功すると、Event.logに以下のようなメッセージが記録されます。
証明書のインポートに成功しました。発行先: [example.com]。発行元: [C=US, O=Let's Encrypt, CN=E5]。有効期限: [Jan 20 03:39:51 2025 GMT]。
これで証明書の自動更新設定が完了しました。サーバーを再起動すると、新しい証明書が適用されます。
Discussion