新着: プロジェクトの最新情報をTwitterMastodonで入手してください。

ACME オーダーとチャレンジ

cert-managerは、Let's Encryptを含むACMEサーバーからの証明書リクエストを、ACME Issuerを使用してサポートします。これらの証明書は通常、ほとんどのコンピューターでパブリックインターネット上で信頼されています。証明書を正常にリクエストするには、cert-managerはACMEチャレンジを解決する必要があります。これは、クライアントがリクエストされているDNSアドレスを所有していることを証明するために完了されます。

これらのチャレンジを完了するために、cert-managerは2つのCustomResourceタイプを導入します。OrdersChallengesです。

注文

Orderリソースは、署名付きTLS証明書のACME「注文」のライフサイクルを管理するためにACME発行者によって使用されます。ACME注文とドメイン検証の詳細については、Let's EncryptのWebサイトこちらを参照してください。注文は、新しいCertificateRequestリソースがACME発行者を参照して作成されると、自動的に作成される単一の証明書リクエストを表します。CertificateRequestリソースは、Certificateリソースが作成された、仕様が変更された、または更新が必要な場合に、cert-managerによって自動的に作成されます。

エンドユーザーとして、Orderリソースを手動で作成する必要はありません。作成されたOrderは変更できません。代わりに、新しいOrderリソースを作成する必要があります。

Orderリソースは、その「注文」の複数のACME「チャレンジ」をカプセル化するため、1つ以上のChallengeリソースを管理します。

チャレンジ

Challengeリソースは、単一のDNS名/識別子の「承認」を完了するために完了する必要があるACME「チャレンジ」のライフサイクルを管理するためにACME発行者によって使用されます。

Orderリソースが作成されると、注文コントローラーは、ACMEサーバーで承認されている各DNS名に対してChallengeリソースを作成します。

エンドユーザーとして、Challengeリソースを手動で作成する必要はありません。作成されたChallengeは変更できません。代わりに、新しいChallengeリソースを作成する必要があります。

チャレンジのライフサイクル

Challengeリソースが作成された後、最初は処理のためにキューに入れられます。処理は、チャレンジが開始するように「スケジュール」されるまで開始されません。このスケジューリングプロセスは、一度に試行されるチャレンジが多すぎたり、同じDNS名の複数のチャレンジが一度に試行されたりするのを防ぎます。チャレンジのスケジュール方法の詳細については、チャレンジのスケジュールをお読みください。

チャレンジがスケジュールされると、最初に現在の状態を判断するためにACMEサーバーと「同期」されます。チャレンジがすでに有効な場合、「状態」は「有効」に更新され、status.processing = falseを設定して、自身の「スケジュール解除」も行います。

チャレンジがまだ「保留」の場合、チャレンジコントローラーは、構成されたソルバーであるHTTP01またはDNS01のいずれかを使用してチャレンジを「提示」します。チャレンジが「提示」されると、status.presented = trueを設定します。

「提示」されると、チャレンジコントローラーは「自己チェック」を実行して、チャレンジが「伝播」したことを確認します(つまり、権威DNSサーバーが正しく応答するように更新されたか、イングレスリソースへの変更がイングレスコントローラーによって観測され使用中であるか)。

自己チェックが失敗した場合、cert-managerは固定された10秒の再試行間隔で自己チェックを再試行します。自己チェックを完了しないチャレンジは、ユーザーがOrderを再試行する(Orderリソースを削除することによって)、または構成エラーを解決するために関連付けられたCertificateリソースを修正することによって介入するまで再試行を続けます。

自己チェックがパスすると、このチャレンジに関連付けられたACME「承認」が「承認」されます。

承認後の承認の最終状態は、チャレンジのstatus.stateフィールドと、ACMEサーバーがチャレンジを検証しようとしたときにエラーが発生した場合の「エラー理由」にコピーされます。

チャレンジがvalidinvalidexpired、またはrevoked状態になると、status.processing = falseを設定して、ACMEチャレンジのそれ以上の処理を防ぎ、完了する必要があるチャレンジのバックログがある場合は、別のチャレンジをスケジュールできるようにします。

チャレンジのスケジュール

cert-managerは、すべてのチャレンジを一度に処理しようとする代わりに、チャレンジを「スケジュール」します。

このスケジューラーは、同時チャレンジの最大数に上限を適用し、同じDNS名とソルバータイプ(HTTP01またはDNS01)の2つのチャレンジを一度に完了することを許可しません。

一度に処理できるチャレンジの最大数は、ddff78の時点で60です。