Debian10でLet’sEncryptを使用してNginxを保護する方法
序章
Let’s Encryptは、無料の TLS / SSL証明書を取得してインストールする簡単な方法を提供する認証局(CA)であり、Webサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してDebian 10でNginxの無料SSL証明書を取得し、証明書を自動的に更新するように設定します。
このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバーブロックファイルを使用します。 ドメインごとに新しいNginxサーバーブロックファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバック構成としてデフォルトファイルを維持するのに役立ちます。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
このDebian10チュートリアルの初期サーバーセットアップと一緒にセットアップされた1台のDebian10サーバー
sudo
非rootユーザーとファイアウォール。 -
完全に登録されたドメイン名。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
-
次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
- とのAレコード
your_domain
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.your_domain
サーバーのパブリックIPアドレスを指します。
- とのAレコード
-
Debian10にNginxをインストールする方法に従ってインストールされたNginx。 ドメインにサーバーブロックがあることを確認してください。 このチュートリアルでは、
/etc/nginx/sites-available/your_domain
例として。
ステップ1—Certbotをインストールする
Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。
Debianリポジトリからpython3-certbot-nginxパッケージをインストールすると、Cerbotのnginxプラグインをインストールして使用できるようになります。 Python3と python3-certbot-nginx
パッケージにより、セットアップの寿命が延びます。Python2は2020年1月までに非推奨になるため、セットアップによりPython3との互換性が保証されます。 Debian 10は現在、Python2とPython3の両方をサポートしています。
インストールする前に python3-certbot-nginx
パッケージ、パッケージリストを更新します。
- sudo apt update
次に、の依存関係をインストールします python3-certbot-nginx
パッケージには、 python3-acme
, python3-certbot
, python3-mock
, python3-openssl
, python3-pkg-resources
, python3-pyparsing
、 と python3-zope.interface
パッケージ:
- sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
最後に、 python3-certbot-nginx
パッケージ:
- sudo apt install python3-certbot-nginx
これでCertbotを使用する準備が整いましたが、NginxのSSLを構成するには、Nginxの構成の一部を確認する必要があります。
ステップ2—Nginxの構成を確認する
Certbotは正しいものを見つけることができる必要があります server
Nginx構成でブロックして、SSLを自動的に構成できるようにします。 具体的には、これを行うには、 server_name
要求されたドメインに一致するディレクティブ。
Nginxインストールチュートリアルのサーバーブロックのセットアップ手順に従った場合は、ドメインのサーバーブロックが次の場所にあるはずです。 /etc/nginx/sites-available/your_domain
とともに server_name
ディレクティブはすでに適切に設定されています。
確認するには、を使用してドメインのサーバーブロックファイルを開きます nano
またはお気に入りのテキストエディタ:
- sudo nano /etc/nginx/sites-available/your_domain
既存のものを探す server_name
ライン。 次のようになります。
...
server_name your_domain www.your_domain;
...
含まれている場合は、エディターを終了して次の手順に進みます。
そうでない場合は、一致するように更新します。 次に、ファイルを保存し、エディターを終了して、構成編集の構文を確認します。
- sudo nginx -t
エラーが発生した場合は、サーバーブロックファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Nginxをリロードして新しい構成をロードします。
- sudo systemctl reload nginx
Certbotは正しいものを見つけることができるようになりました server
ブロックして更新します。
次に、HTTPSトラフィックを許可するようにファイアウォールを更新しましょう。
ステップ3—ファイアウォールを介したHTTPSの許可
あなたが持っている場合 ufw
ファイアウォールが有効になっている場合、前提条件ガイドで推奨されているように、HTTPSトラフィックを許可するように設定を調整する必要があります。
次のように入力すると、現在の設定を確認できます。
- sudo ufw status
おそらく次のようになります。つまり、WebサーバーへのHTTPトラフィックのみが許可されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
HTTPSトラフィックを取り込むには、 Nginx Full
プロファイルを作成し、冗長なものを削除します Nginx HTTP
プロファイル許容値:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
ステータスは次のようになります。
- sudo ufw status
OutputStatus: 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 your_domain -d www.your_domain
これは実行されます certbot
とともに --nginx
プラグイン、使用 -d
証明書を有効にする名前を指定します。
初めてのランニングの場合 certbot
、メールアドレスを入力して利用規約に同意するよう求められます。 そうした後、 certbot
Let’s Encryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。
それが成功した場合、 certbot
HTTPS設定をどのように構成するかを尋ねられます。
OutputPlease 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
プロセスが成功し、証明書が保存されている場所を通知するメッセージで締めくくられます。
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2019-10-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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
証明書がダウンロード、インストール、およびロードされます。 を使用してWebサイトをリロードしてみてください https://
ブラウザのセキュリティインジケータに注目してください。 サイトが適切に保護されていることを示す必要があります。通常は緑色の鍵のアイコンが付いています。 SSL Labsサーバーテストを使用してサーバーをテストすると、Aグレードになります。
更新プロセスをテストして終了しましょう。
ステップ5—Certbotの自動更新を確認する
Let’s Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 The certbot
インストールしたパッケージは、更新スクリプトを追加することでこれを処理します /etc/cron.d
. このスクリプトは1日2回実行され、有効期限が切れてから30日以内の証明書は自動的に更新されます。
更新プロセスをテストするために、ドライランを実行できます。 certbot
:
- sudo certbot renew --dry-run
エラーが表示されない場合は、すべて設定されています。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づいたときに警告します。
結論
このチュートリアルでは、Let’sEncryptクライアントをインストールしました certbot
、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定します。 Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。