Ubuntu20.04でLet'sEncryptを使用してApacheを保護する方法

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

序章

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

このガイドでは、 Certbot を使用してUbuntu20.04でApacheの無料SSL証明書を取得し、この証明書が自動的に更新されるように設定されていることを確認します。

このチュートリアルでは、Let's Encryptによって保護されるWebサイトをセットアップするために、Apacheのデフォルトの構成ファイルの代わりに別の仮想ホストファイルを使用します。 サーバーでホストされているドメインごとに新しいApache仮想ホストファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバックセットアップとしてデフォルトの構成ファイルを維持するのに役立ちます。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • このUbuntu20.04チュートリアルの初期サーバーセットアップに従ってセットアップされた1つのUbuntu20.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
  • 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例としてyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
    • サーバーのパブリックIPアドレスを指すyour_domainのAレコード。
    • サーバーのパブリックIPアドレスを指すwww.your_domainのAレコード。
  • Ubuntu20.04にApacheをインストールする方法に従ってApacheをインストールします。 ドメインに仮想ホストファイルがあることを確認してください。 このチュートリアルでは、例として/etc/apache2/sites-available/your_domain.confを使用します。

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

Let's EncryptでSSL証明書を取得するには、まずサーバーにCertbotソフトウェアをインストールする必要があります。 そのためにデフォルトのUbuntuパッケージリポジトリを使用します。

certbotpython3-certbot-apacheの2つのパッケージが必要です。 後者はCertbotとApacheを統合するプラグインであり、単一のコマンドで証明書の取得とWebサーバー内のHTTPSの構成を自動化することができます。

sudo apt install certbot python3-certbot-apache

YENTERの順に押すと、インストールの確認を求められます。

これで、Certbotがサーバーにインストールされました。 次のステップでは、Apacheの構成を検証して、仮想ホストが適切に設定されていることを確認します。 これにより、certbotクライアントスクリプトがドメインを検出し、新しく生成されたSSL証明書を自動的に使用するようにWebサーバーを再構成できるようになります。

ステップ2—Apache仮想ホスト構成を確認する

WebサーバーのSSLを自動的に取得して構成できるようにするには、CertbotはApache構成ファイル内で正しい仮想ホストを見つける必要があります。 サーバードメイン名は、VirtualHost構成ブロック内で定義されたServerNameおよびServerAliasディレクティブから取得されます。

Apacheインストールチュートリアル仮想ホストのセットアップ手順に従った場合は、/etc/apache2/sites-available/your_domain.confのドメインにServerNameを使用してVirtualHostブロックをセットアップする必要があります。 X194X]ディレクティブはすでに適切に設定されています。

これを確認するには、nanoまたはお好みのテキストエディタを使用して、ドメインの仮想ホストファイルを開きます。

sudo nano /etc/apache2/sites-available/your_domain.conf

既存のServerNameおよびServerAlias行を検索します。 これらは次のようになります。

/etc/apache2/sites-available/your_domain.conf

...
ServerName your_domain
ServerAlias www.your_domain
...

ServerNameServerAliasをこのように設定している場合は、テキストエディタを終了して次の手順に進むことができます。 nanoを使用している場合は、CTRL+XYENTERの順に入力して終了できます。

現在の仮想ホスト構成が例と一致しない場合は、それに応じて更新してください。 完了したら、ファイルを保存してエディターを終了します。 次に、次のコマンドを実行して変更を検証します。

sudo apache2ctl configtest

応答としてSyntax OKを取得する必要があります。 エラーが発生した場合は、仮想ホストファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Apacheをリロードして、変更を有効にします。

sudo systemctl reload apache2

これらの変更により、Certbotは正しいVirtualHostブロックを見つけて更新できるようになります。

次に、HTTPSトラフィックを許可するようにファイアウォールを更新します。

ステップ3—ファイアウォールを介したHTTPSの許可

前提条件ガイドで推奨されているように、UFWファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 インストール時に、Apacheはいくつかの異なるUFWアプリケーションプロファイルを登録します。 Apache Full プロファイルを活用して、サーバーでHTTPトラフィックとHTTPSトラフィックの両方を許可できます。

サーバーで現在許可されているトラフィックの種類を確認するには、次を使用できます。

sudo ufw status

Apacheインストールガイドのいずれかに従っている場合、出力は次のようになります。つまり、ポート80でのHTTPトラフィックのみが現在許可されています。

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

HTTPSトラフィックを追加で取り込むには、「Apache Full」プロファイルを許可し、冗長な「Apache」プロファイルを削除します。

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

ステータスは次のようになります。

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)        

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

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

Certbotは、プラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 Apacheプラグインは、Apacheの再構成と、必要に応じて構成の再ロードを処理します。 このプラグインを使用するには、次のように入力します。

sudo certbot --apache

このスクリプトは、SSL証明書を構成するために一連の質問に答えるように促します。 まず、有効な電子メールアドレスを要求されます。 この電子メールは、更新通知とセキュリティ通知に使用されます。

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain

有効なメールアドレスを入力したら、ENTERを押して次の手順に進みます。 次に、Let'sEncryptの利用規約に同意するかどうかを確認するよう求められます。 Aを押してからENTERを押すと確認できます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

次に、ニュースやその他の情報を受け取るために、電子メールを電子フロンティア財団と共有するかどうかを尋ねられます。 それらのコンテンツを購読したくない場合は、Nと入力します。 それ以外の場合は、Yと入力します。 次に、ENTERを押して、次の手順に進みます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

次の手順では、HTTPSをアクティブ化するドメインをCertbotに通知するように求められます。 リストされたドメイン名はApache仮想ホスト構成から自動的に取得されるため、仮想ホストで正しいServerNameおよびServerAlias設定が構成されていることを確認することが重要です。 リストされているすべてのドメイン名に対してHTTPSを有効にする場合(推奨)、プロンプトを空白のままにして、ENTERを押して続行できます。 それ以外の場合は、コンマやスペースで区切って適切な番号をそれぞれリストし、HTTPSを有効にするドメインを選択してから、ENTERをクリックします。

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

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

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

次に、HTTPトラフィックをHTTPSにリダイレクトするかどうかを選択するように求められます。 実際には、暗号化されていないチャネル(HTTP)を介して誰かがWebサイトにアクセスすると、そのWebサイトのHTTPSアドレスに自動的にリダイレクトされます。 2を選択してリダイレクトを有効にするか、HTTPとHTTPSの両方をWebサイトにアクセスする別々の方法として保持する場合は1を選択します。

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

この手順の後、Certbotの構成が完了し、新しい証明書、生成されたファイルの場所、および証明書の信頼性を分析する外部ツールを使用して構成をテストする方法についての最終的なコメントが表示されます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT 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 2020-07-27. 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

これで、証明書がインストールされ、Apacheの構成にロードされます。 https://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 通常、アドレスバーに鍵のアイコンを含めることで、サイトが適切に保護されていることを示す必要があります。

SSL Labsサーバーテストを使用して、証明書のグレードを確認し、外部サービスの観点から証明書に関する詳細情報を取得できます。

次の最後のステップでは、Certbotの自動更新機能をテストします。これにより、有効期限が切れる前に証明書が自動的に更新されることが保証されます。

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

Let's Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するとともに、誤用された証明書や盗まれたキーが後でではなく早く期限切れになるようにするためです。

インストールしたcertbotパッケージは、certbot.timerと呼ばれるsystemctlサービスによって管理される/etc/cron.dへの更新スクリプトを含めることによって更新を処理します。 このスクリプトは1日2回実行され、有効期限が切れてから30日以内の証明書は自動的に更新されます。

このサービスのステータスをチェックし、アクティブで実行中であることを確認するには、次を使用できます。

sudo systemctl status certbot.timer

次のような出力が得られます。

Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
    Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
   Triggers: ● certbot.service

Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

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

sudo certbot renew --dry-run

エラーが表示されない場合は、すべて設定されています。 必要に応じて、Certbotは証明書を更新し、Apacheをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let's Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づいたときに警告します。

結論

このチュートリアルでは、Let'sEncryptクライアントcertbotをインストールし、ドメインのSSL証明書を構成してインストールし、Certbotの自動更新サービスがsystemctl内でアクティブであることを確認しました。 Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。