翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Let's Encrypt SSL 証明書を使用して Lightsail LAMP インスタンスを保護する
Amazon Lightsail を使用すると、Lightsail ロードバランサーを使用して SSL/TLS でウェブサイトやアプリケーションを簡単に保護できます。ただし、Lightsail ロードバランサーの使用は、一般的には適切な選択ではない場合があります。ロードバランサーが提供するスケーラビリティや耐障害性がサイトでは必要ない場合や、コストを最適化するためにロードバランサーを使用しない場合があります。
後者の場合は、Let's Encrypt で無料の SSL 証明書を入手できます。無料の証明書を使用することに問題はありません。これらの証明書は Lightsail インスタンスと統合できます。このチュートリアルでは、Certbot を使用して Let’s Encrypt ワイルドカード証明書をリクエストし、これを LAMP インスタンスに統合する方法を示します。
重要
-
Bitnami インスタンスで使用されている Linux ディストリビューションは、2020 年 7 月に Ubuntu から Debian に変更されました。この変更により、このチュートリアルのいくつかのステップは、インスタンスの Linux ディストリビューションによって異なります。変更後に作成された Bitnami ブループリントインスタンスはすべて Debian Linux ディストリビューションを使用します。変更前に作成されたインスタンスは、Ubuntu Linux ディストリビューションを引き続き使用します。インスタンスのディストリビューションをチェックするには、
uname -a
コマンドを実行します。応答には、インスタンスの Linux ディストリビューションとして Ubuntu または Debian のいずれかが表示されます。 -
Bitnami は、多くのスタックのファイル構造を変更するプロセスです。このチュートリアルのファイルパスは、Bitnami スタックがネイティブ Linux システムパッケージを使用しているか (アプローチ A)、または自己完結型インストール (アプローチ B) であるかによって、変更される場合があります。Bitnami のインストールタイプと取るべき方法を特定するには、次のコマンドを実行します。
test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."
目次
ステップ 1: 前提条件を満たす
以下の前提条件を満たします (まだ満たしていない場合)。
-
Lightsail で LAMP インスタンスを作成します。詳細については、「インスタンスを作成する」を参照してください。
-
ドメイン名を登録し、その DNS レコードを編集するための管理アクセスを取得します。詳細については、Amazon Lightsail DNS」を参照してください。
注記
Lightsail DNS ゾーンを使用してドメインの DNS レコードを管理することをお勧めします。詳細については、「 DNS ゾーンを作成し、ドメインの DNS レコードを管理する」を参照してください。
-
Lightsail コンソールのブラウザベースの SSH ターミナルを使用して、このチュートリアルの手順を実行します。ただし、独自の SSH クライアント (PuTTY など) を使用することもできます。PuTTY の設定の詳細については、「PuTTY をダウンロード、SSH を使用して接続するようにセットアップする」を参照してください。
前提条件が完了したら、このチュートリアルの「次のセクション」に進みます。
ステップ 2: インスタンスに Certbot をインストールする
Certbot は、Let's Encrypt の証明書をリクエストしてウェブサーバーにデプロイするために使用するクライアントです。Let's Encrypt は ACME プロトコルを使用して証明書を発行します。Certbot は、Let's Encrypt とやり取りする ACME 対応のクライアントです。
Lightsail インスタンスに Certbot をインストールするには
-
Lightsail コンソール
にサインインします。 -
Lightsail ホームページで、接続するインスタンスの SSH クイック接続アイコンを選択します。
-
Lightsail ブラウザベースの SSH セッションが接続されたら、次のコマンドを入力してインスタンスのパッケージを更新します。
sudo apt-get update
-
次のコマンドを入力してソフトウェアプロパティパッケージをインストールします。Certbot の開発者は、Personal Package Archive (PPA) を使用して Cerbot を配信します。ソフトウェアプロパティパッケージを使用すると、PPA をより効率的に操作できます。
sudo apt-get install software-properties-common
注記
sudo apt-get install
コマンドを実行したときにCould not get lock
エラーが発生した場合は、約 15 分待ってから再試行してください。このエラーは、自動アップグレードをインストールするために Apt パッケージ管理ツールを使用している cron ジョブが原因で発生している可能性があります。 -
次のコマンドを入力して Certbot をローカル apt リポジトリに追加します。
注記
ステップ 5 は、Ubuntu Linux ディストリビューションを使用するインスタンスにのみ適用されます。インスタンスが Debian Linux ディストリビューションを使用している場合は、このステップをスキップしてください。
sudo apt-add-repository ppa:certbot/certbot -y
-
次のコマンドを入力して apt を更新し、新しいリポジトリを含めます。
sudo apt-get update -y
-
次のコマンドを入力して Cerbot をインストールします。
sudo apt-get install certbot -y
これで、Certbot が Lightsail インスタンスにインストールされました。
-
ブラウザベースの SSH ターミナルウィンドウは開いたままにします。このチュートリアルで後ほど戻ります。このチュートリアルの「次のセクション」に進みます。
ステップ 3: Let's Encrypt の SSL ワイルドカード証明書をリクエストする
Let's Encrypt の証明書をリクエストするプロセスを開始します。Certbot を使用してワイルドカード証明書をリクエストします。この 1 つの証明書をドメインとそのサブドメインの両方に使用できます。たとえば、1 つのワイルドカード証明書を example.com
最上位ドメイン、blog.example.com
サブドメイン、および stuff.example.com
サブドメインに使用できます。
Let's Encrypt の SSL ワイルドカード証明書をリクエストするには
-
このチュートリアルのステップ 2 で使用した同じブラウザベースの SSH ターミナルウィンドウで、以下のコマンドを入力してドメインの環境変数を設定します。より効率的にコマンドをコピーして貼り付け、証明書を取得できます。
DOMAIN=
Domain
WILDCARD=*.$DOMAIN
コマンドで、
Domain
を登録済みのドメイン名に置き換えます。例:
DOMAIN=
example.com
WILDCARD=*.$DOMAIN
-
次のコマンドを入力し、変数が正しい値を返すことを確認します。
echo $DOMAIN && echo $WILDCARD
次のような結果が表示されます。
-
次のコマンドを入力して Certbot をインタラクティブモードで起動します。このコマンドでは、DNS チャレンジで手動認証を使用してドメインの所有権を検証することを Certbot に指示します。また、最上位ドメインとそのサブドメイン用にワイルドカード証明書をリクエストします。
sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
-
プロンプトに応じて E メールアドレスを入力します。これで更新とセキュリティに関する通知を受信します。
-
Let's Encrypt のサービス利用規約を読みます。読み終わり、同意する場合は A キーを押します。同意しない場合は、Let's Encrypt の証明書を取得できません。
-
E メールアドレスの共有と IP アドレスのログ記録に関するプロンプトに適宜応答します。
-
Let's Encrypt から、指定されたドメインの所有者であることの検証を求められます。これを行うには、ドメインの DNS レコードに TXT レコードを追加します。以下の例に示すように 2 組の TXT レコード値が提供されます。
注記
Let's Encrypt では検証に必要な TXT レコードを 1 つまたは複数提供する場合があります。この例では、検証に使用する 2 つの TXT レコードが提供されました。
-
Lightsail ブラウザベースの SSH セッションを開いたままにしておきます。このチュートリアルの後半に戻ります。このチュートリアルの「次のセクション」に進みます。
ステップ 4: ドメインの DNS ゾーンに TXT レコードを追加する
ドメインの DNS ゾーンに TXT レコードを追加すると、自分がドメインを所有していることが検証されます。デモンストレーションの目的で、Lightsail DNS ゾーンを使用します。ただし、ドメインレジストラがホストする他の一般的な DNS ゾーンでも手順はほぼ同じです。
注記
ドメインの Lightsail DNS ゾーンを作成する方法の詳細については、「Lightsail でドメインの DNS レコードを管理する DNS ゾーンの作成」を参照してください。
Lightsail でドメインの DNS ゾーンに TXT レコードを追加するには
-
Lightsail のホームページで、[Domains & DNS] (ドメイン & DNS) タブを選択します。
-
ページの [DNS ゾーン] セクションで、Certbot 証明書リクエストで指定したドメインの DNS ゾーンを選択します。
-
DNS ゾーンエディタで [DNS records] (DNS レコード) を選択します。
-
[レコードの追加] を選択します。
-
[Record type] (レコードタイプ) のドロップダウンメニューで [TXT record] (TXT レコード) を選択します。
-
Let's Encrypt 証明書のリクエストで指定された値を [Record name] (レコード名) と [Responds with] (応答) フィールドに入力します。
注記
Lightsail コンソールは、ドメインの頂点部分を事前に入力します。たとえば、
サブドメインを追加する場合は、_acme-challenge.example.com
テキストボックスに入力するだけで、レコードを保存するときに Lightsail が_acme-challenge
.example.com
の部分を追加します。 -
[保存] を選択します。
-
ステップ 4~7 を繰り返して、Let's Encrypt の証明書リクエストで指定された 2 番目の TXT レコードのセットを追加します。
-
Lightsail コンソールのブラウザウィンドウを開いたままにしておきます。このチュートリアルの後半に戻ります。このチュートリアルの「次のセクション」に進みます。
ステップ 5: TXT レコードが反映されたことを確認する
MxToolbox ユーティリティを使用して、TXT レコードがインターネットの DNS に伝播されたことを確認します。DNS レコードの反映には、DNS ホスティングプロバイダーと DNS レコードの有効期限 (TTL) の設定によって時間がかかる場合があります。このステップを完了し、TXT レコードが反映されたことを確認した上で、Certbot 証明書のリクエストに進むことが重要です。そうしないと、証明書のリクエストは失敗します。
TXT レコードがインターネットの DNS に反映されたことを確認するには
-
新しいブラウザウィンドウを開き、https://mxtoolbox.com/TXTLookup.aspx
に移動します。 -
次の内容をテキストボックスに入力します。
_acme-challenge.
Domain
Domain
は、登録済みのドメイン名に置き換えます。例:
_acme-challenge.
example.com
-
[TXT Lookup (TXT ルックアップ)] を選択して確認を行います。
-
以下のいずれかのレスポンスが返されます。
-
TXT レコードがインターネットの DNS に反映された場合は、次のスクリーンショットに示すようなレスポンスが表示されます。ブラウザウィンドウを閉じて、このチュートリアルの「次のセクション」に進みます。
-
TXT レコードがインターネットの DNS に反映されていない場合は、[DNS Record not found (DNS レコードが見つかりません)] というレスポンスが返されます。適切な DNS レコードをドメインの DNS ゾーンに追加したことを確認してください。適切なレコードを追加した場合は、ドメインの DNS レコードが反映されるまでしばらく待ってから、TXT のルックアップを再実行します。
-
ステップ 6: Let's Encrypt の SSL 証明書リクエストを完了する
LAMP インスタンスの Lightsail ブラウザベースの SSH セッションに戻り、Let's Encrypt 証明書リクエストを完了します。Certbot は、SSL 証明書、チェーン、およびキーファイルを LAMP インスタンスの特定のディレクトリに保存します。
Let's Encrypt の SSL 証明書リクエストを完了するには
-
LAMP インスタンスの Lightsail ブラウザベースの SSH セッションで、Enter キーを押して Let's Encrypt SSL 証明書リクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。
証明書、チェーン、およびキーファイルが
/etc/letsencrypt/live/
ディレクトリに保存されたことを確認するメッセージが表示されます。Domain
/[Domain]
(ドメイン) は、登録済みのドメイン名 (/etc/letsencrypt/live/
など) になります。example.com
/ -
メッセージに記載されている有効期限を書き留めておきます。この期限日までに証明書を更新する必要があります。
-
これで Let's Encrypt SSL 証明書が手に入ったので、このチュートリアルの「次のセクション」に進みます。
ステップ 7: Apache サーバーディレクトリで Let's Encrypt の証明書ファイルへのリンクを作成する
LAMP インスタンスの Apache サーバーディレクトリにある Let's Encrypt の SSL 証明書ファイルへのリンクを作成します。また、必要になる場合に備えて既存の証明書をバックアップします。
Apache サーバーディレクトリで Let's Encrypt の証明書ファイルへのリンクを作成するには
-
LAMP インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力して、基盤となる LAMP スタックサービスを停止します。
sudo /opt/bitnami/ctlscript.sh stop
次のようなレスポンスが表示されます。
-
次のコマンドを入力してドメインの環境変数を設定します。
DOMAIN=
Domain
コマンドで、
Domain
を登録済みのドメイン名に置き換えます。例:
DOMAIN=
example.com
-
次のコマンドを入力し、変数が正しい値を返すことを確認します。
echo $DOMAIN
次のような結果が表示されます。
-
バックアップとして既存の証明書ファイルがある場合、以下のコマンドを個別に入力して名前を書き換えます。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
-
Debian Linux ディストリビューションの場合
アプローチ A (システムパッケージを使用した Bitnami インストール):
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
アプローチ B (自己完結型 Bitnami インストール):
sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
-
Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合:
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.crt /opt/bitnami/apache/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.key /opt/bitnami/apache/conf/bitnami/certs/server.key.old
-
-
以下のコマンドを個別に入力し、Apache2 ディレクトリで Let's Encrypt の証明書ファイルへのリンクを作成します。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
-
Debian Linux ディストリビューションの場合
アプローチ A (システムパッケージを使用した Bitnami インストール):
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
アプローチ B (自己完結型 Bitnami インストール):
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/server.crt
-
Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合:
sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache/conf/bitnami/certs/server.key
sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache/conf/bitnami/certs/server.crt
-
-
次のコマンドを入力して、以前に停止した基盤となる LAMP スタックサービスを開始します。
sudo /opt/bitnami/ctlscript.sh start
次のような結果が表示されます。
これで SSL 暗号化を使用するように LAMP インスタンスが設定されました。ただし、トラフィックは HTTP から HTTPS に自動的にはリダイレクトされません。
-
このチュートリアルの「次のセクション」に進みます。
ステップ 8: ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する
LAMP インスタンスの HTTP から HTTPS へのリダイレクトを設定できます。HTTP から HTTPS へのリダイレクトを自動的に行うことで、SSL を使用するユーザーにのみ (HTTP を使用して接続した場合でも) サイトへのアクセスを許可できます。
ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定するには
-
LAMP インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力して、Vim テキストエディタを使用して Apache ウェブサーバー設定ファイルを編集します。
sudo vim /opt/bitnami/apache2/conf/bitnami/bitnami.conf
注記
このチュートリアルではデモの目的で Vim を使用していますが、任意のテキストエディタを使用できます。
-
i
キーを押して Vim エディタを挿入モードにします。 -
このファイルで、
DocumentRoot "/opt/bitnami/apache2/htdocs"
と<Directory "/opt/bitnami/apache2/htdocs">
の間に次のテキストを入力します。RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
結果は次のようになります。
-
ESC キーを押して「
:wq
」と入力し、編集内容を書き込んで (保存して) Vim を終了します。 -
次のコマンドを入力して基盤となる LAMP スタックサービスを再開し、編集内容を反映します。
sudo /opt/bitnami/ctlscript.sh restart
これで、HTTP から HTTPS へ自動的に接続をリダイレクトするように LAMP インスタンスが設定されました。訪問者が
http://www.example.com
にアクセスすると、暗号化されたhttps://www.example.com
アドレスに自動的にリダイレクトされます。
ステップ 9: Let's Encrypt 証明書を 90 日ごとに更新する
Let's Encrypt 証明書の有効期間は 90 日間です。証明書は有効期限が切れる 30 日前から更新できます。Let's Encrypt 証明書を更新するには、取得するために使用した元のコマンドを実行します。このチュートリアルの「Let's Encrypt の SSL ワイルドカード証明書をリクエストする」セクションのステップを繰り返します。