序章

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

このチュートリアルでは、Certbotを使用して、ApacheをWebサーバーとして実行しているFreeBSD12.0サーバーでLet’sEncryptからTLS/SSL証明書を設定します。 さらに、cronジョブを使用して証明書の更新プロセスを自動化します。

Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

前提条件

このガイドを開始する前に、次のものが必要です。

  • FreeBSDの使用を開始する方法のこのガイドを使用して、必要に応じてセットアップできるFreeBSD12.0サーバー。

  • このFAMPスタックチュートリアルのステップ1を完了することによってインストールされたApache。

  • このチュートリアルの手順のファイアウォール構成手順を使用して有効にしたファイアウォール。

  • ドメインがサーバーのパブリックIPアドレスを指す2つのDNSAレコード。 私たちのセットアップは使用します your-domainwww.your-domain ドメイン名として、どちらも有効なDNSレコードが必要です。 DigitalOceanプラットフォームでDNSレコードを追加する方法の詳細については、このDigitalOceanDNSの概要を参照してください。 Let’s Encryptが証明書を発行しているドメインを所有していることを検証する方法のため、DNSAレコードが必要です。 たとえば、次の証明書を取得する場合 your-domain、検証プロセスが機能するには、そのドメインがサーバーに解決される必要があります。

これらの前提条件が満たされると、Let’sEncrypt証明書をインストールできるツールであるCertbotのインストールを開始できます。

ステップ1—Let’sEncrypt用のCertbotツールをインストールする

Let’s Encrypt証明書は、ユーザーのブラウザがWebサーバーが信頼できる認証局によって保護されていることを確認できることを保証します。 Webサーバーとの通信は、HTTPSを使用した暗号化によって保護されます。

このステップでは、WebサーバーにCertbotツールをインストールして、ドメインの有効な証明書とキーを発行するためにLet’sEncryptサーバーにリクエストを送信します。

次のコマンドを実行して、CertbotパッケージとそのApacheHTTPプラグインをインストールします。

  1. sudo pkg install -y py37-certbot py37-certbot-apache

パッケージをインストールしたので、次に進んでWebサーバーでTLS接続を有効にします。

ステップ2—ApacheHTTPでSSL/TLS接続を有効にする

デフォルトでは、ApacheHTTPのインストールはすべてポートでコンテンツを提供します 80 (HTTP)。 The Listen 80 メインのエントリ httpd.conf 構成ファイルはこれを確認します。 HTTPS接続を許可するには、デフォルトのポートを次のようにする必要があります 443. ポートを追加するには 443 SSL / TLS接続を確立するには、 mod_ssl ApacheHTTPのモジュール。

このモジュールを見つけるには httpd.conf ファイル、使用します grep とともに -n 指定されたパスのファイルからの行に番号を付けるフラグ。 ここで見つけることができます mod_ssl.so 次のコマンドを実行します。

  1. grep -n 'mod_ssl.so' /usr/local/etc/apache24/httpd.conf

出力として、必要な回線の番号を受け取ります。

/usr/local/etc/apache24/httpd.conf
148 #LoadModule ssl_module libexec/apache24/mod_ssl.so

モジュールを有効にするには、行の先頭にあるハッシュタグ記号を削除します。

前のコマンドの行番号を使用して、次のファイルを開きます。

  1. sudo vi +148 /usr/local/etc/apache24/httpd.conf

これにより、編集用の正しい行に直接移動します。

を押して、次のように行を編集します x:

/usr/local/etc/apache24/httpd.conf
#LoadModule session_dbd_module libexec/apache24/mod_session_dbd.so
#LoadModule slotmem_shm_module libexec/apache24/mod_slotmem_shm.so
#LoadModule slotmem_plain_module libexec/apache24/mod_slotmem_plain.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
#LoadModule dialup_module libexec/apache24/mod_dialup.so
#LoadModule http2_module libexec/apache24/mod_http2.so
#LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so

削除したら #、 押す :wq その後 ENTER ファイルを閉じます。

ApacheHTTPでSSL/TLS機能を有効にしました。 次のステップでは、ApacheHTTPで仮想ホストを構成します。

ステップ3—仮想ホストの有効化と構成

仮想ホストは、同じApache HTTPインストールを使用して、複数のWebサイトが同じサーバーに同時に独立して存在できる方法です。 Certbotでは、Let’s Encrypt証明書が機能するために、構成ファイル(仮想ホスト)内に特定のルールを配置するためにこのセットアップが必要です。

まず、ApacheHTTPで仮想ホストを有効にします。 次のコマンドを実行して、ファイル内のディレクティブを見つけます。

  1. grep -n 'vhosts' /usr/local/etc/apache24/httpd.conf

出力に行番号が表示されます。

Output
508 #Include etc/apache24/extra/httpd-vhosts.conf

次のコマンドを使用してファイルを編集し、削除します # その行の最初から:

  1. sudo vi +508 /usr/local/etc/apache24/httpd.conf

前と同じように、 x 削除するには # 行の先頭から次のようになります。

/usr/local/etc/apache24/httpd.conf
...
# User home directories
#Include etc/apache24/extra/httpd-userdir.conf

# Real-time info on requests and configuration
#Include etc/apache24/extra/httpd-info.conf

# Virtual hosts
Include etc/apache24/extra/httpd-vhosts.conf

# Local access to the Apache HTTP Server Manual
#Include etc/apache24/extra/httpd-manual.conf

# Distributed authoring and versioning (WebDAV)
#Include etc/apache24/extra/httpd-dav.conf
...

次にを押します :wqENTER ファイルを保存して終了します。

Apache HTTPで仮想ホストを有効にしたので、デフォルトの仮想ホスト構成ファイルを変更して、サンプルドメインをドメイン名に置き換えます。

次に、仮想ホストブロックをに追加します httpd-vhosts.conf ファイル。 ファイルを編集して、既存の2つを削除します VirtualHost 次のコマンドを使用して、23行目のコメントブロックの後にブロックします。

  1. sudo vi +23 /usr/local/etc/apache24/extra/httpd-vhosts.conf

ファイルを開いた後、既存の2つを削除します VirtualHost 構成ブロックを作成してから、この特定の構成で次のブロックを追加します。

/usr/local/etc/apache24/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin your_email@your_domain.com
    DocumentRoot "/usr/local/www/apache24/data/your_domain.com"
    ServerName your_domain.com
    ServerAlias www.your_domain.com
    ErrorLog "/var/log/your_domain.com-error_log"
    CustomLog "/var/log/your_domain.com-access_log" common
</VirtualHost>

このブロックでは、以下を構成しています。

  • ServerAdmin:これは、その特定のサイトの担当者からの電子メールが配置される場所です。
  • DocumentRoot:このディレクティブは、特定のサイトのファイルが配置および読み取られる場所を定義します。
  • ServerName:これはサイトのドメイン名です。
  • ServerAlias: に似ている ServerName しかし配置 www. ドメイン名の前。
  • ErrorLog:ここでエラーログパスが宣言されます。 すべてのエラーメッセージは、このディレクティブで指定されたファイルに書き込まれます。
  • CustomLog: に似ている ErrorLog ただし、今回はすべてのアクセスログを収集するファイルです。

最後に、サイトが配置されるディレクトリを作成します。 このパスは、で宣言したパスと一致する必要があります DocumentRoot のディレクティブ httpd-vhosts.conf ファイル。

  1. sudo mkdir /usr/local/www/apache24/data/your_domain.com

次に、ディレクトリの権限を変更して、Apache HTTPプロセス( www ユーザー)それを操作できます:

  1. sudo chown -R www:www /usr/local/www/apache24/data/your_domain.com

使用した chown で所有権を変更するには -R アクションを再帰的にするためのフラグ。 ユーザーとグループは、 www:www.

ApacheHTTPで仮想ホストを有効にしました。 ここで、書き換えモジュールを有効にします。

ステップ4—リライトモジュールを有効にする

URLを変更するには、たとえばHTTPからHTTPSにリダイレクトする場合など、ApacheHTTP内でリライトモジュールを有効にする必要があります。

次のコマンドを使用して、書き換えモジュールを見つけます。

  1. grep -n 'rewrite' /usr/local/etc/apache24/httpd.conf

次のような出力が表示されます。

Output
180 #LoadModule rewrite_module libexec/apache24/mod_rewrite.so

モジュールを有効にするには、ここで削除します # 行頭から:

  1. sudo vi +180 /usr/local/etc/apache24/httpd.conf

を押して、ファイルを次のように編集します x 削除するには # 行頭から:

/usr/local/etc/apache24/httpd.conf
#LoadModule actions_module libexec/apache24/mod_actions.so
#LoadModule speling_module libexec/apache24/mod_speling.so
#LoadModule userdir_module libexec/apache24/mod_userdir.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
LoadModule php7_module        libexec/apache24/libphp7.so

# Third party modules
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf

<IfModule unixd_module>

このファイルを保存して終了します。

これで、Apacheで必要な構成のセットアップが完了しました。

ステップ5—Let’sEncrypt証明書を取得する

Certbotは、さまざまなプラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 The apache プラグインがApacheHTTPの再構成を処理します。 対話型インストールを実行し、単一のドメインのみをカバーする証明書を取得するには、次のcertbotコマンドを実行します。

  1. sudo certbot --apache -d your-domain -d www.your-domain

複数のドメインまたはサブドメインに有効な単一の証明書をインストールする場合は、それらを追加のパラメーターとしてコマンドに渡し、新しい各ドメインまたはサブドメインにタグを付けることができます。 -d 国旗。 パラメータリストの最初のドメイン名は、Let’sEncryptが証明書を作成するために使用するbaseドメインになります。 このため、最初にベースドメイン名を渡し、次に追加のサブドメインまたはエイリアスを渡します。

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

チャレンジが成功すると、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

両方を有効にするかどうかを選択することもできます HTTPHTTPS すべてのリクエストにアクセスするか、リダイレクトを強制します HTTPS. セキュリティを強化するために、オプションを選択することをお勧めします 2: Redirect 暗号化されていない接続を許可する特別な必要がない場合。 選択してからヒット ENTER.

これにより、構成が更新され、ApacheHTTPがリロードされて新しい設定が取得されます。 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 yyyy-mm-dd. 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

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

Certbotは、いくつかの重要な構成変更を行いました。 Webサーバーに証明書をインストールするときは、それらを特定のパスに配置する必要があります。 あなたが今あなたがの内容を読んだら httpd-vhosts.conf ファイルには、Certbotプログラムによって行われたいくつかの変更があります。

たとえば、 <VirtualHost *:80> セクションリダイレクトルール(選択した場合)は、その下部に配置されます。

/usr/local/etc/apache24/extra/httpd-vhosts.conf
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain.com [OR]
RewriteCond %{SERVER_NAME} =your_domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Certbotは、というファイルも作成しました httpd-vhosts-le-ssl.conf Apacheの証明書の構成が配置されている場所:

/usr/local/etc/apache24/extra/httpd-vhosts-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin your_email@your_domain.com
    DocumentRoot "/usr/local/www/apache24/data/your_domain.com"
    ServerName your_domain.com
    ServerAlias www.your_domain.com
    ErrorLog "/var/log/your_domain.com-error_log"
    CustomLog "/var/log/your_domain.com-access_log" common

Include /usr/local/etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /usr/local/etc/letsencrypt/live/your_domain.com/fullchain.pem
SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/your_domain.com/privkey.pem
</VirtualHost>
</IfModule>

注: Let’s Encrypt証明書を使用するサイトでの暗号スイートの使用に変更を加える場合は、 /usr/local/etc/letsencrypt/options-ssl-apache.conf ファイル。

Let’s Encrypt証明書を取得したら、自動更新の設定に進むことができます。

ステップ6—自動証明書更新の構成

Let’s Encryptの証明書は90日間有効ですが、エラーの許容範囲を確保するために、60日ごとに証明書を更新することをお勧めします。 このため、このプロセスを自動化して、証明書を定期的にチェックおよび更新することをお勧めします。

まず、証明書を更新するために使用するコマンドを調べてみましょう。 The certbot Let’sEncryptクライアントには renew 現在インストールされている証明書を自動的にチェックし、有効期限から30日以内の場合は更新を試みるコマンド。 を使用して --dry-run オプションで、このタスクのシミュレーションを実行して、更新がどのように機能するかをテストできます。

  1. sudo certbot renew --dry-run

証明書が古くならないようにするための実用的な方法は、自動更新コマンドを定期的に実行するcronジョブを作成することです。 更新は最初に有効期限をチェックし、証明書の有効期限が30日以内の場合にのみ更新を実行するため、毎週または毎日実行するcronジョブを作成しても安全です。

公式のCertbotドキュメントは実行することを推奨しています cron 1日2回。 これにより、Let’s Encryptが証明書の失効を開始した場合、Certbotが証明書を更新するまでに半日以内になります。

編集します crontab 1日に2回更新を実行する新しいジョブを作成します。 編集するには crontab root ユーザーの場合、次を実行します。

  1. sudo crontab -e

次の構成をファイルに配置して、1日に2回、システムが更新可能な証明書を検索し、必要に応じて更新するようにします。

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute    hour    mday    month   wday    command
  0         0,12    *       *       *       /usr/local/bin/certbot renew

最初の2行で、環境変数を宣言しています。したがって、実行可能パスが見つかる場所と、それらが実行されているシェルを宣言しています。 次に、関心のある時間枠と実行するコマンドを指定します。

この短い一連の手順で、証明書の自動更新を構成しました。

結論

このチュートリアルでは、Let’sEncryptクライアントをインストールしました certbot、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにApacheを構成し、証明書の自動更新を設定しました。 詳細については、Certbotのドキュメントを参照してください。