今回は Amazon Lightsail インスタンスに T…
今回は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レコードを追加します。
- ホスト名 ・・・ _acme-challenge.example.com
- 値・・・表示された値
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 証明書を使用する