Debian 11でLet’s Encryptを使用してNginxを安全に設定する方法
イントロダクション
Let’s Encryptは、簡単にTLS/SSL証明書を入手し、無料でウェブサーバー上での暗号化されたHTTPSを可能にするCertificate Authority(CA)です。必要な手順のほとんど(もしくは全て)を自動化するソフトウェアクライアントであるCertbotを提供することで、プロセスを簡略化しています。現在、証明書の入手とインストールのプロセスは、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してDebian 11上のNginxに無料のSSL証明書を取得し、証明書を自動的に更新する方法について説明します。
このチュートリアルでは、デフォルトのファイルではなく、独立したNginxサーバー設定ファイルを使用します。各ドメインに対して新しいNginxサーバーブロックファイルを作成することをお勧めします。これは一般的なミスを避け、デフォルトファイルをフォールバック設定として保持するためのものです。
前提条件
このチュートリアルに従うためには、次のものが必要です:
- One Debian 11 server set up by following this initial server setup for Debian 11 tutorial, including a sudo-enabled non-root user and a firewall.
- A registered domain name. This tutorial will use example.com throughout. You can purchase a domain name from Namecheap, get one for free with Freenom, or use the domain registrar of your choice.
- Both of the following DNS records set up for your server. If you are using Silicon Cloud, please see our DNS documentation for details on how to add them.An A record with example.com pointing to your server’s public IP address.
An A record with www.example.com pointing to your server’s public IP address. - Nginx installed by following How To Install Nginx on Debian 11. Be sure that you have a server block for your domain. This tutorial will use /etc/nginx/sites-available/example.com as an example.
ステップ1 — Certbotのインストール
Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。
CertbotとそのNginxプラグインをaptでインストールします。
- sudo apt install certbot python3-certbot-nginx
Certbotは現在使用する準備ができていますが、NginxのSSLを自動的に設定するために、Nginxの設定の一部を確認する必要があります。
ステップ2:Nginxの設定を確認します。
Certbotは、SSLを自動的に設定するために、Nginxの設定で正しいサーバーブロックを見つける必要があります。具体的には、証明書をリクエストするドメインに一致するserver_nameディレクティブを探します。
もしNginxのインストールチュートリアルでサーバーブロックの設定手順に従ったならば、/etc/nginx/sites-available/example.comにドメインのサーバーブロックがあり、server_nameディレクティブも適切に設定されているはずです。
確認するために、nanoやお気に入りのテキストエディタを使用してドメインの設定ファイルを開いてください。
- sudo nano /etc/nginx/sites-available/example.com
既存のserver_name行を見つけてください。これは次のようになっているはずです:
/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...
もしできたら、エディタを終了して、次のステップに進んでください。
もし一致しない場合は、それを更新してください。その後、ファイルを保存し、エディターを終了し、設定の編集構文を確認してください。
- sudo nginx -t
もしエラーが発生した場合は、サーバーブロックファイルを再度開き、入力ミスや欠落した文字などを確認してください。設定ファイルの文法が正しい場合は、新しい設定を読み込むためにNginxをリロードしてください。
- sudo systemctl reload nginx
Certbotは、正しいサーバーブロックを自動的に見つけて更新することができます。
次に、ファイアウォールの設定を更新してHTTPSトラフィックを許可しましょう。
ステップ3 — ファイアウォールでHTTPSを許可する
前提ガイドでお勧めされているように、ufwファイアウォールが有効になっている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。幸いなことに、Nginxはインストール時にufwにいくつかのプロファイルを登録します。
現在の設定を確認するには、入力することで表示できます。
- sudo ufw status
これはおそらく次のように見えるでしょう。つまり、ウェブサーバーへのアクセスはHTTPトラフィックのみ許可されます。
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フルプロファイルを許可し、冗長なNginx HTTPプロファイルの許可を削除してください。
- sudo ufw allow ‘Nginx Full’
- sudo ufw delete allow ‘Nginx HTTP’
あなたのステータスは、現在このようになるべきです。
- sudo ufw status
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の再構成と設定の再読み込みを必要に応じて自動的に行います。このプラグインを使用するには、以下のコマンドを入力してください。
- sudo certbot –nginx -d example.com -d www.example.com
次のようにネイティブに日本語で言い換えます。「これは、–nginxプラグインを使用してcertbotを実行し、-dを使用して証明書の有効なドメイン名を指定します。」
もし初めてCertbotを実行する場合、メールアドレスの入力と利用規約への同意を求められます。それを行った後、CertbotはLet’s Encryptのサーバーと通信し、要求しているドメインの所有権を確認するためのチャレンジを実行します。
設定が更新され、Nginxが新しい設定を採用するためにリロードされます。certbotは成功したことと証明書の保存場所を示すメッセージで処理を終了します。
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 2022-08-08. 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 Server Testを使用してサーバーをテストすると、Aの評価が得られます。
リニューアルプロセスをテストして終わりましょう。
ステップ5 — Certbotの自動更新を確認する
Let’s Encryptの証明書は90日間だけ有効です。これはユーザーが証明書の更新プロセスを自動化することを促すためです。私達がインストールしたcertbotパッケージは、システムデーモンのタイマーを追加して、30日以内に期限が切れる証明書を自動的に2回の実行で更新します。
systemctl コマンドを使用して、タイマーの状態をクエリできます。
- sudo systemctl status certbot.timer
● certbot.timer – Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2022-08-08 19:05:35 UTC; 11s ago Trigger: Tue 2022-08-09 07:22:51 UTC; 12h left Triggers: ● certbot.service
更新プロセスをテストするために、certbotでドライランを行うことができます。
- sudo certbot renew –dry-run
もしエラーがない場合、全ての準備が整いました。必要な場合は、Certbotが証明書を自動的に更新し、Nginxを再読み込みして変更を反映します。自動更新プロセスが失敗した場合、Let’s Encryptから指定したメールアドレスへメッセージが送信され、証明書の期限が切れる直前に警告が表示されます。
結論
このチュートリアルでは、Let’s EncryptのクライアントであるCertbotをインストールし、ドメインのためのSSL証明書をダウンロードし、Nginxの設定を調整してこれらの証明書を使用し、自動証明書の更新を設定しました。Certbotの使用方法に関するさらなる質問がある場合は、公式ドキュメンテーションが良い出発点になります。