View a markdown version of this page

Let's Encrypt と Certbot を使用して LAMP インスタンスで HTTPS を有効にする - Amazon Lightsail

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

Let's Encrypt と Certbot を使用して LAMP インスタンスで HTTPS を有効にする

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

後者の場合は、Let's Encrypt で無料の SSL 証明書を入手できます。このチュートリアルでは、Certbot を使用して Let's Encrypt ワイルドカード証明書をリクエストし、 によってパッケージ化された LAMP インスタンスで設定する方法を示しますLightsail。

目次

ステップ 1: 前提条件を満たす

まだ完了していない場合は、次の前提条件を満たします。

  • Lightsail で LAMP インスタンスを作成します。詳細については、「インスタンスを作成する」を参照してください。

  • ドメイン名を登録し、その DNS レコードを編集するための管理アクセスを取得します。詳細については、「DNS」を参照してください。

    注記

    DNS ゾーンを使用してドメインの DNS Lightsail レコードを管理することをお勧めします。詳細については、「ドメインの DNS レコードを管理する DNS ゾーンの作成」を参照してください。

  • Lightsail コンソールでブラウザベースの SSH ターミナルを使用して、このチュートリアルのステップを実行します。ただし、独自の SSH クライアント (PuTTY など) を使用することもできます。PuTTY の設定の詳細については、「PuTTY をダウンロード、SSH を使用して接続するようにセットアップする」を参照してください。

前提条件が完了したら、このチュートリアルの「次のセクション」に進みます。

ステップ 2: Lightsail インスタンスに Certbot をインストールする

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

Lightsail インスタンスに Certbot をインストールするには
  1. Lightsail コンソール にサインインします。

  2. Lightsail ホームページのインスタンスタブで、接続するインスタンスの SSH クイック接続アイコンを選択します。

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

    sudo apt-get update
  4. 次のコマンドを入力してソフトウェアプロパティパッケージをインストールします。Certbot の開発者は、パーソナルパッケージアーカイブ (PPA) を使用して Certbot を配布します。ソフトウェアプロパティパッケージを使用すると、PPA をより効率的に操作できます。

    sudo apt-get install software-properties-common -y
  5. 次のコマンドを入力して apt を更新し、新しいリポジトリを含めます。

    sudo apt-get update -y
  6. 次のコマンドを入力して 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 ワイルドカード証明書をリクエストするには
  1. このチュートリアルの前のステップで使用したのと同じブラウザベースの SSH ターミナルウィンドウで、次のコマンドを入力してドメインの環境変数を設定します。ドメインは、必ず登録済みドメイン名の名前に置き換えてください。

    DOMAIN=domain WILDCARD=*.$DOMAIN

    例:

    DOMAIN=example.com WILDCARD=*.$DOMAIN
  2. 次のコマンドを入力し、変数が正しい値を返すことを確認します。

    echo $DOMAIN && echo $WILDCARD

    次のような結果が表示されます。

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

    sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
  4. 更新とセキュリティの通知に使用されるため、プロンプトが表示されたら E メールアドレスを入力します。

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

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

  7. Let's Encrypt では、指定したドメインを所有していることを確認するように求められます。これを行うには、ドメインの DNS レコードに TXT レコードを追加します。以下の例に示すように 2 組の TXT レコード値が提供されます。

    注記

    Let's Encrypt では検証に必要な TXT レコードを 1 つまたは複数提供する場合があります。この例では、検証に使用する 2 つの TXT レコードが提供されました。

    Let's Encrypt の証明書の TXT レコード

Lightsail のブラウザベースの SSH セッションは開いたままにします。このチュートリアルで後ほど戻ります。このチュートリアルの「次のセクション」に進みます。

ステップ 4: ドメインの DNS ゾーンに TXT レコードを追加する

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

注記

ドメインの LightsailDNS ゾーンを作成する方法の詳細については、「 でドメインの DNS レコードを管理する DNS ゾーンの作成Lightsail」を参照してください。

でドメインの DNS ゾーンに TXT レコードを追加するには Lightsail
  1. 左側のナビゲーションペインで [ドメインと DNS] を選択します。

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

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

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

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

  6. Let's Encrypt 証明書リクエストで指定された値をレコード名応答フィールドに入力します

    注記

    Lightsail コンソールには、ドメインの頂点部分があらかじめ入力されています。たとえば、_acme-challenge.example.com サブドメインを追加する場合は、_acme-challenge をテキストボックスに入力するだけで、レコードを保存するときに Lightsail が .example.com の部分を追加します。

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

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

Lightsail コンソールのブラウザウィンドウは、このチュートリアルで後ほど戻るので開いたままにします。このチュートリアルの「次のセクション」に進みます。

ステップ 5: TXT レコードが反映されたことを確認する

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

TXT レコードがインターネットの DNS に伝播されたことを確認するには
  1. 新しいブラウザウィンドウを開き、https://mxtoolbox.com/TXTLookup.aspx に移動します。

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

    _acme-challenge.domain

    例:

    _acme-challenge.example.com
    MXTookbox の TXT レコードのルックアップ。
  3. [TXT Lookup (TXT ルックアップ)] を選択して確認を行います。

  4. 以下のいずれかのレスポンスが返されます。

    • TXT レコードがインターネットの DNS に伝播されている場合、次のスクリーンショットに示すようなレスポンスが表示されます。ブラウザウィンドウを閉じて、このチュートリアルの「次のセクション」に進みます。

      TXT レコードが反映されたことの確認。
    • TXT レコードがインターネットの DNS に伝播されていない場合は、DNS レコードが見つかりませんというレスポンスが表示されます。ドメインの DNS ゾーンに正しい DNS レコードを追加したことを確認します。正しいレコードを追加した場合は、ドメインの DNS レコードが伝播されるまでしばらく待ってから、TXT ルックアップを再度実行します。

ステップ 6: Let's Encrypt SSL 証明書リクエストを完了する

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

Let's Encrypt SSL 証明書リクエストを完了するには
  1. LAMP インスタンスのLightsailブラウザベースの SSH セッションで、Enter キーを押して Let's Encrypt SSL 証明書リクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。

    Let's Encrypt 証明書リクエストの成功。

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

  2. メッセージに記載されている有効期限を書き留めておきます。この期限日までに証明書を更新する必要があります。

    Let's Encrypt 証明書の更新日
  3. Let's Encrypt SSL 証明書を取得したら、このチュートリアルの次のセクションに進みます。

ステップ 7: LAMP サーバーディレクトリに Let's Encrypt 証明書ファイルへのリンクを作成する

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

LAMP サーバーディレクトリに Let's Encrypt 証明書ファイルへのリンクを作成するには
  1. LAMP インスタンスのLightsailブラウザベースの SSH セッションで、次のコマンドを入力して基盤となるサービスを停止します。

    sudo systemctl stop apache2 sudo systemctl stop mariadb
  2. 以下のコマンドを実行して SSL 設定を変更します。

    sudo sed \ -i -e "s|SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem|SSLCertificateFile /etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" \ -i -e "s|SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key|SSLCertificateKeyFile /etc/letsencrypt/live/$DOMAIN/privkey.pem|g" \ /etc/apache2/sites-enabled/default-ssl.conf
    注記

    ステップ 3 で DOMAIN変数を設定してからブラウザベースの SSH ターミナルウィンドウを閉じた場合は、example.com をドメインに置き換えて、 DOMAIN=example.com を再度実行します。

  3. apache2 を再起動するには、次のコマンドを入力します。

    sudo systemctl restart apache2 sudo systemctl restart mariadb

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

ステップ 8: Let's Encrypt 証明書を 90 日ごとに更新する

Let's Encrypt 証明書は 90 日間有効です。証明書は有効期限が切れる 30 日前から更新できます。Let's Encrypt 証明書を更新するには、取得するために使用した元のコマンドを実行します。このチュートリアルの Let's Encrypt SSL ワイルドカード証明書のリクエストセクションの手順を繰り返します。