Amazon Lightsail Bitnami インスタンスでウェブサイト用にインストールされている Let's Encrypt SSL 証明書の有効期限が近づいています。
簡単な説明
Let's Encrypt SSL 証明書は、作成後 90 日で有効期限が切れます。「Lightsailでホストされている Bitnami スタックにLet's Encrypt SSL証明書をインストールする方法を教えてください。」に記載されている手順に従って標準の Let's Encrypt 証明書をインストールした場合、SSL 証明書は自動的に更新されます。ただし、正しく設定されていないと、自動更新が失敗する可能性があります。
「Amazon Lightsail でホストされている Bitnami スタックにワイルドカードの Let's Encrypt SSL 証明書をインストールする方法を教えてください。」の方法 2 でワイルドカードの Let's Encrypt 証明書をインストールした場合は、証明書を手動で更新する必要があります。方法 2 は自動更新をサポートしていません。
以下の解決策では、WordPress、LAMP、Magento、MEAN などの Bitnami がホストする Lightsail インスタンスで証明書を手動で更新する方法について説明します。
解決策
証明書インストールツールを確認する
証明書のインストールに使用したツールを特定します。SSL 証明書のインストールに使用したツールを確認するには、次の操作を行います。
-
次のコマンドを実行して、/etc/letsencrypt ディレクトリと /opt/bitnami/letsencrypt ディレクトリにある証明書ファイルを検索します。必ず DOMAIN をご使用のドメイン名に置き換えてください。
sudo grep -irl "$(openssl s_client -verify_quiet -showcerts -connect DOMAIN:443 2>/dev/null | sed -n '/BEGIN/,/END/{p;/END/q}' | head -n 3 | tail -n 2)" /opt/bitnami/letsencrypt /etc/letsencrypt
-
証明書ファイルが /opt/bitnami/letsencrypt のサブディレクトリ内にある場合、証明書は bncert-tool または Lego クライアントと一緒にインストールされた可能性があります。確認するために、以下のコマンドを実行します。
sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list
手順 1 のコマンドの出力が 2 番目のコマンドで指定された証明書パスと一致する場合、証明書は bncert-tool または Lego でインストールされたことになります。
証明書ファイルが /etc/letsencrypt のサブディレクトリ内にある場合、証明書はおそらく Certbot と一緒にインストールされています。確認するために、以下のコマンドを実行します。
sudo certbot certificates
手順 1 のコマンドの出力が Certbot コマンドで指定された証明書パスと一致する場合、証明書は Certbot と一緒にインストールされています。
特定されたツールに基づいて、関連する解決手順に従ってください。
bncert-tool または Lego ツールでインストールされた Let's Encrypt 証明書を更新する
以下のコマンドを実行します。
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
すべてのコマンドに対して、EMAIL-ADDRESS と DOMAIN を正しい値に置き換えます。**EMAIL-ADDRESS ** には、現在使用しているメールアドレスを使用します。または、証明書をインストールしたときに使用したのと同じメールアドレスを使用します。証明書のインストールに使用したメールアドレスは、次のコマンドで取得できます。
sudo ls /opt/bitnami/letsencrypt/accounts/acm*
必要に応じて、次のコマンドでドメイン名を確認します。
sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list
Certbot ツールでインストールされた Let's Encrypt 証明書を更新する
次のコマンドを実行して、証明書のインストールに使用した認証方法を確認します。DOMAIN を証明書のプライマリドメイン名に置き換えます。
sudo cat /etc/letsencrypt/renewal/DOMAIN.conf
コマンド出力で、authenticator パラメータ値を表示します。値に基づいて、次のいずれかの更新方法に従います。
authenticator パラメータの値がstandalone、webroot、apache、nginx、dns-route53、または manual ではないその他の値の場合は、次のコマンドを使用して更新を完了します。
sudo /opt/bitnami/ctlscript.sh stop
sudo certbot renew
sudo /opt/bitnami/ctlscript.sh start
これらのコマンドは、更新予定のインストール済み証明書をすべて更新します。
-または-
authenticator パラメータの値が manual で、pref_challs パラメータ値が dns の場合、自動更新を設定することはできません。次の手順で手動で更新する必要があります。注: 証明書を更新するたびに、この手順を繰り返す必要があります。
-
この方法では、ドメインの DNS プロバイダーに TXT レコードを追加する必要があります。セッションがタイムアウトしないように、Linux GNU Screen でコマンドを実行するのがベストプラクティスです。詳細については、「Linux 画面の使用方法」を参照してください。
Screen セッションを開始するには、次のコマンドを入力します。
screen -S letsencrypt
-
次のコマンドを実行して、Domains パラメーター値を探します。DOMAIN を証明書のプライマリドメイン名に置き換えます。
sudo certbot certificates -d DOMAIN
-
次のコマンドを実行して証明書を更新します。前のコマンドで見つかった各ドメインを -d オプションを使用して同じ順序で含めるようにします。ドメインを追加、削除、または順序を変更すると、元の証明書を更新する代わりに新しい証明書が作成されることがあります。
sudo certbot certonly --manual --preferred-challenge dns -d DOMAIN-1 -d DOMAIN-2 --force-renewal
-
指定したドメインを所有していることを確認するプロンプトが表示されます。この認証は、ドメインの DNS レコードに TXT レコードを追加するためのものです。Let's Encrypt は、検証に使用する必要がある 1 つまたは複数の TXT レコードを提供します。
-
画面に TXT レコードが表示されたら、提供されたレコードをドメインの DNS に追加します。
**重要:**TXT レコードがインターネット DNS に伝達されたことを確認するまで Enter キーを押さないでください。現在の画面セッションが終了するので、CTRL+D キーを押さないでください。
-
TXT レコードがインターネット DNS に伝達されていることを確認するには、MX Toolbox ウェブサイトの DNS Text Lookup を確認してください。テキストボックスに次のテキストを入力し、[TXT Lookup] を選択してチェックを実行します。example.com は、ご自身のドメイン名に置き換えます。
_acme-challenge.example.com
-
TXT レコードがインターネットの DNS に伝達されると、ページに TXT レコードの値が表示されます。画面に戻り、ENTER キーを押すことができます。
-
シェルから削除された場合は、screen -r SESSIONID のコマンドで戻ります。**screen-ls ** コマンドを実行してセッション ID を取得します。
-
Certbot プロンプトで別の TXT レコードを追加するように求められた場合は、ステップ 5 ~ 8 をもう一度実行します。
-
SSL 証明書が正常に生成されると、「証明書を正常に受信しました」というメッセージが表示されます。