

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Let's Encrypt Lightsail SSL/TLS を使用して NGINX ウェブサイトを保護する
<a name="amazon-lightsail-using-lets-encrypt-certificates-with-nginx"></a>

Amazon Lightsail では、Lightsail ロードバランサーを使用すると、SSL/TLS でウェブサイトとアプリケーションのセキュリティを簡単に強化できます。ただし、Lightsail ロードバランサーの使用は一般的に最適な選択肢ではない場合があります。ロードバランサーが提供するスケーラビリティや耐障害性がサイトでは必要ない場合や、コストを最適化するためにロードバランサーを使用しない場合があります。

後者の場合は、Let's Encrypt で無料の SSL 証明書を入手できます。無料の証明書を使用することに問題はありません。これらの証明書は Lightsail インスタンスに統合できます。このチュートリアルでは、Certbot を使用して Let’s Encrypt ワイルドカード証明書をリクエストし、これを Nginx インスタンスに統合する方法を示します。

## Nginx ブループリントベンダーを特定する
<a name="get-nginx-vendor"></a>

 Nginx インスタンスが で起動および実行された後に開始するために、いくつかのステップを実行する必要がありますAmazon Lightsail。開始する前に、インスタンス管理ページでブループリントベンダーを特定します。

![\[インスタンス管理ページの Nginx ブループリントベンダー\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/headers/nginx-blueprint-vendor.png)


Nginx インスタンスに適したガイドを選択します。

------
#### [ Bitnami ]

**重要**  
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: 前提条件を満たす](#complete-the-prerequisites-lets-encrypt-nginx)
+ [ステップ 2: Lightsail インスタンスに Certbot をインストールする](#install-certbot-on-your-instance-nginx)
+ [ステップ 3: Let's Encrypt の SSL ワイルドカード証明書をリクエストする](#request-a-lets-encrypt-certificate-nginx)
+ [ステップ 4: ドメインの DNS ゾーンに TXT レコードを追加する](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx)
+ [ステップ 5: TXT レコードが反映されたことを確認する](#confirm-the-text-records-have-propagated-lets-encrypt-nginx)
+ [ステップ 6: Let's Encrypt の SSL 証明書リクエストを完了する](#complete-the-lets-encrypt-certificate-request-nginx)
+  [ ステップ 7: NGINX サーバーディレクトリに Let's Encrypt 証明書ファイルへのリンクを作成する ](#link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx) 
+ [ステップ 8: ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する](#configure-http-to-https-redirection-nginx)
+ [ステップ 9: Let's Encrypt 証明書を 90 日ごとに更新する](#renew-a-lets-encrypt-certificate-nginx)

## ステップ 1: 前提条件を満たす
<a name="complete-the-prerequisites-lets-encrypt-nginx"></a>

以下の前提条件を満たします (まだ満たしていない場合)。
+ Lightsail に Nginx インスタンスを作成します。詳細については、「[インスタンスを作成する](how-to-create-amazon-lightsail-instance-virtual-private-server-vps.md)」を参照してください。
+ ドメイン名を登録し、その DNS レコードを編集するための管理アクセスを取得します。詳細については、「[DNS](understanding-dns-in-amazon-lightsail.md)」を参照してください。
**注記**  
ドメインの DNS レコードは、Lightsail の DNS ゾーンを使用して管理することをお勧めします。詳細については、「[DNS ゾーンを作成してドメインの DNS レコードを管理する](lightsail-how-to-create-dns-entry.md)」を参照してください。
+ Lightsail コンソールでブラウザベースの SSH ターミナルを使用して、このチュートリアルのステップを実行します。ただし、独自の SSH クライアント (PuTTY など) を使用することもできます。PuTTY の設定の詳細については、「[Amazon Lightsail で PuTTY をダウンロードし、SSH を使用して接続するようにセットアップする](lightsail-how-to-set-up-putty-to-connect-using-ssh.md)」を参照してください。

前提条件が完了したら、このチュートリアルの「[次のセクション](#install-certbot-on-your-instance-nginx)」に進みます。

## ステップ 2: Lightsail インスタンスに Certbot をインストールする
<a name="install-certbot-on-your-instance-nginx"></a>

Certbot は、Let's Encrypt の証明書をリクエストしてウェブサーバーにデプロイするために使用するクライアントです。Let's Encrypt は ACME プロトコルを使用して証明書を発行します。Certbot は、Let's Encrypt とやり取りする ACME 対応のクライアントです。

**Lightsail インスタンスに Certbot をインストールするには**

1. [Lightsail コンソール](https://lightsail.aws.amazon.com/) にサインインします。

1. 左側のナビゲーションペインで、接続先のインスタンスの SSH クイック接続アイコンを選択します。  
![\[Lightsail ホーム画面の SSH クイック接続。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/resource_cards/nginx-ssh-quick-connect.png)

1. Lightsail のブラウザベースの SSH セッションに接続したら、次のコマンドを入力してインスタンスのパッケージを更新します。

   ```
   sudo apt-get update
   ```  
![\[インスタンスのパッケージの更新。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-update-packages.png)

1. 次のコマンドを入力してソフトウェアプロパティパッケージをインストールします。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 ジョブが原因で発生している可能性があります。

1. 次のコマンドを入力して Certbot をローカル apt リポジトリに追加します。
**注記**  
ステップ 5 は、Ubuntu Linux ディストリビューションを使用するインスタンスにのみ適用されます。インスタンスが Debian Linux ディストリビューションを使用している場合は、このステップをスキップしてください。

   ```
   sudo apt-add-repository ppa:certbot/certbot -y
   ```

1. 次のコマンドを入力して apt を更新し、新しいリポジトリを含めます。

   ```
   sudo apt-get update -y
   ```

1. 次のコマンドを入力して Cerbot をインストールします。

   ```
   sudo apt-get install certbot -y
   ```

   これで Lightsail インスタンスに Cerbot がインストールされました。

1. ブラウザベースの SSH ターミナルウィンドウは開いたままにします。このチュートリアルで後ほど戻ります。このチュートリアルの「[次のセクション](#request-a-lets-encrypt-certificate-nginx)」に進みます。

## ステップ 3: Let's Encrypt の SSL ワイルドカード証明書をリクエストする
<a name="request-a-lets-encrypt-certificate-nginx"></a>

Let's Encrypt の証明書をリクエストするプロセスを開始します。Certbot を使用してワイルドカード証明書をリクエストします。この 1 つの証明書をドメインとそのサブドメインの両方に使用できます。たとえば、1 つのワイルドカード証明書を `example.com` 最上位ドメイン、`blog.example.com` サブドメイン、および `stuff.example.com` サブドメインに使用できます。

**Let's Encrypt の SSL ワイルドカード証明書をリクエストするには**

1. このチュートリアルの[ステップ 2](#install-certbot-on-your-instance-nginx) で使用した同じブラウザベースの SSH ターミナルウィンドウで、以下のコマンドを入力してドメインの環境変数を設定します。より効率的にコマンドをコピーして貼り付け、証明書を取得できます。`domain` を登録済みのドメイン名に置き換えます。

   ```
   DOMAIN=domain
   ```

   ```
   WILDCARD=*.$DOMAIN
   ```

   例:

   ```
   DOMAIN=example.com
   ```

   ```
   WILDCARD=*.$DOMAIN
   ```

1. 次のコマンドを入力し、変数が正しい値を返すことを確認します。

   ```
   echo $DOMAIN && echo $WILDCARD
   ```

   次のような結果が表示されます。  
![\[ドメインの環境変数を確認します。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-confirm-variables.png)

1. 次のコマンドを入力して Certbot をインタラクティブモードで起動します。このコマンドでは、DNS チャレンジで手動認可を使用してドメインの所有権を検証することを Certbot に指示します。また、最上位ドメインとそのサブドメイン用にワイルドカード証明書をリクエストします。

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

1. プロンプトに応じて E メールアドレスを入力します。これで更新とセキュリティに関する通知を受信します。

1. Let's Encrypt のサービス利用規約を読みます。読み終わり、同意する場合は A キーを押します。同意しない場合は、Let's Encrypt の証明書を取得できません。

1. E メールアドレスの共有と IP アドレスのログ記録に関するプロンプトに適宜応答します。

1. Let's Encrypt から、指定されたドメインの所有者であることの検証を求められます。これを行うには、ドメインの DNS レコードに TXT レコードを追加します。以下の例に示すように 2 組の TXT レコード値が提供されます。
**注記**  
Let's Encrypt では検証に必要な TXT レコードを 1 つまたは複数提供する場合があります。この例では、検証に使用する 2 つの TXT レコードが提供されました。  
![\[Let's Encrypt の証明書の TXT レコード\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/ssh/lets-encrypt-text-records.png)

1. Lightsail のブラウザベースの SSH セッションは開いたままにします。このチュートリアルで後ほど戻ります。このチュートリアルの「[次のセクション](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx)」に進みます。

## ステップ 4: ドメインの DNS ゾーンに TXT レコードを追加する
<a name="add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx"></a>

ドメインの DNS ゾーンに TXT レコードを追加すると、自分がドメインを所有していることが検証されます。ここでは、デモの目的で Lightsail の DNS ゾーンを使用します。ただし、ドメインレジストラがホストする他の一般的な DNS ゾーンでも手順はほぼ同じです。

**注記**  
ドメインの Lightsail DNS ゾーンの作成方法の詳細については、「[Lightsail で DNS ゾーンを作成し、ドメインの DNS レコードを管理する](lightsail-how-to-create-dns-entry.md)」を参照してください。

**Lightsail でドメインの DNS ゾーンに TXT レコードを追加するには**

1. 左側のナビゲーションペインで **[ドメインと DNS]** を選択します。

1. ページの [**DNS ゾーン**] セクションで、Certbot 証明書リクエストで指定したドメインの DNS ゾーンを選択します。

1. DNS ゾーンエディタで **[DNS records]** (DNS レコード) を選択します。

1. [**レコードの追加**] を選択します。

1. **[Record type]** (レコードタイプ) のドロップダウンメニューで **[TXT record]** (TXT レコード) を選択します。

1. Let's Encrypt 証明書のリクエストで指定された値を **[Record name]** (レコード名) と **[Responds with]** (応答) フィールドに入力します。
**注記**  
Lightsail コンソールには、ドメインの頂点部分があらかじめ入力されています。たとえば、`_acme-challenge.example.com` サブドメインを追加する場合は、`_acme-challenge` をテキストボックスに入力するだけで、レコードを保存するときに Lightsail が `.example.com` の部分を追加します。

1. **[保存]** を選択します。

1. ステップ 4～7 を繰り返して、Let's Encrypt の証明書リクエストで指定された 2 番目の TXT レコードのセットを追加します。

1. Lightsail コンソールのブラウザウィンドウは、このチュートリアルで後ほど戻るので開いたままにします。このチュートリアルの「[次のセクション](#confirm-the-text-records-have-propagated-lets-encrypt-nginx)」に進みます。

## ステップ 5: TXT レコードが反映されたことを確認する
<a name="confirm-the-text-records-have-propagated-lets-encrypt-nginx"></a>

MxToolbox ユーティリティを使用して TXT レコードがインターネットの DNS に反映されたことを確認します。DNS レコードの反映には、DNS ホスティングプロバイダーと DNS レコードの有効期限 (TTL) の設定によって時間がかかる場合があります。このステップを完了し、TXT レコードが反映されたことを確認した上で、Certbot 証明書のリクエストに進むことが重要です。そうしないと、証明書のリクエストは失敗します。

**TXT レコードがインターネットの DNS に反映されたことを確認するには**

1. 新しいブラウザウィンドウを開き、[https://mxtoolbox.com/TXTLookup.aspx](https://mxtoolbox.com/TXTLookup.aspx) に移動します。

1. 次の内容をテキストボックスに入力します。`domain` は実際のドメインに置き換えてください。

   ```
   _acme-challenge.domain
   ```

   例:

   ```
   _acme-challenge.example.com
   ```  
![\[MXTookbox の TXT レコードのルックアップ。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-text-record-lookup.png)

1. [**TXT Lookup (TXT ルックアップ)**] を選択して確認を行います。

1. 以下のいずれかのレスポンスが返されます。
   + TXT レコードがインターネットの DNS に反映された場合は、次のスクリーンショットに示すようなレスポンスが表示されます。ブラウザウィンドウを閉じて、このチュートリアルの「[次のセクション](#complete-the-lets-encrypt-certificate-request-nginx)」に進みます。  
![\[TXT レコードが反映されたことの確認。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-propagated-text-record-lookup.png)
   + TXT レコードがインターネットの DNS に反映されていない場合は、[**DNS Record not found (DNS レコードが見つかりません)**] というレスポンスが返されます。適切な DNS レコードをドメインの DNS ゾーンに追加したことを確認してください。適切なレコードを追加した場合は、ドメインの DNS レコードが反映されるまでしばらく待ってから、TXT のルックアップを再実行します。

## ステップ 6: Let's Encrypt の SSL 証明書リクエストを完了する
<a name="complete-the-lets-encrypt-certificate-request-nginx"></a>

Nginx インスタンスの Lightsail ブラウザベースの SSH セッションに戻り、Let's Encrypt 証明書のリクエストを完了します。Certbot は、SSL 証明書、チェーン、およびキーファイルを Nginx インスタンスの特定のディレクトリに保存します。

**Let's Encrypt の SSL 証明書リクエストを完了するには**

1. Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、**Enter** キーを押し、Let's Encrypt SSL 証明書のリクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。  
![\[Let's Encrypt 証明書リクエストの成功。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-certificate-request-success.png)

   証明書、チェーン、およびキーファイルが `/etc/letsencrypt/live/domain/` ディレクトリに保存されたことを確認するメッセージが表示されます。`domain` は、実際のドメイン (`/etc/letsencrypt/live/example.com/` など) に置き換えてください。

1. メッセージに記載されている有効期限を書き留めておきます。この期限日までに証明書を更新する必要があります。  
![\[Let's Encrypt 証明書の更新日\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-renewal-date.png)

1. これで Let's Encrypt SSL 証明書が手に入ったので、このチュートリアルの「[次のセクション](#link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx)」に進みます。

## ステップ 7: NGINX サーバーディレクトリに Let's Encrypt 証明書ファイルへのリンクを作成する
<a name="link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx"></a>

Nginx インスタンスの NGINX サーバーディレクトリに Let's Encrypt SSL 証明書ファイルへのリンクを作成します。また、必要になる場合に備えて既存の証明書をバックアップします。

**NGINX サーバーディレクトリに Let's Encrypt 証明書ファイルへのリンクを作成するには**

1. Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力して基本サービスを停止します。

   ```
   sudo /opt/bitnami/ctlscript.sh stop
   ```

   次のようなレスポンスが表示されます。  
![\[インスタンスサービスは停止しました\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-stop-services.png)

1. 次のコマンドを入力してドメインの環境変数を設定します。コマンドのコピー＆ペーストで、より効率的に証明書ファイルにリンクを張れます。`domain` は登録済みのドメイン名に置き換えてください。

   ```
   DOMAIN=domain
   ```

   例:

   ```
   DOMAIN=example.com
   ```

1. 次のコマンドを入力し、変数が正しい値を返すことを確認します。

   ```
   echo $DOMAIN
   ```

   次のような結果が表示されます。  
![\[ドメインの環境変数を確認します。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-confirm-domain-variable.png)

1. バックアップとして既存の証明書ファイルがある場合、以下のコマンドを個別に入力して名前を書き換えます。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。
   + 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
     ```

1. 次のコマンドを個別に入力して、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
     ```

1. 次のコマンドを入力して、先ほど停止した基本サービスを開始します。

   ```
   sudo /opt/bitnami/ctlscript.sh start
   ```

   次のような結果が表示されます。  
![\[インスタンスサービスは開始されました\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-start-services.png)

   これで SSL 暗号化を使用するように Nginx インスタンスが設定されました。ただし、トラフィックは HTTP から HTTPS に自動的にはリダイレクトされません。

1. このチュートリアルの「[次のセクション](#configure-http-to-https-redirection-nginx)」に進みます。

## ステップ 8: ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する
<a name="configure-http-to-https-redirection-nginx"></a>

Nginx インスタンスの HTTP から HTTPS へのリダイレクトを設定することができます。HTTP から HTTPS へのリダイレクトを自動的に行うことで、SSL を使用するユーザーにのみ (HTTP を使用して接続した場合でも) サイトへのアクセスを許可できます。さまざまなディストリビューションとファイル構造の詳細については、このチュートリアルの冒頭の重要ブロックを参照してください。

このチュートリアルではデモの目的で Vim を使用していますが、任意のテキストエディタを使用できます。

**Debian Linux ディストリビューション – ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する**

**アプローチ A (システムパッケージを使用した Bitnami インストール):**

1. Nginx インスタンスの Lightsail ブラウザベースの SSH セッションで、次のコマンドを入力し、サーバーブロック設定ファイルを変更します。アプリケーションの名前を `<ApplicationName>` に置き換えます。

   ```
   sudo vim /opt/bitnami/nginx/conf/server_blocks/<ApplicationName>-server-block.conf
   ```

1. `i` キーを押して Vim エディタを挿入モードにします。

1. 次の例の情報を使用してファイルを編集します。  
![\[アプリケーションサーバーブロック設定ファイル。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/using-le-certs-1.png)

1. **ESC** キーを押して「`:wq`」と入力し、編集内容を書き込んで (保存して) Vim を終了します。

1. 次のコマンドを入力して、NGINX 設定ファイルのサーバーセクションを変更します。

   ```
   sudo vim /opt/bitnami/nginx/conf/nginx.conf
   ```

1. `i` キーを押して Vim エディタを挿入モードにします。

1. 次の例の情報を使用してファイルを編集します。  
![\[NGINX 設定ファイル。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/using-le-certs-2.png)

1. **ESC** キーを押して「`:wq`」と入力し、編集内容を書き込んで (保存して) Vim を終了します。

1. 次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

**アプローチ B (自己完結型 Bitnami インストール):**

1. Nginx インスタンスのLightsailブラウザベースの SSH セッションで、次のコマンドを入力して NGINX 設定ファイルのサーバーセクションを変更します。

   ```
   sudo vim /opt/bitnami/nginx/conf/nginx.conf
   ```

1. `i` キーを押して Vim エディタを挿入モードにします。

1. 次の例の情報を使用してファイルを編集します。  
![\[NGINX 設定ファイル。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/using-le-certs-2.png)

1. **ESC** キーを押して「`:wq`」と入力し、編集内容を書き込んで (保存して) Vim を終了します。

1. 次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

**Ubuntu Linux ディストリビューションを使用する古いインスタンスの場合 – ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定する**

1. Nginx インスタンスのLightsailブラウザベースの SSH セッションで、次のコマンドを入力して、Vim テキストエディタを使用して NGINX ウェブサーバー設定ファイルを編集します。

   ```
   sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
   ```

1. `i` キーを押して Vim エディタを挿入モードにします。

1. このファイルで、`server_name localhost;` と `include "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-prefix.conf";` の間に次のテキストを入力します。

   ```
   return 301 https://$host$request_uri;
   ```

   結果は次のようになります。  
![\[HTTP から HTTPS へのリダイレクト用に編集された NGINX 設定ファイル。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-config-file.png)

1. **ESC** キーを押して「`:wq`」と入力し、編集内容を書き込んで (保存して) Vim を終了します。

1. 次のコマンドを入力して基本サービスを再開し、編集内容を反映させます。

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

   これで、HTTP から HTTPS へ自動的に接続をリダイレクトするように Nginx インスタンスが設定されました。訪問者が `http://www.example.com` にアクセスすると、暗号化された `https://www.example.com` アドレスに自動的にリダイレクトされます。

## ステップ 9: Let's Encrypt 証明書を 90 日ごとに更新する
<a name="renew-a-lets-encrypt-certificate-nginx"></a>

Let's Encrypt 証明書の有効期間は 90 日間です。証明書は有効期限が切れる 30 日前から更新できます。Let's Encrypt 証明書を更新するには、取得するために使用した元のコマンドを実行します。このチュートリアルの「[Let's Encrypt の SSL ワイルドカード証明書をリクエストする](#request-a-lets-encrypt-certificate-nginx)」セクションのステップを繰り返します。

------
#### [ Lightsail ]

**目次**
+  [ ステップ 1: 前提条件を完了する ](#complete-the-prerequisites) 
+  [ ステップ 2: Lightsailインスタンスに Certbot をインストールする ](#install-certbot-on-your-instance) 
+  [ ステップ 3: Let's Encrypt SSL ワイルドカード証明書をリクエストする ](#request-a-lets-encrypt-certificate) 
+  [ ステップ 4: TXT レコードをドメインの DNS ゾーンに追加する ](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt) 
+  [ ステップ 5: TXT レコードが伝播されたことを確認する ](#confirm-the-text-records-have-propagated-lets-encrypt) 
+  [ ステップ 6: Let's Encrypt SSL 証明書リクエストを完了する ](#complete-the-lets-encrypt-certificate-request) 
+  [ ステップ 7: NGINX で SSL 設定を更新し、トラフィックを HTTP から HTTPS にリダイレクトする ](#update-ssl-configuration) 
+  [ ステップ 8: Let's Encrypt 証明書を 90 日ごとに更新する ](#renew-a-lets-encrypt-certificate) 

## ステップ 1: 前提条件を満たす
<a name="complete-the-prerequisites"></a>

以下の前提条件を満たします (まだ満たしていない場合)。
+  Lightsail に Nginx インスタンスを作成します。詳細については、[「インスタンスの作成](how-to-create-amazon-lightsail-instance-virtual-private-server-vps.md)」を参照してください。
+  ドメイン名を登録し、その DNS レコードを編集するための管理アクセスを取得します。詳細については、「[DNS](understanding-dns-in-amazon-lightsail.md)」を参照してください。
**注記**  
 ドメインの DNS レコードは、Lightsail の DNS ゾーンを使用して管理することをお勧めします。詳細については、[「ドメインの DNS レコードを管理する DNS ゾーンを作成する](lightsail-how-to-create-dns-entry.md)」を参照してください。
+  Lightsail コンソールでブラウザベースの SSH ターミナルを使用して、このチュートリアルの手順を実行します。  
![\[Lightsail ホーム画面の SSH クイック接続。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/resource_cards/nginx-ssh-quick-connect.png)
**注記**  
 PuTTY などの独自の SSH クライアントを使用することもできます。PuTTY の設定の詳細については、「」の「[Download and set up PuTTY to connect using SSH」を参照してくださいAmazon Lightsail](lightsail-how-to-set-up-putty-to-connect-using-ssh.md)。

## ステップ 2: Lightsail インスタンスに Certbot をインストールする
<a name="install-certbot-on-your-instance"></a>

 Certbot は、Let's Encrypt の証明書をリクエストしてウェブサーバーにデプロイするために使用するクライアントです。Let's Encrypt は ACME プロトコルを使用して証明書を発行します。Certbot は Let's Encrypt とやり取りする ACME 対応クライアントです。

**Lightsail インスタンスに Certbot をインストールするには**

1.  Lightsail ブラウザベースの SSH ターミナルなど、SSH クライアントを使用してインスタンスに接続します。インスタンスのパッケージを更新するには、次のコマンドを入力します。

   ```
   sudo apt-get update
   ```

1.  次のコマンドを入力してソフトウェアプロパティパッケージをインストールします。Certbot の開発者は、Personal Package Archive (PPA) を使用して Cerbot を配信します。ソフトウェアプロパティパッケージを使用すると、PPA をより効率的に操作できます。

   ```
   sudo apt-get install software-properties-common -y
   ```

1. 次のコマンドを入力して apt を更新し、新しいリポジトリを含めます。

   ```
   sudo apt-get update -y
   ```

1. 次のコマンドを入力して Cerbot をインストールします。

   ```
   sudo apt-get install certbot -y
   ```

   これで Lightsail インスタンスに Cerbot がインストールされました。

## ステップ 3: Let's Encrypt の SSL ワイルドカード証明書をリクエストする
<a name="request-a-lets-encrypt-certificate"></a>

 Let's Encrypt の証明書をリクエストするプロセスを開始します。Certbot を使用してワイルドカード証明書をリクエストします。この 1 つの証明書をドメインとそのサブドメインの両方に使用できます。たとえば、1 つのワイルドカード証明書を `example.com` 最上位ドメイン、`blog.example.com` サブドメイン、および `stuff.example.com` サブドメインに使用できます。

**Let's Encrypt の SSL ワイルドカード証明書をリクエストするには**

1.  このチュートリアルの[ステップ 2](#install-certbot-on-your-instance) で使用した同じブラウザベースの SSH ターミナルウィンドウで、以下のコマンドを入力してドメインの環境変数を設定します。より効率的にコマンドをコピーして貼り付け、証明書を取得できます。`domain` を登録済みのドメイン名に置き換えます。

   ```
   DOMAIN=domain
   WILDCARD=*.$DOMAIN
   ```

   例:

   ```
   DOMAIN=example.com
   WILDCARD=*.$DOMAIN
   ```

1. 次のコマンドを入力し、変数が正しい値を返すことを確認します。

   ```
   echo $DOMAIN && echo $WILDCARD
   ```

   次のような結果が表示されます。  
![\[ドメインの環境変数を確認します。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/confirm-variables.png)

1.  次のコマンドを入力して Certbot をインタラクティブモードで起動します。このコマンドでは、DNS チャレンジで手動認可を使用してドメインの所有権を検証することを Certbot に指示します。また、最上位ドメインとそのサブドメイン用にワイルドカード証明書をリクエストします。

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

1. プロンプトに応じて E メールアドレスを入力します。これで更新とセキュリティに関する通知を受信します。

1.  Let's Encrypt のサービス利用規約を読みます。完了したら、同意したら Y を押します。同意しない場合は、Let's Encrypt の証明書を取得できません。

1.  E メールアドレスの共有と IP アドレスのログ記録に関するプロンプトに適宜応答します。

1.  Let's Encrypt から、指定されたドメインの所有者であることの検証を求められます。これを行うには、ドメインの DNS レコードに TXT レコードを追加します。以下の例に示すように 2 組の TXT レコード値が提供されます。
**注記**  
 Let's Encrypt は、検証に使用する必要がある 1 つまたは複数の TXT レコードを提供する場合があります。この例では、検証に使用する 2 つの TXT レコードが提供されました。  
![\[Let's Encrypt 証明書の TXT レコード。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/get-TXT-records.png)

1.  Lightsail のブラウザベースの SSH セッションは開いたままにします。このチュートリアルで後ほど戻ります。このチュートリアルの[次のセクション](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt)に進みます。

## ステップ 4: ドメインの DNS ゾーンに TXT レコードを追加する
<a name="add-a-text-record-to-your-domains-dns-zone-lets-encrypt"></a>

 ドメインの DNS ゾーンに TXT レコードを追加すると、自分がドメインを所有していることが検証されます。ここでは、デモの目的で Lightsail の DNS ゾーンを使用します。ただし、ドメインレジストラがホストする他の一般的な DNS ゾーンでも手順はほぼ同じです。

**注記**  
 ドメインの LightsailDNS ゾーンを作成する方法の詳細については、[「 でドメインの DNS レコードを管理する DNS ゾーンの作成」を参照してくださいLightsail](lightsail-how-to-create-dns-entry.md)。

**Lightsail でドメインの DNS ゾーンに TXT レコードを追加するには**

1. 左側のナビゲーションペインで **[ドメインと DNS]** を選択します。

1.  ページの [**DNS ゾーン**] セクションで、Certbot 証明書リクエストで指定したドメインの DNS ゾーンを選択します。

1. DNS ゾーンエディタで **[DNS records]** (DNS レコード) を選択します。

1. [**レコードの追加**] を選択します。

1.  **[Record type]** (レコードタイプ) のドロップダウンメニューで **[TXT record]** (TXT レコード) を選択します。

1.  Let's Encrypt 証明書のリクエストで指定された値を **[Record name]** (レコード名) と **[Responds with]** (応答) フィールドに入力します。
**注記**  
 Lightsail コンソールには、ドメインの頂点部分があらかじめ入力されています。たとえば、`_acme-challenge.example.com` サブドメインを追加する場合は、`_acme-challenge` をテキストボックスに入力するだけで、レコードを保存するときに Lightsail が `.example.com` の部分を追加します。

1. **[保存]** を選択します。

1.  ステップ 4～7 を繰り返して、Let's Encrypt の証明書リクエストで指定された 2 番目の TXT レコードのセットを追加します。

1.  Lightsail コンソールのブラウザウィンドウは、このチュートリアルで後ほど戻るので開いたままにします。このチュートリアルの[次のセクション](#confirm-the-text-records-have-propagated-lets-encrypt)に進みます。

## ステップ 5: TXT レコードが反映されたことを確認する
<a name="confirm-the-text-records-have-propagated-lets-encrypt"></a>

 MxToolbox ユーティリティを使用して TXT レコードがインターネットの DNS に反映されたことを確認します。DNS レコードの反映には、DNS ホスティングプロバイダーと DNS レコードの有効期限 (TTL) の設定によって時間がかかる場合があります。このステップを完了し、TXT レコードが反映されたことを確認した上で、Certbot 証明書のリクエストに進むことが重要です。そうしないと、証明書のリクエストは失敗します。

**TXT レコードがインターネットの DNS に反映されたことを確認するには**

1.  新しいブラウザウィンドウを開き、[https://mxtoolbox.com/TXTLookup.aspx](https://mxtoolbox.com/TXTLookup.aspx) に移動します。

1.  次の内容をテキストボックスに入力します。`domain` は実際のドメインに置き換えてください。

   ```
   _acme-challenge.domain
   ```

   例:

   ```
   _acme-challenge.example.com
   ```  
![\[MXTookbox の TXT レコードのルックアップ。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-text-record-lookup.png)

1. [**TXT Lookup (TXT ルックアップ)**] を選択して確認を行います。

1. 以下のいずれかのレスポンスが返されます。
   +  TXT レコードがインターネットの DNS に反映された場合は、次のスクリーンショットに示すようなレスポンスが表示されます。ブラウザウィンドウを閉じて、このチュートリアルの「[次のセクション](#complete-the-lets-encrypt-certificate-request-nginx)」に進みます。  
![\[TXT レコードが反映されたことの確認。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-propagated-text-record-lookup.png)
   +  TXT レコードがインターネットの DNS に反映されていない場合は、[**DNS Record not found (DNS レコードが見つかりません)**] というレスポンスが返されます。適切な DNS レコードをドメインの DNS ゾーンに追加したことを確認してください。適切なレコードを追加した場合は、ドメインの DNS レコードが反映されるまでしばらく待ってから、TXT のルックアップを再実行します。

## ステップ 6: Let's Encrypt の SSL 証明書リクエストを完了する
<a name="complete-the-lets-encrypt-certificate-request"></a>

 インスタンスのLightsailブラウザベースの SSH セッションに戻り、Let's Encrypt 証明書リクエストを完了します。Certbot は、SSL 証明書、チェーン、およびキーファイルをインスタンス上の特定のディレクトリに保存します。

**Let's Encrypt の SSL 証明書リクエストを完了するには**

1.  インスタンスのLightsailブラウザベースの SSH セッションで、**Enter** キーを押して Let's Encrypt SSL 証明書リクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。  
![\[Let's Encrypt 証明書リクエストが成功しました。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-request-success.png)

    証明書、チェーン、およびキーファイルが `/etc/letsencrypt/live/domain/` ディレクトリに保存されたことを確認するメッセージが表示されます。`domain` は、実際のドメイン (`/etc/letsencrypt/live/example.com/` など) に置き換えてください。

1.  メッセージに記載されている有効期限を書き留めておきます。この期限日までに証明書を更新する必要があります。  
![\[Let's Encrypt 証明書の更新日。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-renewal-date.png)

## ステップ 7: NGINX で SSL 設定を更新し、トラフィックを HTTP から HTTPS にリダイレクトする
<a name="update-ssl-configuration"></a>

**NGINX の default.conf で SSL 設定を更新するには**

1.  Nginx インスタンスの SSH セッションで、次のコマンドを入力して基盤となるサービスを停止します。

   ```
   sudo systemctl stop nginx
   sudo systemctl stop mariadb
   sudo systemctl stop php8.2-fpm
   ```

   次のようなレスポンスが表示されます。  
![\[Nginx インスタンスサービスが停止しました。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/nginx-stop-services.png)

1.  次のコマンドを入力してドメインの環境変数を設定します。コマンドのコピー＆ペーストで、より効率的に証明書ファイルにリンクを張れます。`domain` は登録済みのドメイン名に置き換えてください。

   ```
   DOMAIN=domain
   ```

   例:

   ```
   DOMAIN=example.com
   ```

1. 次のコマンドを入力し、変数が正しい値を返すことを確認します。

   ```
   echo $DOMAIN
   ```

   次のような結果が表示されます。  
![\[ドメインの環境変数を確認します。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/confirm-domain-variable.png)

1. 以下のコマンドを実行して SSL 設定を変更します。

   ```
   sudo sed \
   -i -e "s|ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem|ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" \
   -i -e "s|ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key|ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem|g" \
   /etc/nginx/conf.d/default.conf
   ```

1.  `default.conf` ファイルを上書きしたら、以下のコマンドを実行して設定を確認し、NGINX を再起動します。

   ```
   sudo nginx -t
   sudo systemctl restart nginx
   sudo systemctl restart mariadb
   sudo systemctl restart php8.2-fpm
   ```

   次のような結果が表示されます。  
![\[Nginx インスタンスサービスが開始されました。\]](http://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/images/instances/lets-encrypt/nginx-start-services.png)

    Nginx インスタンスが SSL 暗号化を使用するように設定され、トラフィックが HTTP から HTTPS にリダイレクトされるようになりました。

## ステップ 8: Let's Encrypt 証明書を 90 日ごとに更新する
<a name="renew-a-lets-encrypt-certificate"></a>

 Let's Encrypt 証明書の有効期間は 90 日間です。証明書は有効期限が切れる 30 日前から更新できます。Let's Encrypt 証明書を更新するには、[ステップ 3: Let's Encrypt SSL ワイルドカード証明書をリクエスト](#request-a-lets-encrypt-certificate-nginx)する を繰り返します。

------