7. 証明書管理 (Certificate Management)
本節では ACME が有効にする証明書管理機能を説明します。
- アカウント作成 (Account Creation)
- 証明書の注文 (Ordering a Certificate)
- 識別子の認可 (Identifier Authorization)
- 証明書の発行 (Certificate Issuance)
- 証明書の失効 (Certificate Revocation)
7.1. リソース (Resources)
ACME は以下のタイプのリソースを持つ HTTP ベースのアプリケーションとして構築されています。
- アカウントリソース (Account Resources)
- オーダーリソース (Order Resources)
- 認可リソース (Authorization Resources)
- チャレンジリソース (Challenge Resources)
- 証明書リソース (Certificate Resources)
- 「directory」リソース
- 「newNonce」リソース
- 「newAccount」リソース
- 「newOrder」リソース
- 「revokeCert」リソース
- 「keyChange」リソース
サーバーは「directory」と「newNonce」リソースを提供しなければなりません (MUST)。
directory
|
+--> newNonce
|
+----------+----------+-----+-----+------------+
| | | | |
V V V V V
newAccount newAuthz newOrder revokeCert keyChange
| | |
V | V
account | order --+--> finalize
| | |
| | +--> cert
| V
+---> authorization
| ^
| | "up"
V |
challenge
7.1.1. ディレクトリ (Directory)
クライアントが各 ACME 操作の正しい URL を設定できるよう、ACME サーバーはディレクトリオブジェクトを提供します。これはクライアントの設定に必要な唯一の URL であるべきです。
| フィールド | URL の内容 |
|---|---|
| newNonce | 新しい nonce |
| newAccount | 新しいアカウント |
| newOrder | 新しいオーダー |
| newAuthz | 新しい認可 |
| revokeCert | 証明書の失効 |
| keyChange | キーの変更 |
7.1.2. アカウントオブジェクト (Account Objects)
ACME アカウントリソースはアカウントに関連するメタデータのセットを表します。
status(必須、文字列): このアカウントのステータス。可能な値は「valid」「deactivated」「revoked」です。
contact(オプション、文字列配列): サーバーがこのアカウントに関連する問題についてクライアントに連絡するために使用できる URL の配列。
orders(必須、文字列): このアカウントが提出したオーダーのリストを取得できる URL。
7.1.3. オーダーオブジェクト (Order Objects)
ACME オーダーオブジェクトはクライアントの証明書リクエストを表し、発行までの進捗を追跡するために使用されます。
status(必須、文字列): このオーダーのステータス。可能な値は「pending」「ready」「processing」「valid」「invalid」です。
identifiers(必須、オブジェクト配列): オーダーが関係する識別子オブジェクトの配列。
authorizations(必須、文字列配列): 証明書発行前にクライアントが完了する必要がある認可の URL 配列。
finalize(必須、文字列): すべての認可が満たされた後、オーダーを完了するために CSR を POST する URL。
certificate(オプション、文字列): このオーダーに対して発行された証明書のレスポンスの URL。
7.1.4. 認可オブジェクト (Authorization Objects)
ACME 認可オブジェクトはサーバーがアカウントに識別子を代表する認可を表します。
identifier(必須、オブジェクト): アカウントが代表することを認可された識別子。
status(必須、文字列): この認可のステータス。可能な値は「pending」「valid」「invalid」「deactivated」「expired」「revoked」です。
challenges(必須、オブジェクト配列): クライアントが識別子の所有を証明するために完了できるチャレンジ。
7.1.6. ステータスの変化 (Status Changes)
各 ACME オブジェクトタイプはそのライフサイクルを通じて単純な状態機械を経ます。
チャレンジオブジェクトは「pending」状態で作成されます。クライアントがチャレンジに応答するとき「processing」状態に遷移します。検証が成功すると「valid」に、エラーが発生すると「invalid」に移動します。
7.2. Nonce の取得 (Getting a Nonce)
サーバーへの POST リクエストを送信する前に、ACME クライアントは JWS の「nonce」ヘッダーに入れる新鮮なアンチリプレイ nonce を持つ必要があります。
HEAD /acme/new-nonce HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Replay-Nonce: oFvnlFP1wIhRlYS2jTaXbA
Cache-Control: no-store
7.3. アカウント管理 (Account Management)
クライアントはサーバーの newAccount URL に POST リクエストを送信することで新しいアカウントを作成します。
POST /acme/new-account HTTP/1.1
Host: example.com
Content-Type: application/jose+json
{
"protected": base64url({
"alg": "ES256",
"jwk": {...},
"nonce": "6S8IqOGY7eL2lsGoTZYifg",
"url": "https://example.com/acme/new-account"
}),
"payload": base64url({
"termsOfServiceAgreed": true,
"contact": [
"mailto:[email protected]"
]
}),
"signature": "RZPOnYoPs1PhjszF...-nh6X1qtOFPB519I"
}
サーバーはアカウントを作成し、201 (Created) レスポンスでアカウントオブジェクトを返します。アカウント URL は Location ヘッダーフィールドに含まれます。