ウェブサイト検索

CertbotコマンドでLet's Encrypt SSLを管理する方法


誰かがあなたのウェブサイトを訪れると、その人のブラウザとあなたのサーバーは情報をやり取りします。暗号化がなければ、このやり取りは平文で行われるため、ネットワークを監視している誰でも、ログイン認証情報、個人的なメッセージ、支払い情報など、すべてを読み取ることができます。

SSL証明書は、HTTPSを有効にすることでこれを解決します。HTTPSは、ブラウザとサーバー間のすべてのデータを暗号化します。ブラウザのアドレスバーにある小さな錠前アイコン?それは接続が暗号化され、安全であることを示しています。

何年もの間、SSL証明書を取得するということは、証明書認証局に毎年支払いをし、面倒な手動設定プロセスを経ることを意味していました。するとLet's Encryptが登場し、すべてを変えました。これは無料で自動化された証明書認証局で、ただ一つの目的のために存在します。それは、ウェブ全体で暗号化接続を標準にすることです。

しかし、ここで重要なのは、Let's Encrypt の証明書は無料である一方で、90日ごとに期限が切れるということです。更新を手動で管理するのは悪夢のような作業になるでしょう。だからこそ、Certbot が存在するのです。これは、Let's Encrypt の証明書の取得、インストール、更新のプロセス全体を自動化するコマンドラインツールです。

このガイドでは、Certbot の使用に関して知っておくべきすべてのことを、最初の証明書のインストールから更新プロセスの理解まで順を追って説明します。Linux サーバーを始めたばかりの方でも理解できるように解説しています。

LinuxにCertbotをインストールする

certbot のインストールプロセスは、Linux のディストリビューションによって若干異なりますが、どの環境でも簡単です。

Debianベースのシステムの場合、まずシステムが最新であることを確認したいでしょう:

sudo apt update
sudo apt upgrade

次に、使用している場合は、ウェブサーバー用のプラグインと一緒にCertbotをインストールします。nginx。

sudo apt install certbot python3-certbot-nginx

または、Apache を実行している場合。

sudo apt install certbot python3-certbot-apache

RHELベースのディストリビューションの場合、プロセスは似ていますが、代わりにdnfを使用します:

sudo dnf install certbot python3-certbot-nginx    # For Nginx
sudo dnf install certbot python3-certbot-apache   # For Apache

ウェブサーバープラグインは重要です。なぜなら、これらはCertbotがサーバーを自動的にHTTPS用に設定できるようにするからです。これがなければ、構成ファイルを手動で編集する必要があり、まさにCertbotがなくすために設計された面倒な作業となります。

初めてのSSL証明書を取得する

Certbot がインストールされると、証明書を取得するのは非常に簡単です。

<strong>Nginx</strong>サーバーの場合、コマンドは次のようになります:

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

もしApacheを使用している場合、コマンドはほとんど同じです:

sudo certbot --apache -d example.com -d www.example.com

上記のコマンドを初めて実行すると、Certbot はあなたのメールアドレスを尋ねます。これは重要です。なぜなら、過去には Let's Encrypt がこのメールを通じて有効期限通知を送っていましたが、データ保持を最小限にするためにそのサービスを中止したからです。そのため、信頼できる自動更新プロセスに依存するか、独自にサードパーティの有効期限通知監視を設定する必要があります。

その後、Certbot が作業を行います:Let’s Encrypt と通信し、あなたがドメインを管理していることを証明し、証明書を取得し、Nginx の設定を変更して HTTPS を使用するようにします。

SSL証明書の更新を理解する

前に述べたように、Let’s Encrypt の証明書は90日ごとに期限切れになるため、自動更新プロセスを設定することが不可欠です。systemdタイマーは、1日に2回、期限が近づいている証明書を確認することでこれを処理できます。証明書の残り期間が30日未満になると、Certbot は手動での操作を必要とせず自動的に更新します。

実際に何も更新せずに、この更新プロセスをテストすることができます:

sudo certbot renew --dry-run

--dry-run フラグは更新プロセスをシミュレートします。これは、すべてが正しく設定されていることを確認するのに便利です。コマンドが成功した場合、自動更新も時が来れば問題なく動作することを信頼できます。

証明書の有効期限を確認し、更新状況を確認するには:

sudo certbot certificates

タイマーの状態を確認して、アクティブであることを確認できます:

sudo systemctl status certbot.timer

複数のSSL証明書の管理

サーバーにドメインやサブドメインを追加するにつれて、複数の証明書が蓄積されますが、Certbot はこれを驚くほど管理しやすくします。

既存の証明書に新しいドメインを追加するには:

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

異なるドメインのために完全に別の証明書を取得したい場合は:

sudo certbot --nginx -d another-domain.com -d www.another-domain.com

各証明書は独立して管理されますが、すべての更新は同じ更新プロセスを通じて自動的に行われます。

SSL証明書を手動で更新する

自動更新は Certbot を使用する主な目的ですが、手動で更新を強制したい場合もあります。構成を変更してテストしたい場合や、問題をトラブルシューティングしている場合などです。

更新が必要なすべての証明書を更新するには、次のコマンドを実行してください。このコマンドは、期限が30日以内の証明書のみを更新し、残りの期間が30日以上の証明書は更新されません。

sudo certbot renew

有効期限に関係なく更新を強制する必要がある場合:

sudo certbot renew --force-renewal

SSL証明書の表示

時々、インストールされている証明書の詳細、例えば各証明書の名前、カバーするドメイン、有効期限、証明書と秘密鍵が保存されているファイルパスを確認する必要があります。

sudo certbot certificates

実際の証明書ファイルは /etc/letsencrypt/live/ に存在し、各証明書ごとに別々のディレクトリがあります。その中には、アーカイブディレクトリでバージョン管理されている実際の証明書へのシンボリックリンクがあります。

SSL証明書の取り消し

証明書の秘密鍵が漏洩した場合、または証明書が不要になった場合は、証明書を失効させるべきです。これにより、証明書がまだ有効期限内であっても、ブラウザやその他のクライアントにその証明書を信頼すべきではないことを即座に通知できます。

証明書を取り消すには:

sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem

取り消したい証明書ファイルのパスを指定する必要があります。

sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --delete-after-revoke

CertbotはLet’s Encryptと通信して証明書を取り消し、必要に応じてローカルファイルを削除します。

SSL証明書を失効させずに削除する

時々、証明書を取り消さずにシステムから削除したいことがあります。たとえば、ドメインを別のサーバーに移動した場合や、誤って証明書を取得して使わなかった場合などです。

sudo certbot delete --cert-name example.com

これにより、システムから証明書ファイルが削除されますが、Let’s Encrypt で証明書が失効するわけではありません。証明書が他の場所で使用されている場合は有効のままですが、Certbot はこのサーバーでの管理を停止します。

Certbot の証明書更新の問題を修正する

Certbot の自動化を利用していても、時々問題が発生することがあります。ここでは、最も一般的な問題とその解決方法を紹介します。

証明書の更新に失敗した場合は、ウェブサーバーが稼働しており、インターネットからアクセス可能であることを確認してください。これは、Let’s Encrypt がドメイン所有権を確認するためにポート 80 または 443 であなたのサーバーに接続する必要があるためです。

特定のエラーメッセージについては、更新ログを確認できます:

sudo cat /var/log/letsencrypt/letsencrypt.log

これらのログは、Certbot が正確に何を試み、どこで失敗したかを示しており、通常は問題の原因を直接示しています。

もしウェブサーバーの設定が何らかの理由で壊れてしまった場合、Certbot は元の設定を復元できることがあります:

sudo certbot --nginx rollback

これはCertbotによって行われた変更を元に戻しますが、自動設定オプションを使用している場合はほとんど必要ありません。

レート制限の理解

Let’s Encrypt には不正利用を防ぐためのレート制限があります。通常の使用では決して制限に達することはありませんが、存在を知っておく価値はあります。登録ドメインごとに週に最大50枚の証明書をリクエストでき、各証明書は最大100個のサブドメインをカバーできます。

テストや学習をしている場合は、--dry-run フラグを多用してください。これは実際に証明書を要求せずにプロセス全体をシミュレートするため、レート制限には影響しません。

sudo certbot renew --dry-run

Certbotを更新したままにする

他のソフトウェアと同様に、Certbot はバグを修正し機能を追加するアップデートを受けるため、通常のパッケージマネージャーを通じて certbot を更新し続けることが重要です:

sudo apt update
sudo apt upgrade certbot
基本的な使用を超えて

基本的な証明書管理に慣れたら、Certbot は探る価値のある高度なオプションを提供します。HTTP 検証の代わりに DNS 検証を使用することができ、これによりポート 80 や 443 で公開されていないサーバーでも証明書を取得できます。

証明書が更新される際にスクリプトを実行するカスタム更新フックを設定できます。これはサービスを再起動したり設定を更新したりするのに便利です。すべてのサブドメインを一度にカバーするワイルドカード証明書を取得することも可能です。

しかし、ほとんどの使用ケースでは、私たちが説明した単純なコマンドで必要なことはすべて対応できます。Certbotは、以前は複雑でエラーが起きやすいプロセスを、いくつかのシンプルなコマンドに簡略化し、確実に動作するようにします。