CentOS7でLet'sEncryptを使用してNginxを保護する方法

提供:Dev Guides
移動先:案内検索

序章

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

このチュートリアルでは、certbot Let's Encryptクライアントを使用して無料のSSL証明書を取得し、CentOS7のNginxで使用する方法を示します。 また、SSL証明書を自動的に更新する方法についても説明します。

前提条件

このチュートリアルに従う前に、いくつかのことが必要になります。

  • sudo権限を持つ非rootユーザーのCentOS7サーバー。 このようなユーザーアカウントを設定する方法については、 CentOS 7チュートリアルのサーバーの初期設定の手順1〜3を参照してください。
  • 証明書を使用する登録済みドメイン名を所有または管理する必要があります。 まだドメイン名を登録していない場合は、そこにある多くのドメイン名レジストラの1つに登録できます(例: Namecheap、GoDaddyなど)。
  • ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 これが必要なのは、Let's Encryptが、証明書を発行しているドメインを所有していることを検証する方法のためです。 たとえば、example.comの証明書を取得する場合、検証プロセスを機能させるには、そのドメインをサーバーに解決する必要があります。 この設定では、ドメイン名としてexample.comwww.example.comを使用するため、両方のDNSレコードが必要です

すべての前提条件が整ったら、Let'sEncryptクライアントソフトウェアのインストールに進みましょう。

ステップ1— CertbotLet'sEncryptクライアントのインストール

Let's Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにcertbotソフトウェアをインストールすることです。 現在、これをインストールする最良の方法は、EPELリポジトリを使用することです。

次のように入力して、サーバー上のEPELリポジトリへのアクセスを有効にします。

sudo yum install epel-release

リポジトリを有効にすると、次のように入力してcertbot-nginxパッケージを入手できます。

sudo yum install certbot-nginx

certbot Let's Encryptクライアントがインストールされ、使用できるようになりました。

ステップ2—Nginxを設定する

Nginxをまだインストールしていない場合は、今すぐインストールできます。 EPELリポジトリは前のセクションですでに有効になっているはずなので、次のように入力してNginxをインストールできます。

sudo yum install nginx

次に、systemctlを使用してNginxを起動します。

sudo systemctl start nginx

CertbotはNginxのSSLを自動的に構成できますが、構成内で正しいserverブロックを見つけることができる必要があります。 これは、証明書を要求しているドメインに一致するserver_nameディレクティブを探すことによって行われます。 Nginxの新規インストールを開始する場合は、デフォルトの構成ファイルを更新できます。

sudo vi /etc/nginx/nginx.conf

既存のserver_name行を検索します。

/ etc / nginx / sites-available / default

server_name _;

_アンダースコアをドメイン名に置き換えます。

/etc/nginx/nginx.conf

server_name example.com www.example.com;

ファイルを保存して、エディターを終了します。 次のコマンドを使用して、構成編集の構文を確認します。

sudo nginx -t

それがエラーなしで実行される場合は、Nginxをリロードして新しい構成をロードします。

sudo systemctl reload nginx

これで、Certbotは正しいserverブロックを見つけて更新できるようになります。 次に、HTTPSトラフィックを許可するようにファイアウォールを更新します。

ステップ3—ファイアウォールを更新する

ファイアウォールを有効にしている場合は、ポート80と443が着信トラフィックに対して開いていることを確認してください。 ファイアウォールを実行していない場合は、先にスキップできます。

Firewalld ファイアウォールを実行している場合は、次のように入力してこれらのポートを開くことができます。

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

iptables ファイアウォールを実行している場合、実行する必要のあるコマンドは、現在のルールセットに大きく依存します。 基本的なルールセットの場合、次のように入力してHTTPおよびHTTPSアクセスを追加できます。

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

これで、Certbotを実行して証明書を取得する準備が整いました。

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

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

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

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

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

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

OutputPlease choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
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/example.com/fullchain.pem. Your cert will
   expire on 2017-10-23. 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

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

ステップ5—Diffie-Hellmanパラメーターの更新

ここでSSLLabsサーバーテストを使用してサーバーをテストすると、Diffie-Hellmanパラメーターが弱いため、Bグレードのみが取得されます。 これは、サーバーとそのユーザー間の最初の鍵交換のセキュリティに影響します。 これを修正するには、新しいdhparam.pemファイルを作成し、それをserverブロックに追加します。

opensslを使用してファイルを作成します。

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

これには、最大で数分かかる場合があります。 完了したら、serverブロックを含むNginx構成ファイルを開きます。 この例では、これがデフォルトの構成ファイルです。

sudo vi /etc/nginx/nginx.conf

serverブロック内の任意の場所に次の行を貼り付けます。

/etc/nginx/nginx.conf

. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ファイルを保存してエディターを終了し、構成を確認します。

sudo nginx -t

エラーがない場合は、Nginxをリロードします。

sudo systemctl reload nginx

これでサイトはより安全になり、Aの評価を受けるはずです。

ステップ6—自動更新の設定

Let's Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 定期的に実行するコマンドを設定して、期限切れの証明書を確認し、それらを自動的に更新する必要があります。

更新チェックを毎日実行するために、定期的なジョブを実行するための標準システムサービスであるcronを使用します。 crontabというファイルを開いて編集することにより、cronに何をすべきかを指示します。

sudo crontab -e

テキストエディタは、この時点で空のテキストファイルであるデフォルトのcrontabを開きます。 次の行に貼り付けて、保存して閉じます。

crontab

. . .
15 3 * * * /usr/bin/certbot renew --quiet

この行の15 3 * * *の部分は、「毎日午前3時15分に次のコマンドを実行する」ことを意味します。 いつでも選択できます。

Certbotのrenewコマンドは、システムにインストールされているすべての証明書をチェックし、30日以内に期限切れになるように設定されている証明書を更新します。 --quietは、情報を出力したり、ユーザー入力を待機したりしないようにCertbotに指示します。

cronはこのコマンドを毎日実行します。 インストールされているすべての証明書は、有効期限が切れる30日以内になると、自動的に更新および再ロードされます。

cronジョブを作成およびスケジュールする方法の詳細については、VPSガイドでCronを使用してタスクを自動化する方法を確認してください。


結論

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