翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チュートリアル: Lightsail の Nginx インスタンスで Let's Encrypt の SSL 証明書を使用する
Amazon Lightsail では、Lightsail ロードバランサーを使用すると、SSL/TLS でウェブサイトとアプリケーションのセキュリティを簡単に強化できます。ただし、Lightsail ロードバランサーの使用は一般的に最適な選択肢ではない場合があります。ロードバランサーが提供するスケーラビリティや耐障害性がサイトでは必要ない場合や、コストを最適化するためにロードバランサーを使用しない場合があります。
後者の場合は、Let's Encrypt で無料の SSL 証明書を入手できます。無料の証明書を使用することに問題はありません。これらの証明書は Lightsail インスタンスに統合できます。このチュートリアルでは、Certbot を使用して Let’s Encrypt ワイルドカード証明書をリクエストし、これを Nginx インスタンスに統合する方法を示します。
重要
-
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 に Nginx インスタンスを作成します。詳細については、「インスタンスを作成する」を参照してください。
-
ドメイン名を登録し、その DNS レコードを編集するための管理アクセスを取得します。詳細については、「DNS」を参照してください。
注記
ドメインの DNS レコードは、Lightsail の DNS ゾーンを使用して管理することをお勧めします。詳細については、「DNS ゾーンを作成してドメインの DNS レコードを管理する」を参照してください。
-
Lightsail コンソールでブラウザベースの SSH ターミナルを使用して、このチュートリアルのステップを実行します。ただし、独自の SSH クライアント (PuTTY など) を使用することもできます。PuTTY の設定の詳細については、「Amazon Lightsail で PuTTY をダウンロードし、SSH を使用して接続するようにセットアップする」を参照してください。
前提条件が完了したら、このチュートリアルの「次のセクション」に進みます。
ステップ 2: Lightsail インスタンスに 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
これで Lightsail インスタンスに Cerbot がインストールされました。
-
ブラウザベースの 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=
domain
WILDCARD=*.$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
の部分を追加します。 -
[Save (保存)] を選択します。
-
ステップ 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
に移動します。 -
次の内容をテキストボックスに入力します。
は実際のドメインに置き換えてください。domain
_acme-challenge.
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 証明書リクエストを完了する
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションに戻り、Let's Encrypt 証明書のリクエストを完了します。Certbot は、SSL 証明書、チェーン、およびキーファイルを Nginx インスタンスの特定のディレクトリに保存します。
Let's Encrypt の SSL 証明書リクエストを完了するには
-
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、Enter キーを押し、Let's Encrypt SSL 証明書のリクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。
証明書、チェーン、およびキーファイルが
/etc/letsencrypt/live/
ディレクトリに保存されたことを確認するメッセージが表示されます。domain
/
は、実際のドメイン (domain
/etc/letsencrypt/live/
など) に置き換えてください。example.com
/ -
メッセージに記載されている有効期限を書き留めておきます。この期限日までに証明書を更新する必要があります。
-
これで Let's Encrypt SSL 証明書が手に入ったので、このチュートリアルの「次のセクション」に進みます。
ステップ 7: Nginx サーバーディレクトリに Let's Encrypt の証明書ファイルへのリンクを作成する
Let's Encrypt の SSL 証明書ファイルへのリンクを、Nginx インスタンスの Nginx サーバーディレクトリに作成します。また、必要になる場合に備えて既存の証明書をバックアップします。
Nginx サーバーディレクトリで Let's Encrypt の証明書ファイルへのリンクを作成するには
-
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力して基本サービスを停止します。
sudo /opt/bitnami/ctlscript.sh stop
次のようなレスポンスが表示されます。
-
次のコマンドを入力してドメインの環境変数を設定します。コマンドのコピー&ペーストで、より効率的に証明書ファイルにリンクを張れます。
は登録済みのドメイン名に置き換えてください。domain
DOMAIN=
domain
例:
DOMAIN=
example.com
-
次のコマンドを入力し、変数が正しい値を返すことを確認します。
echo $DOMAIN
次のような結果が表示されます。
-
バックアップとして既存の証明書ファイルがある場合、以下のコマンドを個別に入力して名前を書き換えます。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
-
Debian Linux ディストリビューションの場合
アプローチ A (システムパッケージを使用した Bitnami インストール):
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
アプローチ B (自己完結型 Bitnami インストール):
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
-
Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合:
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
-
-
以下のコマンドを個別に入力し、Nginx サーバーディレクトリにある Let's Encrypt の証明書ファイルへのリンクを作成します。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
-
Debian Linux ディストリビューションの場合
アプローチ A (システムパッケージを使用した Bitnami インストール):
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/bitnami/certs/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/bitnami/certs/server.crt
アプローチ B (自己完結型 Bitnami インストール):
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/server.key
sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/server.crt
-
Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合:
sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/bitnami/certs/server.key
sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/bitnami/certs/server.crt
-
-
次のコマンドを入力して、先ほど停止した基本サービスを開始します。
sudo /opt/bitnami/ctlscript.sh start
次のような結果が表示されます。
これで SSL 暗号化を使用するように Nginx インスタンスが設定されました。ただし、トラフィックは HTTP から HTTPS に自動的にはリダイレクトされません。
-
このチュートリアルの「次のセクション」に進みます。
ステップ 8: ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する
Nginx インスタンスの HTTP から HTTPS へのリダイレクトを設定することができます。HTTP から HTTPS へのリダイレクトを自動的に行うことで、SSL を使用するユーザーにのみ (HTTP を使用して接続した場合でも) サイトへのアクセスを許可できます。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
このチュートリアルではデモの目的で Vim を使用していますが、任意のテキストエディタを使用できます。
Debian Linux ディストリビューション – ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する
アプローチ A (システムパッケージを使用した Bitnami インストール):
-
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力し、サーバーブロック設定ファイルを変更します。アプリケーションの名前を
<ApplicationName>
に置き換えます。sudo vim /opt/bitnami/nginx/conf/server_blocks/<ApplicationName>-server-block.conf
-
i
キーを押して Vim エディタを挿入モードにします。 -
次の例の情報を使用してファイルを編集します。
-
ESC キーを押して「
:wq
」と入力し、編集内容を書き込んで (保存して) Vim を終了します。 -
次のコマンドを入力して、Nginx 設定ファイルのサーバーセクションを変更します。
sudo vim /opt/bitnami/nginx/conf/nginx.conf
-
i
キーを押して Vim エディタを挿入モードにします。 -
次の例の情報を使用してファイルを編集します。
-
ESC キーを押して「
:wq
」と入力し、編集内容を書き込んで (保存して) Vim を終了します。 -
次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。
sudo /opt/bitnami/ctlscript.sh restart
アプローチ B (自己完結型 Bitnami インストール):
-
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力し、Nginx 設定ファイルを変更します:
sudo vim /opt/bitnami/nginx/conf/nginx.conf
-
i
キーを押して Vim エディタを挿入モードにします。 -
次の例の情報を使用してファイルを編集します。
-
ESC キーを押して「
:wq
」と入力し、編集内容を書き込んで (保存して) Vim を終了します。 -
次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。
sudo /opt/bitnami/ctlscript.sh restart
Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合 – ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する
-
Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力し、Vim テキストエディタを使用して Nginx ウェブサーバー設定ファイルを編集します。
sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
-
i
キーを押して Vim エディタを挿入モードにします。 -
このファイルで、
server_name localhost;
とinclude "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-prefix.conf";
の間に次のテキストを入力します。return 301 https://$host$request_uri;
結果は次のようになります。
-
ESC キーを押して「
:wq
」と入力し、編集内容を書き込んで (保存して) Vim を終了します。 -
次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。
sudo /opt/bitnami/ctlscript.sh restart
これで、HTTP から HTTPS へ自動的に接続をリダイレクトするように Nginx インスタンスが設定されました。訪問者が
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 ワイルドカード証明書をリクエストする」セクションのステップを繰り返します。