序章

Let’s Encrypt は、 ACME(自動証明書管理環境)プロトコルを使用して、互換性のあるクライアントに無料のTLS/SSL証明書を提供するオープンで自動化された認証局です。 これらの証明書は、Webサーバーとユーザー間の通信を暗号化するために使用できます。 さまざまなプログラミング言語で記述された数十のクライアントが利用可能であり、一般的な管理ツール、サービス、およびサーバーとの多くの統合があります。

最も人気のあるACMEクライアントであるCertbotは、現在 Electronic FrontierFoundationによって開発されています。 ドメインの所有権の確認と証明書の取得に加えて、CertbotはApacheNginxの両方のWebサーバーでTLS/SSLを自動的に構成できます。

このチュートリアルでは、認証局とLet’s Encryptのしくみについて簡単に説明してから、いくつかの一般的なACMEクライアントを確認します。

認証局とは何ですか?

認証局(CA)は、TLS / SSL証明書に暗号で署名して、その信頼性を保証するエンティティです。 ブラウザとオペレーティングシステムには、サイト証明書の検証に使用する信頼できるCAのリストがあります。

最近まで、ほとんどのCAは、検証および署名サービスに料金を請求する商業活動でした。 Let’s Encryptは、手順を完全に自動化し、必要なインフラストラクチャに資金を提供するためにスポンサーシップと寄付に依存することにより、このプロセスをユーザーが無料で利用できるようにしました。

証明書とさまざまな種類の認証局の詳細については、「 Let’s Encrypt、商用およびプライベートの認証局、および自己署名SSL証明書の比較」を参照してください。

次に、Let’sEncryptが自動ドメイン検証を行う方法を見ていきます。

Let’sEncryptのしくみ

Let’s EncryptのACMEプロトコルは、クライアントがサーバーと通信して証明書を要求し、ドメインの所有権を確認し、証明書をダウンロードする方法を定義します。 現在、公式のIETF標準になる過程にあります。

Let’s Encryptは、 domain-validated 証明書を提供します。つまり、証明書要求が実際にドメインを管理している人からのものであることを確認する必要があります。 これを行うには、クライアントに一意のトークンを送信し、WebまたはDNS要求を行って、そのトークンから派生したキーを取得します。

たとえば、HTTPベースのチャレンジでは、クライアントは一意のトークンとアカウントトークンからキーを計算し、その結果をWebサーバーが提供するファイルに配置します。 Let’s Encryptサーバーは、http://example.com/.well-known/acme-challenge/tokenでファイルを取得します。 キーが正しい場合、クライアントはexample.comのリソースを制御できることを証明し、サーバーは証明書に署名して返します。

ACMEプロトコルは、クライアントがドメインの所有権を証明するために使用できる複数の課題を定義します。 HTTPSチャレンジはHTTPに似ていますが、テキストファイルの代わりに、クライアントが含まれているキーを使用して自己署名証明書をプロビジョニングする点が異なります。 DNSチャレンジは、DNSTXTレコードでキーを探します。

CertbotLet’sEncryptクライアント

Certbotは、これまでで最も人気のあるLet’sEncryptクライアントです。 ほとんどの主要なLinuxディストリビューションに含まれており、ApacheおよびNginxの便利な自動構成機能が含まれています。 インストールすると、証明書のフェッチとApache構成の更新は次のように実行できます。

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

Certbotはいくつかの質問をし、チャレンジを実行し、証明書をダウンロードし、Apache構成を更新し、サーバーをリロードします。 これで、Webブラウザでhttps://www.example.comに移動できるようになります。 証明書が有効であり、接続が暗号化されていることを示す緑色のロックが表示されます。

Let’s Encryptの証明書は90日間のみ有効であるため、自動更新プロセスを設定することが重要です。 次のコマンドは、マシン上のすべての証明書を更新します。

  1. sudo certbot renew

上記のコマンドをcrontabに入れて毎日実行すると、証明書は有効期限が切れる30日前に自動的に更新されます。 --apacheまたは--nginxオプションを使用して証明書が最初に作成された場合、更新が成功すると、Certbotはサーバーをリロードします。

cronとcrontabの詳細については、チュートリアル「Cronを使用してタスクを自動化する方法」を参照してください。

他のクライアント

ACMEプロトコルはオープンで十分に文書化されているため、多くの代替クライアントが開発されています。 Let’s Encryptは、ACMEクライアントのリストをWebサイトに保持しています。 他のほとんどのクライアントには、Certbotの自動Webサーバー構成機能はありませんが、魅力的な他の機能があります。

  • シェルスクリプト、Go、Node.jsなど、ほとんどすべてのプログラミング言語で記述されたクライアントがあります。 これは、制約のある環境で証明書を作成していて、Pythonやその他のCertbotの依存関係を含めたくない場合に重要になる可能性があります
  • 一部のクライアントは、root特権なしで実行できます。 一般に、可能な限り最小限の特権コードを実行することをお勧めします
  • 多くのクライアントは、DNSプロバイダーのAPIを使用して適切なTXTレコードを自動的に作成することにより、DNSベースのチャレンジを自動化できます。 DNSチャレンジは、公的にアクセスできないWebサーバーの暗号化など、いくつかのトリッキーなユースケースを可能にします。
  • 一部のクライアントは、実際にはWebサーバー、リバースプロキシ、またはロードバランサーに統合されているため、構成と展開が非常に簡単になります。

より人気のあるクライアントのいくつかは次のとおりです。

  • lego :Goで記述されたlegoは、1ファイルのバイナリインストールであり、DNSチャレンジを使用するときに多くのDNSプロバイダーをサポートします
  • acme.sh acme.sh は、非特権モードで実行でき、30以上のDNSプロバイダーと対話できる単純なシェルスクリプトです。
  • Caddy :Caddyは、Let’sEncryptのサポートが組み込まれたGoで記述された完全なWebサーバーです。

さらに多くのクライアントが利用可能であり、他の多くのサーバーやサービスは、Let’sEncryptのサポートを統合することでTLS/SSLセットアップを自動化しています。

結論

Let’s Encryptの動作の基本について説明し、利用可能なクライアントソフトウェアのいくつかについて説明しました。 Let’s Encryptをさまざまなソフトウェアで使用するためのより詳細な手順が必要な場合は、次のチュートリアルから始めることをお勧めします。