序章

Let’s Encrypt は、自動化されたAPIを介して無料のSSL証明書を提供するサービスです。 最も人気のあるLet’sEncryptクライアントは、EFFCertbotクライアントです。

Certbotは、ドメインを検証し、証明書を取得し、ApacheNginxを自動的に構成するさまざまな方法を提供します。 このチュートリアルでは、Certbotのスタンドアロンモードと、それを使用してメールサーバーやRabbitMQなどのメッセージブローカーなどの他のタイプのサービスを保護する方法について説明します。

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

前提条件

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

  • Debian 10サーバー、root以外のユーザー sudo このDebian10サーバーセットアップチュートリアルで詳しく説明されているように、特権と基本的なファイアウォール。
  • サーバーを指すドメイン名。これは、DigitalOceanでのDNSレコードの作成に関するこのドキュメントに従うことで実現できます。
  • ポート 80 または 443 サーバー上で未使用である必要があります。 保護しようとしているサービスが、これらのポートの両方を占有するWebサーバーを備えたマシン上にある場合は、CertbotのWebルートモードやDNSベースのチャレンジモードなどの別のモードを使用する必要があります。 。

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

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

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

  1. sudo apt update

使用する apt インストールするには certbot パッケージ:

  1. sudo apt install certbot

あなたは尋ねることによってあなたのインストールをテストすることができます certbot バージョン番号を出力するには:

  1. certbot --version
Output
certbot 0.31.0

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

ステップ2—Certbotを実行する

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

  1. sudo ufw allow 80

代わりの 443 それがあなたが使用しているポートである場合は上記。 ufw ルールが追加されたことの確認を出力します。

Output
Rule added Rule added (v6)

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

を使用します --preferred-challenges http 実証するためのオプションですが、ユースケースに適したオプションを使用する必要があります。 好みのオプションを指定して次のコマンドを実行し、証明書を取得します。

  1. sudo certbot certonly --standalone --preferred-challenges http -d your_domain

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

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 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 キーと証明書を保持するディレクトリを一覧表示するには、次の手順に従います。

  1. sudo ls /etc/letsencrypt/live/your_domain

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

Output
cert.pem chain.pem fullchain.pem privkey.pem README

The README このディレクトリのファイルには、これらの各ファイルに関する詳細情報があります。 ほとんどの場合、必要なファイルは次の2つだけです。

  • privkey.pem:これは証明書の秘密鍵です。 これは安全かつ秘密に保つ必要があります。そのため、ほとんどの /etc/letsencrypt ディレクトリには非常に制限された権限があり、rootユーザーのみがアクセスできます。 ほとんどのソフトウェア構成では、これを次のように参照します。 ssl-certificate-key また ssl-certificate-key-file.
  • fullchain.pem:これは私たちの証明書であり、すべての中間証明書にバンドルされています。 ほとんどのソフトウェアは、このファイルを実際の証明書に使用し、構成で次のような名前で参照します。 ssl-certificate.

存在する他のファイルの詳細については、Certbotドキュメントの証明書はどこにありますか?セクションを参照してください。

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

ステップ4—Certbotの自動更新の処理

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

証明書は自動的に更新されますが、更新後に他のタスクを実行する方法が必要です。 新しい証明書を取得するには、少なくともサーバーを再起動またはリロードする必要があります。手順3で説明したように、使用しているソフトウェアで証明書ファイルを機能させるには、何らかの方法で証明書ファイルを操作する必要があります。 これがCertbotのrenew_hookオプションの目的です。

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

  1. sudo nano /etc/letsencrypt/renewal/your_domain.conf

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

/etc/letsencrypt/renewal/your_domain.conf
renew_hook = systemctl reload rabbitmq

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

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

  1. sudo certbot renew --dry-run

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

結論

このチュートリアルでは、Certbot Let’s Encryptクライアントをインストールし、スタンドアロンモードを使用してSSL証明書をダウンロードし、更新フックを使用して自動更新を有効にしました。 これにより、通常のWebサーバー以外のサービスでLet’sEncrypt証明書を使用するための良いスタートを切ることができます。

詳細については、Certbotのドキュメントを参照してください。