Let’s Encryptの紹介

前書き

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

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

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

認証局とは何ですか?

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

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

証明書とさまざまな種類の認証機関の詳細については、「https://www.digitalocean.com/community/tutorials/a-comparison-of-let-s-encrypt-commercial-and-private-certificate」をご覧ください。 -authorities-and-self-signed-ssl-certificates [Let's Encrypt、商用およびプライベート認証局、および自己署名SSL証明書の比較]

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

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チャレンジは、DNS TXTレコードでキーを探します。

Certbot Let's Encrypt Client

Certbotは断然最も人気のあるLet's Encryptクライアントです。 ほとんどの主要なLinuxディストリビューションに含まれており、ApacheおよびNginxの便利な自動構成機能が含まれています。 インストールしたら、証明書を取得し、Apache構成を次のように更新できます。

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

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

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

sudo certbot renew

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

cronおよびcrontabの詳細については、チュートリアル「https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-on-a」を参照してください。 -vps [Cronを使用してタスクを自動化する方法]。

他のクライアント

ACMEプロトコルはオープンであり、十分に文書化されているため、多くの代替クライアントが開発されています。 Let’s Encryptは、Webサイトでlist of ACME clientsを維持しています。 他のほとんどのクライアントには、Certbotの自動Webサーバー設定機能はありませんが、あなたにアピールする可能性のある他の機能があります。

  • シェルスクリプト、Go、Node.jsなど、ほとんどすべてのプログラミング言語で記述されたクライアントがあります。 これは、制約された環境で証明書を作成する場合に重要であり、Pythonやその他のCertbotの依存関係は含まれません。

  • 一部のクライアントは、root特権なしで実行できます。 一般に、可能な限り最小限の特権コードを実行することをお勧めします

  • 多くのクライアントは、DNSプロバイダーのAPIを使用して適切なTXTレコードを自動的に作成することにより、DNSベースのチャレンジを自動化できます。 DNSチャレンジにより、一般にアクセスできないWebサーバーの暗号化など、いくつかの巧妙なユースケースが可能になります。

  • 一部のクライアントは実際にWebサーバー、リバースプロキシ、またはロードバランサーに統合されており、構成と展開が非常に簡単になっています。

より人気のあるクライアントの一部は次のとおりです。

  • lego:Goで記述されたレゴは1ファイルのバイナリインストールであり、DNSチャレンジを使用するときに多くのDNSプロバイダーをサポートします

  • acme.sh:acme.shは、非特権モードで実行でき、30以上のDNSプロバイダーと対話できる単純なシェルスクリプトです。

  • Caddy:Caddyは、Let’sEncryptのサポートが組み込まれたGoで記述された完全なWebサーバーです。

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

結論

Let's Encryptの動作の基本を説明し、利用可能なクライアントソフトウェアの一部について説明しました。 Let's Encryptをさまざまなソフトウェアで使用するための詳細な手順が必要な場合は、次のチュートリアルを開始するのに適しています。