メインコンテンツまでスキップ

6. メッセージ転送 (Message Transport)

ACME クライアントと ACME サーバー間の通信は HTTPS を通じて行われ、JSON Web Signature (JWS) [RFC7515] を使用してクライアントからサーバーに送信されるメッセージに追加のセキュリティ特性を提供します。HTTPS はサーバー認証と機密性を提供します。

6.1. HTTPS リクエスト (HTTPS Requests)

各 ACME 機能は、クライアントがサーバーに JSON メッセージを運ぶ一連の HTTPS リクエストを送信することで実現されます。HTTPS の使用は必須です (REQUIRED)。

ACME サーバーは TLS 実装を設定する際に [RFC7525] の推奨事項に従うべきです (SHOULD)。

ACME クライアントは [RFC7231] に従って User-Agent ヘッダーフィールドを送信しなければなりません (MUST)。このヘッダーフィールドには、基礎となる HTTP クライアントソフトウェアの名前とバージョンに加えて、ACME ソフトウェアの名前とバージョンを含めるべきです (SHOULD)。

ACME クライアントはエラーメッセージのローカライズを有効にするために [RFC7231] に従って Accept-Language ヘッダーフィールドを送信すべきです (SHOULD)。

ACME で使用される JSON オブジェクトのバイナリフィールドは、[RFC4648] 第 5 節で説明された base64url エンコーディングを使用してエンコードされます。末尾の「=」文字は削除されなければなりません (MUST)。

6.2. リクエスト認証 (Request Authentication)

空でないボディを持つすべての ACME リクエストは、アカウントの秘密鍵を使用して署名された JWS オブジェクトにペイロードをカプセル化しなければなりません (MUST)。

ACME リクエストボディとして送信される JWS オブジェクトは以下の追加基準を満たさなければなりません (MUST)。

  • JWS はフラット化 JSON シリアライゼーション (Flattened JSON Serialization) を採用しなければなりません (MUST)
  • JWS は複数の署名を持ってはなりません (MUST NOT)
  • JWS 保護ヘッダーには以下のフィールドを含めなければなりません (MUST):
    • 「alg」(アルゴリズム)— 「none」や MAC アルゴリズムを含んではなりません (MUST NOT)
    • 「nonce」(第 6.5 節で定義)
    • 「url」(第 6.4 節で定義)
    • 「jwk」または「kid」

ACME サーバーは「ES256」署名アルゴリズム [RFC7518] を実装しなければならず (MUST)、「Ed25519」バリアントを使用する「EdDSA」署名アルゴリズム [RFC8037] を実装すべきです (SHOULD)。

6.3. GET と POST-as-GET リクエスト (GET and POST-as-GET Requests)

クライアントがサーバーからリソースを取得したい場合(通常は GET で行われる)、JWS ボディを持つ POST リクエストを送信しなければなりません (MUST)。JWS のペイロードはゼロ長のオクテット文字列です。

6.4. リクエスト URL の完全性 (Request URL Integrity)

すべての ACME リクエストオブジェクトは保護ヘッダーに「url」ヘッダーパラメーターを持ちます。HTTP リクエストでこのようなオブジェクトを受信した場合、サーバーは「url」ヘッダーパラメーターをリクエスト URL と比較しなければなりません (MUST)。一致しない場合、サーバーはリクエストを未認可として拒否しなければなりません (MUST)。

6.5. リプレイ保護 (Replay Protection)

ACME リソースをリプレイ攻撃から保護するために、ACME POST リクエストには必須のアンチリプレイメカニズムがあります。

ACME サーバーは HTTP Replay-Nonce ヘッダーフィールドを使用してクライアントに nonce を提供します。ACME クライアントが送信するすべての JWS は保護ヘッダーに「nonce」ヘッダーパラメーターを含めなければなりません (MUST)。

サーバーが nonce 値が受け入れられないためにリクエストを拒否する場合、HTTP ステータスコード 400 (Bad Request) と ACME エラータイプ「urn:ietf:params:acme:error:badNonce」を提供しなければなりません (MUST)。

6.6. レート制限 (Rate Limits)

ACME サーバーはリソース作成にレート制限を課す場合があります。レート制限を超えた場合、サーバーはタイプ「urn:ietf:params:acme:error:rateLimited」のエラーで応答しなければなりません (MUST)。

6.7. エラー (Errors)

エラーは HTTP 層とチャレンジオブジェクトで報告できます。サーバーがエラー状態で応答する場合、問題文書 [RFC7807] を使用して追加情報を提供すべきです (SHOULD)。

主なエラータイプには以下が含まれます。

タイプ説明
accountDoesNotExistリクエストで指定されたアカウントが存在しない
badCSRCSR が受け入れられない
badNonceクライアントが受け入れられないアンチリプレイ nonce を送信した
badPublicKeyJWS がサーバーがサポートしない公開鍵で署名されている
badSignatureAlgorithmJWS がサーバーがサポートしないアルゴリズムで署名されている
connectionサーバーが検証ターゲットに接続できない
dns識別子検証中に DNS クエリで問題が発生した
malformedリクエストメッセージの形式が不正
rateLimitedリクエストがレート制限を超えた
serverInternalサーバーが内部エラーに遭遇した
unauthorizedクライアントに十分な認可がない