開発者ドキュメント

Ubuntu20.04でLet’sEncryptを使用してNginxを保護する方法

序章

Let’s Encryptは認証局(CA)であり、無料の TLS / SSL証明書を簡単に取得してインストールできるため、Webサーバーで暗号化されたHTTPSを有効にできます。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。

このチュートリアルでは、Certbotを使用してUbuntu 20.04でNginxの無料のSSL証明書を取得し、証明書を自動的に更新するように設定します。

このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバー構成ファイルを使用します。 ドメインごとに新しいNginxサーバーブロックファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバック構成としてデフォルトファイルを維持するのに役立ちます。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—Certbotをインストールする

Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。

Certbotをインストールすると、aptを使用してNginxプラグインになります。

  1. sudo apt install certbot python3-certbot-nginx

これでCertbotを使用する準備が整いましたが、NginxのSSLを自動的に構成するには、Nginxの構成の一部を確認する必要があります。

ステップ2—Nginxの構成を確認する

CertbotがSSLを自動的に構成できるようにするには、Nginx構成で正しいserverブロックを見つけることができる必要があります。 具体的には、証明書を要求するドメインに一致するserver_nameディレクティブを探すことによってこれを行います。

Nginxインストールチュートリアルサーバーブロックのセットアップ手順に従った場合、server_nameディレクティブが適切に設定された、/etc/nginx/sites-available/example.comのドメインのサーバーブロックが必要です。

確認するには、nanoまたはお気に入りのテキストエディタを使用して、ドメインの構成ファイルを開きます。

  1. sudo nano /etc/nginx/sites-available/example.com

既存のserver_name行を見つけます。 次のようになります。

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

含まれている場合は、エディターを終了して次の手順に進みます。

そうでない場合は、一致するように更新します。 次に、ファイルを保存し、エディターを終了して、構成編集の構文を確認します。

  1. sudo nginx -t

エラーが発生した場合は、サーバーブロックファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Nginxをリロードして新しい構成をロードします。

  1. sudo systemctl reload nginx

Certbotは、正しいserverブロックを見つけて、自動的に更新できるようになりました。

次に、HTTPSトラフィックを許可するようにファイアウォールを更新しましょう。

ステップ3—ファイアウォールを介したHTTPSの許可

前提条件ガイドで推奨されているように、ufwファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸い、Nginxはインストール時にufwにいくつかのプロファイルを登録します。

次のように入力すると、現在の設定を確認できます。

  1. sudo ufw status

おそらく次のようになります。つまり、WebサーバーへのHTTPトラフィックのみが許可されます。

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

HTTPSトラフィックを追加で取り込むには、Nginxフルプロファイルを許可し、冗長なNginxHTTPプロファイルの許容値を削除します。

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

ステータスは次のようになります。

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

次に、Certbotを実行して、証明書を取得しましょう。

ステップ4—SSL証明書を取得する

Certbotは、プラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 Nginxプラグインは、Nginxの再構成と、必要に応じて構成の再読み込みを処理します。 このプラグインを使用するには、次のように入力します。

  1. sudo certbot --nginx -d example.com -d www.example.com

これは、--nginxプラグインでcertbotを実行し、-dを使用して、証明書を有効にするドメイン名を指定します。

certbotを初めて実行する場合は、メールアドレスを入力して利用規約に同意するよう求められます。 その後、certbotはLet’sEncryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。

それが成功すると、certbotはHTTPS設定をどのように構成するかを尋ねます。

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

選択してENTERを押してください。 構成が更新され、Nginxがリロードして新しい設定を取得します。 certbotは、プロセスが成功し、証明書が保存されている場所を通知するメッセージで終了します。

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

証明書がダウンロード、インストール、およびロードされます。 https://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 通常は鍵のアイコンで、サイトが適切に保護されていることを示す必要があります。 SSL Labsサーバーテストを使用してサーバーをテストすると、Aグレードになります。

更新プロセスをテストして終了しましょう。

ステップ5—Certbotの自動更新を確認する

Let’s Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたcertbotパッケージは、1日2回実行され、有効期限が30日以内の証明書を自動的に更新するsystemdタイマーを追加することで、これを処理します。

systemctlを使用して、タイマーのステータスを照会できます。

  1. sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

更新プロセスをテストするには、certbotを使用してドライランを実行できます。

  1. sudo certbot renew --dry-run

エラーが表示されない場合は、すべて設定されています。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づくと警告を発します。

結論

このチュートリアルでは、Let’sEncryptクライアントcertbotをインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定しました。 Certbotの使用についてさらに質問がある場合は、公式ドキュメントから始めることをお勧めします。

モバイルバージョンを終了