Lightsail の WordPress を Let’s Encrypt で SSL化する


今回はAmazon Lightsail で Certbot を使って WordPress を Let’s Encrypt でSSL化する方法をご紹介します。

Lightsail のシステム情報の確認

初めに Lightsail のシステム情報を確認します。

uname -a

Debian でした。インスタンス 作成時に WordPress を選択していれば Debian になっていると思います

Linux ip-xxx-xxx-xxx-xxx 4.19.0-20-cloud-amd64 #1 SMP Debian 4.19.235-1 (2022-03-17) x86_64 GNU/Linux

Certbot のインストール

Certbot をインストールしていきます

まずはリポジトリを更新します

sudo apt update

Certbot をインストールします

sudo apt install snapd -y
sudo snap install core;
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /sbin/certbot

DNSプラグインのインストール

ワイルドカード Let’s Encrypt SSL 証明書を発行できるように DNSプラグインをインストールします

sudo snap set certbot trust-plugin-with-root=ok
sudo snap install --beta certbot-dns-route53
sudo snap connect certbot:plugin certbot-dns-route53

バージョンを確認します。バージョン情報が表示されれば、インストール成功です。

sudo certbot --version

Let’s Encrypt で証明書を発行

次に Certbot で Let’s Encrypt の証明書を発行していきます。

まずは環境変数を指定します。
DOMAIN に SSL を適用したいドメイン、 WILDCARD に 先ほど指定した環境変数 DOMAIN を使ってワイルドカードを指定します。

DOMAIN=example.com
WILDCARD=*.$DOMAIN

環境変数が正常に設定されているか確認します。

echo $DOMAIN && echo $WILDCARD

コマンドを実行して以下のように表示されれば成功です。

example.com
*.example.com

証明書を発行します。html 認証を行おうと思ったのですが、残念ながら対応していないため DNS 認証で発行します。

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly

メールアドレスをを要求されるので入力します。

Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): example@example.com

規約への同意を求められるので Y を入力して進めます。

DNS 認証

DNS認証するためのレコードが表示されます。

_acme-challenge.example.com.

with the following value:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Press Enter Continue

案内された通り、お名前.comなどドメインを管理しているサービスで該当のドメインにTXTレコードを追加します。

DNSレコードを書き換えてもすぐに反映されないので待ちます。時間がかかるので一旦閉じても大丈夫です。閉じた後にまた同じコマンドを実行すれば続きから始められます。変更後の DNSレコードが Lightsail から参照される前に Enter Continue すると認証が失敗し、またはじめから設定が必要になります。

nslookup で確認

nslookup で txt レコードが反映されたかを確認できます。

nslookup -type=txt _acme-challenge.example.com

実行して設定したTXTレコードが表示されれば反映されているということですが、これは目安と考えましょう。

nslookupで確認しても Lightsail のサーバーから変更後の DNSレコードが参照されているとは限らないので、少し長めに待ったおいたほうが良いです。僕は3時間程度を時間を置きました。

DNS 認証2回目

1回目の DNS 認証が成功しても、ワイルドカード対応の SSL のため、もう一回認証が必要になります。
同様に TXTレコードを追加してしばらくしてから認証を行いましょう

Please deploy a DNS TXT record under the name:

_acme-challenge.example.com.

with the following value:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)

Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox:https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.example.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.

_acme-challenge.example.com text = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

表示された DNS認証情報の通りドメインに TXTレコードを再び追加します。

 

2回目の認証に成功すると証明書が発行されます。

証明書と秘密鍵のパスが表示されるので、これらを使って証明書を設定していきます。

Press Enter to Continue

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2022-10-24.
These files will be updated when the certificate renews.

NEXT STEPS:

This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the us
e of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificat
e, repeat this same certbot command before the certificate's expiry date.

If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

既存の証明書のバックアップ

証明書の設定を行う前に既存の証明書の名前を変更しバックアップしておきます。

sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old

作成した証明書にシンボリックリンク

次に先ほどのパスに対してシンボリックリンクを貼ることで証明書を有効化します。

一旦サービスをストップします。設定後にストップしたサービスを再開しますが、この間サイトにアクセスできなくなります。

sudo /opt/bitnami/ctlscript.sh stop

変数に該当のドメインを代入します。

DOMAIN=example.com
echo $DOMAIN

シンボリックリンクを貼ります。

sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/bitnami/certs/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/bitnami/certs/server.crt

サービスを再度起動します。

sudo /opt/bitnami/ctlscript.sh start

これで Let’s Encrypt の証明書が使用できるようになりました。

ただし、これだと証明書の更新がなされないので、次回は証明書の自動更新の設定を紹介します。

参考サイト

Let’s Encrypt 証明書のインストールのために、 Certbot パッケージを Lightsail インスタンスにインストールするにはどうすればよいですか?

チュートリアル: Amazon Lightsail の WordPress インスタンスで Let’s Encrypt の SSL 証明書を使用する

AWS LightsailにおけるLet’s Encrypt(無料サーバ証明書)の更新方法

稼働中サイト移転時のLet’s EncryptによるSSL事前認証・設定方法

コメントを残す