LightsailのWordPressでSSL証明書を自動更新する(bncertツール)

LightsailのWordPressでSSL証明書を自動更新する(bncertツール)

このブログはAmazon Lightsail上のWordPressで運用しています。

LightsailでHTTPS化を行うためには、SSL証明書を自分でサーバにインストールする必要があります。

SSL証明書の厄介な点は有効期限があることです。

HTTPS通信を維持するためには、有効期限が切れる前にSSL証明書を更新する必要があります。

この記事では、LightsailのWordPressを対象に、bncertツールを利用してLet’s Encryptが発行するSSL証明書を自動更新する方法を紹介します。

Let’s EncryptのSSL証明書の有効期限は90日間です! 90日毎に証明書を手動で更新するのは面倒くさいので、自動更新化してしまいましょう!

想定する設定
  • SSL証明書の自動更新
  • www.<domain>から<domain>へのリダイレクト
  • IPv6対応(DNSレコードにAAAAレコード追加)

LightsailのWordPressでのHTTPS化について

LightsailのWordPressをHTTPS化するために、2つの方法がLightsailのドキュメントに公開されています。

1つはCertbotコマンドを利用する方法で、もう1つがBitnami HTTPS 設定ツール(bncert)を利用する方法です。

自動更新を行うためにはbncertツールを利用します

Certbotコマンドを利用した場合、有効期限が切れる前に手動でSSL証明書を更新する必要があります。

bncertツールはBitnamiのHTTPS設定ツールです。

bncertツールを利用した具体的な設定方法の前に、まずBitnamiとbncertツールについて紹介しておきます。

Bitnamiとは

BitnamiとはBitrock Inc.が開発しているライブラリです。

Bitnamiの公式サイトには下記のように紹介されています。

Bitnami makes it easy to get your favorite open source software up and running on any platform, including your laptop, Kubernetes and all the major clouds. In addition to popular community offerings, Bitnami, now part of VMware, provides IT organizations with an enterprise offering that is secure, compliant, continuously maintained and customizable to your organizational policies.

https://bitnami.com/

要するに様々なプラットフォームに対応した、オープンソースソフトウェアのインストール・実行ツールのことです!
WordPress, Drupal, Jenkinsなど多数のソフトウェアが対応しているよ。

LightsailのWordPressはBitnamiを利用してインストールされているので、Bitnamiの設定ツールを利用して各種設定を行うことができます。

こういったパッケージツールを利用するかどうかは好みがありますよね。

パッケージツールとかは使いたくない!という人は、LightsailではなくてEC2の利用を検討するしかないかもしれませんね。

bncertツールについて

bncertツールは、Bitnamiに同梱されているHTTPS設定ツールです。

主にBitnamiでインストールされたWebアプリケーションに対するHTTPSの証明に利用されますが、証明書の更新やHTTPからHTTPSへのリダイレクト設定なども行うことができます。

細かいことは公式のドキュメントにまとまっているので、気になる方はチェックしてみてください。

bncertツールによるSSL証明書の自動更新

それではbncertツールによるSSL証明書の自動更新の設定を行っていきましょう。

基本的には公式ドキュメント通りに進めれば大丈夫ですが、ドキュメント通りだとIPv6に対応できません。

下記では、IPv6に対応するために必要な方法について紹介します。

無理してIPv6に対応する必要はないですが、今後IPv6は標準になっていくはずなので、対応していないよりは対応させておいた方がよいですよね。

事前準備

LightsaiのDNSゾーンの設定を行います。公式ドキュメントの「ステップ2. 前提条件を完了させる」にあたります。

設定するべきものはAレコードとAAAAレコードです。

Aレコードは、サブドメインが@.your-domainで解決先に静的IPを指定します。AAAAレコードは、サブドメインが@.your-domainで解決先にIPv6のIPです。

レコード設定の詳細は、こちらの公式ドキュメントを参考にしてください。

人によってはwww.<your-domain>に対してCNAMEレコードを設定している人がいるかもしれません。

CNAMEレコードはあってもなくても大丈夫なので、そのままで構いません。

ポイント

bncertの公式ドキュメントではAレコード以外は設定してはいけないと書いてありますが、AAAAレコードやCNAMEレコードがDNSゾーンに登録されていても問題ありません

ただし、その場合はbncertコマンドを実行するときに下記で説明するオプションを追加する必要があります。

bncertツールによるSSL証明書のインストール

公式ドキュメントの「ステップ5. WordPress インスタンスで HTTPS を有効にする」に当たる箇所です。

下記通りに進めていけば大丈夫です。ポイントは、bncert-toolコマンドでvalidationを無効にするオプションを付与することです

# Lightsailインスタンスにsshで接続して実行
$ sudo /opt/bitnami/bncert-tool --perform_public_ip_validation 0 --perform_dns_validation 0

実際に上記コマンドを実行して、インタラクティブモードで証明書の設定を行いましょう。

# Lightsailインスタンスにsshで接続して、bncert-toolコマンドを実行
# オプションの付与を忘れずに!
$ sudo /opt/bitnami/bncert-tool --perform_public_ip_validation 0 --perform_dns_validation 0
----------------------------------------------------------------------------
Welcome to the Bitnami HTTPS Configuration tool.
----------------------------------------------------------------------------
DomainsPlease provide a valid space-separated list of domains
for which you wish to configure your web server.Domain list []: takake-blog.com <- ここで自分のドメインを指定
The following domains were not included: www.takake-blog.com.
Do you want to add them? [Y/n]: Y <- wwwも追加する場合は"Y"
----------------------------------------------------------------------------
Enable/disable redirectionsPlease select the redirections you wish to enable
or disable on your Bitnami installation.
Enable HTTP to HTTPS redirection [Y/n]: Y <- HTTPはHTTPSにリダイレクトするべきなので"Y"
Enable non-www to www redirection [Y/n]: n <- wwwはnon-wwwへリダイレクトしたいので"n"
Enable www to non-www redirection [y/N]: Y <- ここは"Y"
----------------------------------------------------------------------------
Changes to performThe following changes will be performed to your Bitnami installation:
1. Stop web server
2. Configure web server to use a free Lets Encrypt certificate for the domains: takake-blog.com www.takake-blog.com
3. Configure a cron job to automatically renew the certificate each month
4. Configure web server name to: takake-blog.com
5. Enable HTTP to HTTPS redirection (example: redirect https://takake-blog.com to https://takake-blog.com)
6. Enable www to non-www redirection (example: redirect www.takake-blog.com to takake-blog.com)
7. Start web server once all changes have been performed
Do you agree to these changes? [Y/n]: Y <- 上記で問題なければ"Y"
----------------------------------------------------------------------------
Create a free HTTPS certificate with Lets EncryptPlease provide a valid e-mail
address for which to associate your Lets Encrypt certificate.
Domain list: takake-blog.com www.takake-blog.com
Server name: takake-blog.com
E-mail address []: hogehoge@huga.com <- 自分のメールアドレスを指定
The Lets Encrypt Subscriber Agreement can be found at:
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
Do you agree to the Let's Encrypt Subscriber Agreement? [Y/n]: Y <- とりあえず"Y"
----------------------------------------------------------------------------
Performing changes to your installationThe Bitnami HTTPS Configuration Tool will
perform any necessary actions to your Bitnami installation.
This may take some time, please be patient.
----------------------------------------------------------------------------
Success
The Bitnami HTTPS Configuration Tool succeeded in modifying your installation.
The configuration report is shown below.Backup files:
* /opt/bitnami/apache2/conf/httpd.conf.back.yyyymmdd
* /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf.back.yyyymmdd
* /opt/bitnami/apache2/conf/bitnami/bitnami.conf.back.yyyymmdd
Find more details in the log file:/tmp/bncert-yyyymmdd.log
If you find any issues, please check Bitnami Support forums at:
https://community.bitnami.comPress
[Enter] to continue:

以上です。これで、80日毎に自動でSSL証明書がインストールされます。

最後に、httpsで自分のサイトにログインできることと、wwwからnon-wwwにリダイレクトされることを確認しましょう。

また、下記サイトでAレコードとAAAAレコードが自分のドメインに結びついていることも確認しておきましょう。

https://www.whatsmydns.net/

おまけ:bncert-toolコマンドでオプションを付けないときのエラー

上記ではbncert-toolコマンドにdnsのvalidationを無効化するオプションを付与しましたが、もし付与しないで実行すると下記のようなエラーになります。

# ドメインの指定まで進める
$ sudo /opt/bitnami/bncert-tool
...
...
2222/04/01 00:00:00 Could not obtain certificates:
error: one or more domains had a problem:[www.takake-blog.com]
acme: error: 400 :: urn:ietf:params:acme:error:dns :: DNS problem:
NXDOMAIN looking up A for www.takake-blog.com -
check that a DNS record exists for this domain

bncert-toolコマンドはまだIPv6に対応していないので、AAAAレコードがDNSゾーンに指定されていると、名前解決で失敗してしまうようです。

まとめ

この記事ではbncertツールを利用して、LightsailのWordPressにLet’s EncryptのSSL証明書を自動インストールする方法を紹介しました。

基本的には公式ドキュメント通りに進めていけば良いので簡単ですね。IPv6に対応するために実行時オプションを付与するだけです。

IPv6にbncertツールが対応していない件についてはbitnamiのこちらのフォーラムで言及されています。今後対応予定とのことなので、そのうちvalidationの無効化も必要なくなるかもしれませんね。