透湖とねことITと

WordPressにSSL証明書を導入して自動更新させる(by BitNami)

WordPressにSSL証明書を導入して自動更新させる(by BitNami)

GCP利用時代にフリーのSSL証明書(Let’s Encrypt)を導入していましたが、自動更新設定をしていなかったため、期限切れを起こしてブラウザに警告画面を出してしまったことがあります。

この教訓を元にBitNamiアプリケーションのWordPressを使用している方で、自動更新のやり方にたどり着かなった方向けに書いていきます。

Google Cloud Platform(GCP)の「Marketplace」から 「wordpress with nginx and ssl certified by bitnami」 を入れた方が主な対象ですが、BitNamiアプリから自力でWordPressを入れた方でもおそらく大丈夫です。

※ドメインとサーバーIPの紐付けが完了していることが前提です。

ステップ1:Legoクライアントをインストールする

以下のコマンド実行して、Legoクライアントをインストールします。X.Y.Zの箇所はダウンロードしたアーカイブファイルの実際のバージョン番号に置き換えてください。

$ cd /tmp
$ curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d ‘"’ -f 4 | wget -i –
$ tar xf lego_vX.Y.Z_linux_amd64.tar.gz
$ sudo mkdir -p /opt/bitnami/letsencrypt
$ sudo mv lego /opt/bitnami/letsencrypt/lego

ステップ2:SSL証明書を生成する

すべてのBitNamiサービスを停止します。

$ sudo /opt/bitnami/ctlscript.sh stop

以下のコマンドでドメインに対してSSL証明書を発行します。 DOMAINを実際のドメイン名に、EMAIL-ADDRESSをメールアドレスに置き換えてください。

$ sudo /opt/bitnami/letsencrypt/lego –tls –email="EMAIL-ADDRESS" –domains="DOMAIN" –path="/opt/bitnami/letsencrypt" run

ステップ3:SSL証明書を使用するようにWebサーバーを構成する

今回はNGINXのみ記載しますが、生成された証明書のファイルは以下にありますのでシンボリックリンク(WindowsOSで言うところのショートカット)をnginxフォルダ内に作成します。DOMAIN実際のドメインに置き換えてください。

$ ls /opt/bitnami/letsencrypt/certificates DOMAIN.key DOMAIN.crt $ sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key $ sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt $ sudo chown root:root /opt/bitnami/nginx/conf/server* $ sudo chmod 600 /opt/bitnami/nginx/conf/server*

すべてのBitNamiサービスを開始します。

$ sudo /opt/bitnami/ctlscript.sh start

ステップ4:WebサイトのSSL化をテストする

https://DOMAINにアクセスして、以下のようなステータスになっているか確認してください。
(Chromeブラウザで警告画面が出る場合手順をやり直してください)

ステップ5:SSL証明書を自動更新するよう設定する

発行が無料であるLet’s Encrypt証明書は90日間のみ有効です。毎回3ヶ月毎に手動でするのは面倒くさいので、自動化します。

まずは証明書更新スクリプトを作成してください。

$ sudo vi /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

次の内容をスクリプトに入力して保存してください。DOMAINを実際のドメイン名に、EMAIL-ADDRESSをメールアドレスに置き換えてください。

#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego –tls –email="EMAIL-ADDRESS" –domains="DOMAIN" –path="/opt/bitnami/letsencrypt" renew –days 90
sudo /opt/bitnami/ctlscript.sh start

スクリプトを実行可能にします。

$ sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

crontab登録用のテキストファイルを作成します。登録用なのでファイル名は何でも良いですが、自分は以下のようにしました。

$ vi set_crontab.txt

次の内容をテキストに入力して保存してください。 毎月1日にスクリプトrenew-certificate.shを実行し、結果を破棄するという処理内容です。

0 0 1  /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null

次のコマンドを実行して、crontabに登録します。オプションlでcrontabに登録されている実行ジョブが 一覧で確認できます。

$ sudo crontab set_crontab.txt
$ sudo crontab -l
0 0 1 /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null

以上になります。設定、お疲れ様でした!

よいサーバー運用管理を!

参考:Generate And Install A Let’s Encrypt SSL Certificate For A Bitnami Application