Let's EncryptとACMEプロトコルの自動化
CertbotなどのクライアントとACMEプロトコルを使って、証明書の発行と更新を自動化します。
「Let's EncryptとACMEプロトコルの自動化」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
Let's Encrypt入門
Let's Encryptは、Internet Security Research Group(ISRG)が運営する無料・自動化・オープンな認証局で、2015年12月に公開ベータ版として開始されました。30億枚を超える証明書を発行し、公的に信頼されたTLS証明書の取得にかかるコストと複雑さをなくすことで、ウェブ全体でHTTPSの普及を大きく促進しました。
ACMEプロトコルの概要
Automated Certificate Management Environment(ACME)プロトコルは、2019年にRFC 8555として標準化され、クライアントがドメイン所有権を自動的に証明し、CAから証明書を受け取る方法を定義しています。ACMEは、手動のドメイン検証プロセスを暗号学的に検証される自動交換に置き換え、人手を介さない証明書ライフサイクル管理を可能にします。
HTTP-01チャレンジ
HTTP-01チャレンジは、ACMEクライアントが "http://DOMAIN/.well-known/acme-challenge/TOKEN" に特定のトークンファイルを配置することで、ドメイン所有権を検証します。CAはこのURLにアクセスしてトークンを確認します。HTTP-01は実装が簡単ですが、ポート80にアクセスできる必要があり、ワイルドカード証明書には使用できません。
DNS-01チャレンジ
DNS-01チャレンジは、ACMEクライアントが "_acme-challenge.DOMAIN" に特定の値を持つDNS TXTレコードを作成することで、ドメイン所有権を検証します。CAはDNSに問い合わせてレコードを確認します。DNS-01はワイルドカード証明書("*.example.com")の発行に対応する唯一のチャレンジタイプであり、ウェブサーバーがファイアウォールの背後にある場合でも機能します。
TLS-ALPN-01チャレンジ
TLS-ALPN-01チャレンジは、カスタムALPNプロトコル識別子 "acme-tls/1" を使用して、TLS層でドメイン所有権を検証します。ACMEクライアントは、チャレンジトークンを特殊な拡張に含む自己署名証明書をポート443で一時的に提供します。このチャレンジは稼働中のウェブサーバーがなくても機能し、ロードバランシング環境にも対応します。
Certbotリファレンスクライアント
Certbotは、Electronic Frontier Foundationが提供するLet's Encrypt向けのリファレンスACMEクライアントです。ドメイン検証、証明書発行、自動更新という証明書ライフサイクル全体を自動化します。CertbotにはApacheとnginx向けのプラグインが含まれており、TLS設定を自動的に構成できます。最新のLinuxディストリビューションでは、"snap install --classic certbot" でインストールします。
代替ACMEクライアント
Certbot以外にも、さまざまな用途に対応する多くのACMEクライアントがあります。acme.shは、軽量な環境で広く使われている純粋なシェルスクリプトのACMEクライアントです。CaddyウェブサーバーにはACME機能が組み込まれており、証明書も自動的に更新します。コンテナ環境で使われるTraefikは、certificatesResolvers設定を通じてACMEを処理し、コンテナ化されたワークロードに対応します。
証明書更新の自動化
Let's Encryptの証明書の有効期間は、意図的に90日間に設定されています。これにより自動化が促進され、秘密鍵が侵害された場合の危険な期間を短縮できます。Certbotはsystemdタイマーまたはcronジョブをインストールし、"certbot renew" を1日2回実行して、有効期限まで30日以内になった証明書を更新します。手動更新は停止障害につながるアンチパターンです。
Let's Encryptのレート制限
Let's Encryptは、悪用を防ぐためにレート制限を設けています。主な制限は、登録済みドメイン1つにつき1週間あたり50枚の証明書、重複証明書は1週間あたり5枚です。検証の失敗も、ホスト名1つにつき1時間あたり5回までに制限されています。開発時には、Let's Encryptのステージング環境を使うと、公開の信頼を得ていないテストCAに対して証明書を無制限に発行できます。
マルチドメイン証明書とワイルドカード証明書
1つのACME証明書で複数のドメイン(Subject Alternative Names)をカバーできます。"certbot --domains example.com,www.example.com,api.example.com" を実行すると、3つのSANを持つ証明書が発行されます。ワイルドカード証明書("*.example.com")にはDNS-01検証が必要で、1階層のすべてのサブドメインをカバーします。ワイルドカードはアペックスドメイン(example.com)自体をカバーしないため、追加のSANが必要です。
内部PKIでのACME
ACMEプロトコルはLet's Encryptに限定されたものではありません。Step-CA(smallstep)、EJBCA、HashiCorp Vaultなどの内部CAは、内部証明書の自動化に対応するACMEエンドポイントを公開できます。これにより、公開サービスで使われている証明書ライフサイクルの自動管理を、内部のmTLS基盤やプライベートサービスにも適用できます。
ACMEチャレンジの確認
"*.example.com" のようなワイルドカード証明書を発行するには、どのACMEチャレンジタイプが必要ですか?
レッスンのまとめ:Let's EncryptとACME
Let's Encryptは、ACMEプロトコル(RFC 8555)を通じて無料の証明書を提供します。HTTP-01チャレンジは、ポート80でワイルドカードではない証明書に使用できます。DNS-01は、DNSゾーンを管理できることを証明してワイルドカード証明書を実現します。TLS-ALPN-01はウェブサーバーなしで機能します。Certbotとacme.shはライフサイクル全体を自動化します。証明書の有効期間は90日間なので、自動化が必要です。テスト時には、レート制限があるためステージング環境を使う必要があります。
よくある質問
「Let's EncryptとACMEプロトコルの自動化」レッスンは無料ですか?
はい。「Let's EncryptとACMEプロトコルの自動化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「Let's EncryptとACMEプロトコルの自動化」で何を学びますか?
CertbotなどのクライアントとACMEプロトコルを使って、証明書の発行と更新を自動化します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Let's EncryptとACMEプロトコルの自動化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- OpenSSLコマンドライン入門
- 証明書チェーンの作成と管理
- OCSP StaplingとCertificate Transparency
- Let's EncryptとACMEプロトコルの自動化