チュートリアル Nginx インスタンスで SSL 証明書を暗号化する Amazon Lightsail

最終更新日 2020年8月3日

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

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

目次

ステップ 1. 前提条件を完了します。

以下の前提条件を満たします (まだ満たしていない場合)。

前提条件を完了したら、 次のセクション 説明があります

ステップ 2. Certbot を Lightsail インスタンス

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

    Certbot を Lightsail インスタンス

  1. サインイン: Lightsail コンソール.

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

    のSSHクイック接続 Lightsail ホームページ。
  3. 後 Lightsail ブラウザベースの SSH セッションが接続されています。次のコマンドを入力して、インスタンス上のパッケージを更新します。

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

    sudo apt-get install software-properties-common

    注意

    次のような状況に遭遇した場合 Could not get lock 実行時のエラー sudo apt-get install 約15分待ってから、もう一度お試しください。このエラーは、自動アップグレードをインストールするために Apt パッケージ管理ツールを使用している cron ジョブが原因で発生している可能性があります。

  5. 次のコマンドを入力して Certbot をローカル apt リポジトリに追加します。

    注意

    このステップは、Ubuntu Linuxディストリビューションを使用するNginxインスタンスにのみ適用されます。インスタンスが Debian Linux ディストリビューションを使用している場合は、このステップをスキップします。

    sudo apt-add-repository ppa:certbot/certbot -y
  6. 次のコマンドを入力して apt を更新し、新しいリポジトリを含めます。

    sudo apt-get update -y
  7. 次のコマンドを入力して Cerbot をインストールします。

    sudo apt-get install certbot -y

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

  8. ブラウザベースの SSH ターミナルウィンドウは開いたままにします。このチュートリアルで後ほど戻ります。へ進みます。 次のセクション 説明があります

ステップ 3. Let Encrypt SSLワイルドカード証明書のリクエスト

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

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

  1. 同じブラウザベースのSSH端末ウィンドウで、 ステップ2 次のコマンドを入力して、ドメインの環境変数を設定します。コマンドをコピーして貼り付け、より効率的に証明書を取得できます。必ず交換してください domain 登録済みのドメイン名。

    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 は、検証に使用する必要がある 1 つまたは複数の TXT レコードを提供する場合があります。この例では、検証に使用する 2 つの TXT レコードが提供されました。

    Let's Encrypt の証明書の TXT レコード。
  8. 常に Lightsail ブラウザベースの SSH セッションが開かれています。このチュートリアルの後半に戻ります。へ進みます。 次のセクション 説明があります

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

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

注意

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

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

  1. の Lightsail ホームページで、 ネットワーキング タブ。

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

  3. DNSゾーン エディタで、 レコードの追加.

    のDNSゾーン エディタ Lightsail コンソール。
  4. レコードタイプのドロップダウンメニューで、 TXTレコード.

  5. [Let Encrypt certificate request]で指定された値を サブドメイン および で応答 フィールドが次のスクリーンショットのように表示されます。

    のTXTレコード Lightsail DNSゾーン エディタ。
  6. 保存アイコンを選択します。

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

  8. 常に Lightsail コンソールのブラウザウィンドウが開く—このチュートリアルの後半で戻る。へ進みます。 次のセクション 説明があります

ステップ 5. TXTレコードがプロパゲートされたことを確認します

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

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

  1. 新しいブラウザウィンドウを開き、 https://mxtoolbox.com/TXTLookup.aspx.

  2. 次の内容をテキストボックスに入力します。必ず交換してください domain あなたのドメインで。

    _acme-challenge.domain

    例: 。

    _acme-challenge.example.com
    MXTookbox の TXT レコードのルックアップ。
  3. 選択 TXT検索 チェックを実行します。

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

    • TXT レコードがインターネットの DNS に伝播された場合は、次のスクリーンショットに示すようなレスポンスが表示されます。ブラウザウィンドウを閉じて、 次のセクション 説明があります

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

ステップ 6. [Let Encryption SSL certificate request] (SSL 証明書の暗号化

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

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

  1. の Lightsail NginxインスタンスのブラウザベースのSSHセッションの場合は、 Enter(入力) をクリックして、Let Encrypt SSL証明書リクエストを続行します。成功すると、次のスクリーンショットに示すようなレスポンスが表示されます。

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

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

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

    Let's Encrypt 証明書の更新日。
  3. これで、Let Encrypt SSL証明書を取得しました。次は、 次のセクション 説明があります

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

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

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

    sudo /opt/bitnami/ctlscript.sh stop

    次のようなレスポンスが表示されます。

    停止したインスタンスサービス。
  2. 次のコマンドを入力してドメインの環境変数を設定します。コマンドをコピーして貼り付け、より効率的に証明書ファイルをリンクできます。必ず交換してください domain 登録ドメインの名前。

    DOMAIN=domain

    例: 。

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

    echo $DOMAIN

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

    ドメインの環境変数を確認する。
  4. 既存の証明書ファイルがある場合、バックアップとして以下のコマンドを個別に入力して名前を変更します。

    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
  5. 以下のコマンドを個別に入力し、Nginx サーバーディレクトリで Let's Encrypt の証明書ファイルへのリンクを作成します。

    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
  6. 次のコマンドを入力して、以前に停止した基盤となるサービスを開始します。

    sudo /opt/bitnami/ctlscript.sh start

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

    開始したインスタンスサービス。

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

  7. へ進みます。 次のセクション 説明があります

ステップ 8. Web アプリケーションの HTTP から HTTPS へのリダイレクトを構成する

Nginx インスタンスの HTTP から HTTPS へのリダイレクトを設定できます。HTTP から HTTPS へのリダイレクトを自動的に行うことで、SSL を使用するユーザーにのみ (HTTP を使用して接続した場合でも) サイトへのアクセスを許可できます。

    ウェブアプリケーションの HTTP から HTTPS へのリダイレクトを設定するには

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

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

    注意

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

  2. 押す i Vimエディタで挿入モードに入ります。

  3. ファイルで、次のテキストを入力します。 server_name localhost; および include "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-prefix.conf";:

    return 301 https://$host$request_uri;

    結果は次のようになります。

    HTTP から HTTPS へのリダイレクト用に編集された Nginx 設定ファイル。
  4. _を押します。 エスシー キーを押した後、 :wq 編集内容を書き込んで(保存)、Vimを終了します。

  5. 次のコマンドを入力して基盤となるサービスを再開し、編集内容を反映します。

    sudo /opt/bitnami/ctlscript.sh restart

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

ステップ 9 90日ごとに証明書を暗号化するの更新

Let's Encrypt 証明書の有効期間は 90 日間です。証明書は有効期限が切れる 30 日前に更新できます。Let's Encrypt 証明書を更新するには、取得するために使用した元のコマンドを実行します。で手順を繰り返します。 Let Encrypt SSLワイルドカード証明書のリクエスト 参照してください。