開発者ドキュメント

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

序章

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

このチュートリアルでは、Certbotを使用して無料のSSL証明書を取得し、Nginxを実行しているFreeBSDサーバーで使用する方法を示します。 また、SSL証明書を自動的に更新する方法についても説明します。

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

前提条件

このチュートリアルを完了するには、次のものが必要です。

これらの前提条件を完了したら、Let’sEncryptクライアントソフトウェアであるCertbotのインストールに進みましょう。

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

Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにcertbotクライアントソフトウェアをインストールすることです。 Certbotの最新バージョンは、FreeBSDのポートシステムを使用してソースからインストールできます。

まず、portsツリーの圧縮スナップショットを取得します。

  1. sudo portsnap fetch

このコマンドが完了するまでに数分かかる場合があります。 終了したら、スナップショットを抽出します。

  1. sudo portsnap extract

このコマンドも完了するまでに時間がかかる場合があります。 完了したら、portsツリー内のpy-certbotディレクトリに移動します。

  1. cd /usr/ports/security/py-certbot

次に、makeコマンドとsudo権限を使用して、Certbotソースコードをダウンロードしてコンパイルします。

  1. sudo make install clean

次に、portsツリー内のpy-certbot-nginxディレクトリに移動します。

  1. cd /usr/ports/security/py-certbot-nginx

このディレクトリからmakeコマンドを再度実行してください。 これにより、SSL証明書の取得に使用するCertbot用のnginxプラグインがインストールされます。

  1. sudo make install clean

このプラグインのインストール中に、次のような青いダイアログウィンドウがいくつかポップアップ表示されます。

これらは、プラグインとその依存関係のドキュメントをインストールするオプションを提供します。 このチュートリアルでは、ENTERを押すだけで、このドキュメントをインストールするこれらのウィンドウのデフォルトオプションを受け入れることができます。

certbotLet’sEncryptクライアントを使用する準備が整いました。 ただし、証明書を取得する前に、ファイアウォールを設定し、ファイアウォールを通過するHTTPSトラフィックを許可することが重要です(まだ行っていない場合)。

ステップ2—ファイアウォールを設定してHTTPSアクセスを許可する

サーバーにファイアウォールをすでに設定している場合は、HTTPSアクセスが許可されていることを確認する必要があります(ポート443経由)。 ファイアウォールをまだ設定していない場合は、この手順で概説されている手順に従って設定できます。

/etc/ディレクトリにあるrc.confファイルをお好みのエディタで開きます。 ここではeeを使用します。

  1. sudo ee /etc/rc.conf

このファイルは、マシンが起動するたびにどのサービスを開始する必要があるかをFreeBSDに通知するために使用されます。 ファイルの先頭近くに、次の強調表示された行を追加します。

/etc/rc.conf
. . .
nginx_enable="YES"
firewall_enable="YES"
firewall_type="workstation"
firewall_myservices="22/tcp 80/tcp 443/tcp"
firewall_allowservices="any"

これらの各ディレクティブとその設定の機能は次のとおりです。

これらの行を追加したら、ファイルを保存し、CTRL + Cを押し、exitと入力して、ENTERを押してエディターを閉じます。

次に、ipfwファイアウォールサービスを開始します。 このサーバーでファイアウォールを起動するのはこれが初めてであるため、起動するとサーバーが停止し、SSH経由でアクセスできなくなる可能性があります。 次のnohupコマンド(「ハングアップなし」を表す)は、ストールを防ぎながらファイアウォールを起動し、標準出力とエラーを一時ログファイルにリダイレクトします。

  1. sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

ただし、cshまたはtcshを使用している場合、このリダイレクトによりAmbiguous output redirect.が出力に表示されます。 この場合、代わりに以下を実行してipfwを開始します。

  1. sudo nohup service ipfw start >&/tmp/ipfw.log

将来的には、他のサービスと同じようにipfwファイアウォールを管理できるようになります。 たとえば、サービスを停止、開始、および再起動するには、次のコマンドを実行します。

  1. sudo service ipfw stop
  2. sudo service ipfw start
  3. sudo service ipfw restart

ファイアウォールが構成されたら、Certbotを実行して証明書を取得する準備が整いました。

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

Certbotは、さまざまなプラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 nginxプラグインは、Nginxの再構成と構成ファイルの再ロードを処理します。

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

このサーバーでcertbotを初めて実行する場合、クライアントは電子メールアドレスを入力し、Let’sEncryptの利用規約に同意するように求めます。 その後、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): 2

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

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /usr/local/etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /usr/local/etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-09-24. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/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://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 これは、サイトが適切に保護されていることを表す必要があり、通常は緑色の鍵のアイコンが付いています。 SSL Labsサーバーテストを使用してサーバーをテストすると、Aグレードになります。

HTTPS経由でサイトにアクセスできることを確認したら、このチュートリアルの最後のステップに進むことができます。このチュートリアルでは、証明書を更新できることを確認し、証明書を自動的に更新するプロセスを構成します。

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

Let’s Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 この手順では、cronタスクを設定して証明書の更新を自動化する方法について説明します。 ただし、この自動更新を設定する前に、証明書を正しく更新できることをテストすることが重要です。

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

  1. sudo certbot renew --dry-run

エラーが表示されない場合は、新しいcrontabを作成する準備が整っています。

  1. sudo crontab -e

これにより、新しいcrontabファイルが開きます。 次のコンテンツを新しいファイルに追加します。これにより、croncertbot renewコマンドを毎日正午と深夜に2回実行するように指示されます。 certbot renewは、システム上の証明書の有効期限が近づいているかどうかを確認し、必要に応じて証明書の更新を試みます。

0 0,12 * * * /usr/local/bin/certbot renew

crontab -eコマンドの前にsudoが付いているため、この操作は root として実行されます。これは、certbotの実行にスーパーユーザー権限が必要なために必要です。

自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づくと警告を発します。

結論

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

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