序章

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

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

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

前提条件

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

  • root以外のユーザーでセットアップされた1つのUbuntu22.04サーバー sudo 管理者権限とファイアウォールが有効になっています。 これを設定するには、Ubuntu22.04チュートリアルの初期サーバー設定に従います。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例としてyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。

  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。

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

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

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

まず、ローカルパッケージインデックスを更新します。

  1. sudo apt update

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トラフィックを許可するには、「ApacheFull」プロファイルを許可します。

  1. sudo ufw allow 'Apache Full'

次に、冗長な「Apache」プロファイルを削除します。

  1. 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 Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

有効なメールアドレスを入力したら、を押します ENTER 次のステップに進みます。 次に、Let’sEncryptの利用規約に同意するかどうかを確認するよう求められます。 を押すと確認できます Y その後 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

次に、ニュースやその他の情報を受け取るために、電子メールを電子フロンティア財団と共有するかどうかを尋ねられます。 あなたが彼らのコンテンツを購読したくない場合は、 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): 

この手順の後、Certbotの構成が完了し、新しい証明書と生成されたファイルの場所に関する最終的なコメントが表示されます。

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

更新プロセスをテストするために、ドライランを実行できます。 certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

エラーが発生しなければ、準備は完了です。 必要に応じて、Certbotは証明書を更新し、Apacheをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づくと警告を発します。

結論

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