ウェブサイト検索

Ubuntu と Debian で Let's Encrypt を使用して Nginx を保護する方法


Apache SSL に関する前回の Let's Encrypt チュートリアルに続き、この記事では Let's Encrypt CA が発行する無料の SSL/TLS 証明書を生成してインストールする方法について説明します。 は、Ubuntu または Debian 上の Nginx ウェブサーバー用です。

こちらもお読みください
  1. Ubuntu および Debian で無料の Let’s Encrypt を使用して Apache を保護する
  2. RHEL および CentOS で Apache を保護するために Let’s Encrypt SSL をインストールする
テストサンプル環境

要件

  1. サーバーの IP アドレスを指す、有効な DNS A レコードを持つ登録済みドメイン。
  2. 複数のドメインまたはサブドメインをホストする予定の場合は、SSL と Vhost が有効になっているインストール済みの Nginx Web サーバー。

ステップ 1: Nginx Web サーバーのインストール

1. 最初のステップで、以下のコマンドを実行して、Nginx Web サーバーをインストールします (まだインストールされていない場合)。

sudo apt-get install nginx

ステップ 2: Nginx 用の Let's Encrypt SSL 証明書を生成する

2. 無料の SSL/TLS 証明書を生成する前に、/usr/local/ ファイル システム階層に Let's Encrypt ソフトウェアをインストールします。 > 以下のコマンドを発行して、git クライアントを実行します。

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Nginx の証明書を取得する手順は自動化されていますが、Let’s Encrypt スタンドアロン プラグインを使用して Nginx 用の無料 SSL 証明書を手動で作成してインストールすることもできます。

この方法では、証明書を生成する前に Let’s Encrypt クライアントがサーバーの ID を検証する間、ポート 80 がシステムで短期間使用されないようにする必要があります。

すでに Nginx を実行している場合は、次のコマンドを発行してサービスを停止します。


sudo service nginx stop
OR
sudo systemctl stop nginx

ポート 80 にバインドする他のサービスを実行している場合は、そのサービスも停止します。

4. netstat コマンドを実行して、ポート 80 が空いていることを確認します。

sudo netstat -tlpn | grep 80

5. 次に、SSL 証明書を取得するために letsencrypt を実行します。 /usr/local/letsencrypt システム パスにある Let's Encrypt インストール ディレクトリに移動し、certonly letsencrypt-auto コマンドを実行します。 >--standalone オプションと、証明書を生成する各ドメインまたはサブドメインの -d フラグ。

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Let’s Encrypt が紛失したキーの回復や緊急通知に使用する電子メール アドレスを入力します。

7. Enter キーを押してライセンス条項に同意します。

8. 最後に、すべてが成功すると、次のスクリーンショットのようなメッセージがターミナル コンソールに表示されます。

ステップ 3: Let’s Encrypt SSL 証明書を Nginx にインストールする

9. SSL 証明書が生成されたので、それを使用するように Nginx Web サーバーを構成します。新しい SSL 証明書は、ドメイン名にちなんで名付けられたディレクトリの下の /etc/letsencrypt/live/ に配置されます。 ls コマンドを実行して、ドメインに対して発行された証明書ファイルを一覧表示します。

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. 次に、テキスト エディタで /etc/nginx/sites-available/default ファイルを開き、最初のコメント行の後に次のブロックを追加します。 SSLブロック。以下のスクリーンショットをガイダンスとして使用してください。

sudo nano /etc/nginx/sites-enabled/default

Nginx ブロックの抜粋:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

SSL 証明書のドメイン名の値を適宜置き換えます。

11. 次のステップでは、サーバーを保護するために、/etc/nginx/ssl/ ディレクトリに強力な Diffie-Hellman 暗号を生成します。次のコマンドを実行してLogjam 攻撃を実行します。

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. 最後に、Nginx デーモンを再起動して変更を反映します。

sudo systemctl restart nginx

以下の URL にアクセスして SSL 証明書をテストします。

https://www.ssllabs.com/ssltest/analyze.html

ステップ 4: Let’s Encrypt Nginx 証明書の自動更新

13. Let’s Encrypt CA によって発行された証明書は 90 日間有効です。有効期限の前にファイルを自動更新するには、次の内容で ssl-renew.sh bash スクリプトを /usr/local/bin/ ディレクトリに作成します。

sudo nano /usr/local/bin/ssl-renew.sh

次の内容を ssl-renew.sh ファイルに追加します。

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

--webroot-path 変数を Nginx ドキュメント ルートと一致するように置き換えます。次のコマンドを発行して、スクリプトが実行可能であることを確認します。

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. 最後に、証明書の有効期限が切れる約 30 日以内に証明書が更新されるように、2 か月ごとにスクリプトを実行する cron ジョブを追加します。

sudo crontab -e

ファイルの最後に次の行を追加します。

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

それでおしまい! Nginx サーバーは、無料の Let’s Encrypt SSL 証明書を使用して SSL コンテンツを提供しています。