導入
Let’s Encryptは、ACME(Automatic Certificate Management Environment)プロトコルを使用して、互換性のあるクライアントに無料のTLS/SSL証明書を提供するオープンで自動化された証明書機関です。これらの証明書は、ウェブサーバーとユーザー間の通信を暗号化するために使用できます。さまざまなプログラミング言語で書かれた数十のクライアントと、一般的な管理ツール、サービス、およびサーバーとの多くの統合が利用可能です。
最も人気のあるACMEクライアントであるCertbotは、現在Electronic Frontier Foundationによって開発されています。ドメインの所有権を検証し、証明書を取得するだけでなく、CertbotはApacheおよびNginxウェブサーバーの両方でTLS/SSLを自動的に構成できます。
このチュートリアルでは、証明書機関とLet’s Encryptの動作方法について簡単に説明し、その後、いくつかの人気のあるACMEクライアントを紹介します。
証明書機関とは何ですか?
証明書認証機関(CAs)は、TLS/SSL証明書に暗号署名してその信頼性を保証するエンティティです。ブラウザやオペレーティングシステムは、サイトの証明書を検証するために信頼されたCAのリストを持っています。
最近までは、ほとんどのCAが商用の運用であり、その検証および署名サービスに対して料金を請求していました。Let’s Encryptは、このプロセスを完全に自動化し、スポンサーシップや寄付に頼って必要なインフラを賄うことで、ユーザーに無料で提供しています。
証明書や異なる種類の証明書認証機関に関する詳細な情報については、「Let’s Encrypt、商用およびプライベート証明書認証機関、および自己署名SSL証明書の比較」をご覧ください。
次に、Let’s Encryptが自動ドメイン検証を行う方法を見てみましょう。
Let’s Encryptの動作
Let’s EncryptのACMEプロトコルは、クライアントが証明書をリクエストし、ドメインの所有権を検証し、証明書をダウンロードするためにサーバーと通信する方法を定義しています。現在、これは公式のIETF標準になる過程にあります。
Let’s Encryptはドメイン検証済み証明書を提供しており、その意味は、証明書リクエストが実際にドメインを管理している人物から来ていることを確認する必要があるということです。これは、クライアントに一意のトークンを送信し、そのトークンから派生したキーを取得するために、ウェブまたは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クライアント
Certbotは、断然最も人気のあるLet’s Encryptクライアントです。ほとんどの主要なLinuxディストリビューションに含まれており、ApacheとNginxの便利な自動構成機能が含まれています。インストールしたら、証明書を取得し、Apacheの構成を更新することは次のように行うことができます:
Certbotはいくつかの質問をします。チャレンジを実行し、証明書をダウンロードし、Apacheの設定を更新し、サーバーを再読み込みします。その後、ウェブブラウザーでhttps://www.example.com
に移動できるはずです。証明書が有効で接続が暗号化されていることを示す緑のロックが表示されます。
Let’s Encryptの証明書は90日間のみ有効なため、自動更新プロセスを設定することが重要です。以下のコマンドを使用して、マシン上のすべての証明書を更新します:
上記のコマンドをcrontabに入れて、毎日実行し、証明書が期限切れの30日前に自動的に更新されます。証明書が最初に--apache
または--nginx
オプションで作成された場合、Certbotは更新が成功した後にサーバーを再読み込みします。
cronとcrontabについて詳しく知りたい場合は、「タスクを自動化するためのCronの使用方法」チュートリアルを参照してください。
その他のクライアント
ACMEプロトコルがオープンで十分に文書化されているため、多くの代替クライアントが開発されています。Let’s EncryptのウェブサイトにはACMEクライアントのリストがあります。他のほとんどのクライアントにはCertbotの自動ウェブサーバー設定機能がありませんが、お客様にとって魅力的な他の機能があります。
- ほとんどのプログラミング言語でクライアントが書かれており、シェルスクリプト、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はGoで書かれたフルウェブサーバーであり、Let’s Encryptを組み込んだサポートが組み込まれています。
さらに多くのクライアントが利用可能であり、多くの他のサーバーやサービスがLet’s Encryptサポートを統合することでTLS/SSLセットアップを自動化しています。
結論
Let’s Encryptの動作の基本を説明し、利用可能なクライアントソフトウェアのいくつかについて説明しました。さまざまなソフトウェアでLet’s Encryptを使用する詳細な手順については、次のチュートリアルが参考になります:
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-let-s-encrypt