序章

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

このチュートリアルでは、Certbotを使用してDebian 10でApache用の無料のSSL証明書を取得し、証明書を自動的に更新するように設定します。

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

前提条件

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

  • このDebian10チュートリアルの初期サーバーセットアップに従ってセットアップされた1台のDebian10サーバー。これには、sudo特権を持つ非rootユーザーとファイアウォールが含まれます。

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

  • 次の両方のDNSレコードがサーバー用に設定されています。 これらを設定するには、ドメインを追加するためのこれらの手順、次にDNSレコードを作成するためのこれらの手順に従うことができます。

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

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

Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。

:現在、CertbotはデフォルトでDebianソフトウェアリポジトリから利用できませんが、/ etc / apt/sources.listファイルのバスターバックポートリポジトリを構成することは可能です。 APTを使用してCertbotソフトウェアのバックポートをインストールできるようにします。

ただし、バックポートは、Debianのテストから再コンパイルされたパッケージであり、安定したDebianディストリビューションで実行するために再コンパイルされた不安定なリポジトリです。 これらのパッケージは定期的にテストされておらず、常に最新であるとは限りません。 したがって、Certbotバックポートはバージョン 0.31 をインストールしますが、この記事の執筆時点での現在のバージョンは1.09です。 これらのバージョンのCertbotの顕著な違いの1つは、バージョン 0.31のデフォルト設定でTLSv1.0とTLSv1.1が有効になることです。これは、ほとんどの主要なWebブラウザーで非推奨となった2つのセキュリティプロトコルであり、これらを有効にします。プロトコルはセキュリティの脆弱性をもたらす可能性があります。 このデフォルトを変更することは可能ですが、変更すると、Certbotを非常に便利にする自動更新が機能しなくなる可能性があります。

より新しいバージョンのCertbotがDebianAPTリポジトリから入手できるようになるまで、このチュートリアルはCertbotドキュメントの推奨事項に従ってバージョン1.09snappyパッケージをインストールします。 snapsと呼ばれる形式でパッケージをインストールするLinuxシステム用に開発されたマネージャー。

CertbotをDebianにスナップとしてインストールするには、最初にsnapdをサーバーにインストールする必要があります。 snapdは、スナップのインストール、使用、および管理に必要なデーモンです。 snapdパッケージをインストールすると、サーバーにsnapコマンドもインストールされます。

snapdをインストールするには、最近行っていない場合は、ローカルパッケージインデックスを更新します。

  1. sudo apt update

次に、snapdパッケージをインストールします。

  1. sudo apt install snapd

このコマンドを実行すると、snapdとその依存関係をインストールするかどうかを確認するメッセージが表示されます。 Yを押してから、ENTERを押します。

次に、snapコマンドを使用して、coreスナップをインストールします。 これにより、Certbotスナップなど、インストールするスナップに必要ないくつかの依存関係がサーバーにインストールされます。

  1. sudo snap install core

次に、coreスナップを更新します。 そうすることで、snapdの最新バージョンとその依存関係がインストールされていることを確認できます。

  1. sudo snap refresh core

その後、次のコマンドでcertbotスナップをインストールできます。

スナップは、システムからさまざまな程度の分離を提供する3つの閉じ込めレベルのいずれかの下にインストールできることに注意してください。 たとえば、ほとんどのスナップはデフォルトで--strictの制限レベルでインストールされるため、これらのプログラムはシステムのファイルやネットワークにアクセスできません。 証明書を正しく設定するには、Certbotが特定の構成ファイルを編集できるようにする必要があるため、このコマンドには--classicオプションが含まれています。 この制限レベルにより、その下にインストールされたスナップは、従来のパッケージと同じシステムリソースへのアクセスが可能になります。

  1. sudo snap install --classic certbot

このインストールプロセスでは、certbot実行可能ファイルが/snap/bin/ディレクトリにインストールされます。 /usr/bin/ディレクトリにこのファイルへのシンボリックリンクを作成して、システムのどこからでもcertbotコマンドを実行できるようにします。

  1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

これでCertbotを使用する準備が整いましたが、ApacheのSSLを構成するには、Apacheが正しく構成されていることを確認する必要があります。

ステップ2—SSL証明書を設定する

Certbotは、SSLを自動的に構成するために、Apache構成で正しい仮想ホストを見つけることができる必要があります。 具体的には、証明書を要求するドメインに一致するServerNameディレクティブを探すことによってこれを行います。

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

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

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

既存のServerName行を見つけます。 your_domainの代わりに独自のドメイン名を使用すると、次のようになります。

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

まだ更新されていない場合は、ドメイン名を指すようにServerNameディレクティブを更新します。 次に、ファイルを保存して、エディターを終了します。 nanoを使用した場合は、CTRL + XYENTERの順に押してください。

次に、構成編集の構文を確認します。

  1. sudo apache2ctl configtest

構文エラーがない場合は、出力に次のように表示されます。

Output
. . . Syntax OK

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

  1. sudo systemctl reload apache2

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

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

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

前提条件ガイドで推奨されているように、ufwファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸い、Debianにインストールすると、ufwには、HTTPおよびHTTPSトラフィックのファイアウォールルールを変更するプロセスを簡素化するのに役立ついくつかのプロファイルがパッケージ化されています。

次のように入力すると、現在の設定を確認できます。

  1. sudo ufw status

Debian 10 にApacheをインストールする方法に関するガイドのステップ2に従った場合、このコマンドの出力は次のようになり、WebサーバーへのHTTPトラフィックのみが許可されることを示します。

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

さらにHTTPSトラフィックを取り込むには、「WWW Full」プロファイルを許可し、冗長な「WWW」プロファイルの許容値を削除します。

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

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

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere WWW Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW Full (v6) ALLOW Anywhere (v6)

次に、Certbotを実行して、証明書を取得しましょう。

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

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

  1. sudo certbot --apache -d your_domain -d www.your_domain

これは、--apacheプラグインでcertbotを実行し、-dを使用して、証明書を有効にする名前を指定します。

certbotを初めて実行する場合は、メールアドレスを入力して利用規約に同意するよう求められます。 さらに、電子メールアドレスを Electronic Frontier Foundation と共有するかどうかを尋ねられます。これは、デジタル権利を擁護し、Certbotのメーカーでもある非営利団体です。 Yと入力してメールアドレスを共有するか、Nと入力して拒否してください。

その後、certbotはLet’sEncryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。

それが成功すると、構成が自動的に更新され、Apacheがリロードして新しい設定を取得します。 certbotは、プロセスが成功し、証明書が保存されている場所を通知するメッセージで終了します。

Output
. . . 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 2021-01-20. 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

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

更新プロセスをテストして終了しましょう。

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

Let’sEncrypt証明書は90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたcertbotパッケージは、/etc/cron.dに更新スクリプトを追加することで、これを処理します。 このスクリプトは1日2回実行され、有効期限が30日以内の証明書を自動的に更新します。

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

  1. sudo certbot renew --dry-run

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

結論

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