Certbotスタンドアロンモードを使用して、Debian 10でSSL証明書を暗号化して取得する方法

前書き

Let’s Encryptは、自動化されたAPIを介して無料のSSL証明書を提供するサービスです。 最も人気のあるLet’s Encryptクライアントは、https://www.eff.org/ [EFF]のhttps://certbot.eff.org/[Certbot]クライアントです。

Certbotは、ドメインを検証し、証明書を取得し、https://httpd.apache.org/ [Apache]およびhttps://www.nginx.com/[Nginx]を自動的に構成するさまざまな方法を提供します。 このチュートリアルでは、Certbotのhttps://certbot.eff.org/docs/using.html#standalone[standalone mode]と、それを使用してメールサーバーやメッセージなどの他のタイプのサービスを保護する方法について説明します。 RabbitMQのようなブローカー。

SSL構成の詳細については説明しませんが、完了すると、自動的に更新される有効な証明書が得られます。 さらに、サービスのリロードを自動化して、更新された証明書を取得できます。

前提条件

このチュートリアルを開始する前に、次のものが必要です。

  • Debian 10サーバー、 `+ sudo +`特権を持つ非ルートユーザー、およびhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10で説明されている基本的なファイアウォール[このDebian 10サーバーセットアップチュートリアル]。

  • サーバーを指すドメイン名。これは、DigitalOceanでDNSレコードを作成する際に、このhttps://www.digitalocean.com/docs/networking/dns/[documentation]に従って達成できます。

  • ポート + 80 + または `+ 443 +`はサーバーで*未使用*である必要があります。 保護しようとしているサービスが、両方のポートを占有するWebサーバーを備えたマシン上にある場合、Certbotのhttps://certbot.eff.org/docs/usingなどの別のモードを使用する必要があります。 html#webroot [webroot mode]またはDNSベースのチャレンジモード。

ステップ1-Certbotのインストール

Debian 10のデフォルトリポジトリにはCertbotクライアントが含まれており、基本的な使用に十分な最新のものである必要があります。 DNSベースのチャレンジを行うか、他の新しいCertbot機能を使用する必要がある場合は、代わりにhttps://certbot.eff.org/lets-encrypt/debianstretch-otherの指示に従って `+ buster-backports +`リポジトリからインストールする必要があります[ Certbotの公式ドキュメント]。

パッケージリストを更新します。

sudo apt update

`+ apt `を使用して ` certbot +`パッケージをインストールします。

sudo apt install certbot

`+ certbot +`にバージョン番号を出力するよう求めることでインストールをテストできます:

certbot --version
Outputcertbot

Certbotがインストールされたので、それを実行して証明書を取得しましょう。

ステップ2-Certbotの実行

Certbotは、ドメインを制御していることを証明するために、Let’s Encrypt APIによって発行された暗号化の課題に答える必要があります。 ポート + 80 +(HTTP)または + 443 +(HTTPS)を使用してこれを実現します。 ファイアウォールで適切なポートを開きます。

sudo ufw allow

使用しているポートの場合は、上記の「443」に置き換えてください。 `+ ufw +`は、ルールが追加されたことの確認を出力します:

OutputRule added
Rule added (v6)

これで、Certbotを実行して証明書を取得できます。 `-standalone +`オプションを使用して、Certbotに独自の組み込みWebサーバーを使用してチャレンジを処理するように指示します。 「-preferred-challenges 」オプションは、ポート「+80」またはポート「443」を使用するようにCertbotに指示します。 ポート「80」を使用している場合は、「-preferred-challenges http +」オプションを使用します。 ポート「+443」には、「-preferred-challenges tls-sni +」を使用します。 最後に、「-d 」フラグを使用して、証明書を要求するドメインを指定します。 複数の ` -d +`オプションを追加して、1つの証明書で複数のドメインをカバーできます。

デモンストレーションには「+-preferred-challenges http +」オプションを使用しますが、ユースケースに合ったオプションを使用する必要があります。 希望するオプションを使用して次のコマンドを実行し、証明書を取得します。

sudo certbot certonly --standalone --preferred-challenges  -d

コマンドを実行すると、メールアドレスを入力し、利用規約に同意するよう求められます。 そうすると、プロセスが成功したことと証明書の保存場所を示すメッセージが表示されます。

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live//fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live//privkey.pem
  Your cert will expire on 2019-08-28. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. 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

証明書を取得しました。 ダウンロードしたものと、ソフトウェアでファイルを使用する方法を見てみましょう。

ステップ3-アプリケーションの構成

アプリケーションごとに異なる要件と設定オプションがあるため、アプリケーションをSSL用に構成することはこの記事の範囲外ですが、Certbotがダウンロードしたものを見てみましょう。 キーと証明書を保持するディレクトリをリストするには、 `+ ls +`を使用します。

sudo ls /etc/letsencrypt/live/

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

Outputcert.pem  chain.pem  fullchain.pem  privkey.pem  README

このディレクトリの `+ README +`ファイルには、これらの各ファイルに関する詳細情報が含まれています。 ほとんどの場合、これらのファイルのうち2つだけが必要です。

  • + privkey.pem +:これは証明書の秘密鍵です。 これは安全かつ秘密に保つ必要があります。そのため、ほとんどの `+ / etc / letsencrypt `ディレクトリには非常に制限された権限があり、* root *ユーザーのみがアクセスできます。 ほとんどのソフトウェア設定では、これを「 ssl-certificate-key 」または「 ssl-certificate-key-file +」と呼びます。

  • + fullchain.pem +:これは、すべての中間証明書にバンドルされている証明書です。 ほとんどのソフトウェアは、実際の証明書にこのファイルを使用し、設定で「+ ssl-certificate +」などの名前でそれを参照します。

存在する他のファイルの詳細については、Certbotドキュメントのhttps://certbot.eff.org/docs/using.html#where-are-my-certificates [私の証明書はどこですか?]セクションを参照してください。

一部のソフトウェアでは、他の形式または場所の証明書、または他のユーザー権限が必要な証明書が必要になります。 `+ letsencrypt +`ディレクトリにすべてを残し、そこにあるパーミッションを変更しないことをお勧めします(とにかく更新は許可によって上書きされます)が、それがオプションではない場合もあります。 その場合、ファイルを移動し、必要に応じて権限を変更するスクリプトを作成する必要があります。 このスクリプトは、Certbotが証明書を更新するたびに実行する必要があります。これについては次に説明します。

手順4-Certbotの自動更新の処理

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

証明書が自動的に更新されるため、更新後に他のタスクを実行する方法が必要です。 新しい証明書を取得するには、少なくともサーバーを再起動またはリロードする必要があります。手順3で説明したように、使用しているソフトウェアで動作するように何らかの方法で証明書ファイルを操作する必要がある場合があります これは、Certbotのhttps://certbot.eff.org/docs/api/hooks.html?highlight=renew_hook#certbot.hooks.renew_hook [+ renew_hook +]オプションの目的です。

`+ renew_hook +`を追加するには、Certbotの更新設定ファイルを更新する必要があります。 Certbotは、最初に証明書を取得した方法のすべての詳細を記憶しており、更新時に同じオプションで実行されます。 フックを追加するだけです。 好みのエディターで構成ファイルを開きます。

sudo nano /etc/letsencrypt/renewal/.conf

テキストファイルがいくつかの構成オプションで開きます。 最後の行にフックを追加します。 この場合、 `+ rabbitmq +`サービスをリロードする例を使用しています:

/etc/letsencrypt/renewal/your_domain.conf

renew_hook =

上記のコマンドを、サーバーのリロードやカスタムファイル変更スクリプトの実行に必要なものに更新します。 Debianでは、通常、 `+ systemctl +`を使用してサービスをリロードします。

ファイルを保存して閉じ、Certbotのドライランを実行して、構文に問題がないことを確認します。

sudo certbot renew --dry-run

エラーが表示されなければ、設定は完了です。 Certbotは、必要に応じて更新し、新しいファイルを使用してサービスを取得するために必要なコマンドを実行するように設定されています。

結論

このチュートリアルでは、Certbot Let’s Encryptクライアントをインストールし、スタンドアロンモードを使用してSSL証明書をダウンロードし、更新フックを使用して自動更新を有効にしました。 これにより、一般的なウェブサーバー以外のサービスで証明書を暗号化して使用することができます。

詳細については、https://certbot.eff.org/docs/ [Certbotのドキュメント]を参照してください。

Related