序章

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の紹介に従ってください。

    • とのAレコード your_domain サーバーのパブリックIPアドレスを指します。
    • とのAレコード www.your_domain サーバーのパブリックIPアドレスを指します。
  • Ubuntu20.04にApacheをインストールする方法に従ってApacheをインストールします。 ドメインに仮想ホストファイルがあることを確認してください。 このチュートリアルでは、 /etc/apache2/sites-available/your_domain.conf 例として。

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

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

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

  1. sudo apt install certbot python3-certbot-apache

を押してインストールを確認するように求められます Y、 それから ENTER.

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

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

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

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

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

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

既存のものを探す ServerNameServerAlias 行。 これらは次のようになります。

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

すでにお持ちの場合 ServerNameServerAlias このように設定すると、テキストエディタを終了して、次の手順に進むことができます。 使用している場合 nano、入力して終了できます CTRL+X、 それから YENTER 確認するために。

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

  1. sudo apache2ctl configtest

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

  1. sudo systemctl reload apache2

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

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

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

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

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

  1. sudo ufw status

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

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

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

  1. sudo ufw allow 'Apache Full'
  2. sudo ufw delete allow 'Apache'

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

  1. sudo ufw status
Output
Status: 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の再構成と、必要に応じて構成の再ロードを処理します。 このプラグインを使用するには、次のように入力します。

  1. sudo certbot --apache

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

Output
Saving 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仮想ホスト構成から自動的に取得されます。そのため、正しいドメイン名を使用していることを確認することが重要です。 ServerNameServerAlias 仮想ホストで構成された設定。 リストされているすべてのドメイン名に対して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 リダイレクトを有効にするには、または 1 Webサイトにアクセスするための別々の方法としてHTTPとHTTPSの両方を保持したい場合。

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

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

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

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

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

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

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

  1. 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:

  1. sudo certbot renew --dry-run

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

結論

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