

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

# Let's Encrypt と Certbot を使用して Nginx インスタンスで HTTPS を有効にする
<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 インスタンスと統合する方法を示します。

 **目次** 
+  [ ステップ 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 ゾーンを使用してドメインの DNS Lightsail レコードを管理することをお勧めします。詳細については、[「ドメインの DNS レコードを管理する DNS ゾーンを作成する](lightsail-how-to-create-dns-entry.md)」を参照してください。
+  Lightsail コンソールでブラウザベースの SSH ターミナルを使用して、このチュートリアルのステップを実行します。ただし、独自の SSH クライアント (PuTTY など) を使用することもできます。PuTTY の設定の詳細については、「」の[「SSH を使用して接続するように PuTTY をダウンロードしてセットアップする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 コンソール](https://lightsail.aws.amazon.com/) にサインインします。

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

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

   ```
   sudo apt-get update
   ```

1. 次のコマンドを入力してソフトウェアプロパティパッケージをインストールします。Certbot の開発者は、パーソナルパッケージアーカイブ (PPA) を使用して Certbot を配布します。ソフトウェアプロパティパッケージを使用すると、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. このチュートリアルの前のステップで使用したのと同じブラウザベースの SSH ターミナルウィンドウで、次のコマンドを入力してドメインの環境変数を設定します。{{ドメイン}}は、必ず登録済みドメイン名の名前に置き換えてください。

   ```
   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 の利用規約をお読みください。読み終わり、同意する場合は 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/lets-encrypt/get-TXT-records.png)

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

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

**注記**  
 ドメインの LightsailDNS ゾーンを作成する方法の詳細については、「[Creating a DNS zone to manage your domain's DNS records in 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)」に進みます。  
![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 設定を変更します。
**注記**  
ステップ 3 で`DOMAIN`変数を設定してからブラウザベースの SSH ターミナルウィンドウを閉じた場合は、{{example.com}} をドメインに置き換えて、 `DOMAIN={{example.com}}` を再度実行します。

   ```
   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)する を繰り返します。