RFC 9447 PROPOSED STANDARD ACME · CERTIFICATES · TOKENS

ACME authority token: Automated Certificate Management Environment (ACME) Challenges Using an Authority Token

A generic ACME challenge where a certificate applicant proves its right to a name by presenting a signed token from the authority that owns that namespace.

On rfc-editor.org ↗
PUBLISHED
September 2023
AUTHORS
J. Peterson, M. Barnes, D. Hancock, C. Wendt
STREAM
IETF
CHALLENGE TYPE
tkauth-01
TOKEN SUBTYPE DEFINED
atc (a JWT)
MANDATORY ATC ELEMENTS
tktype, tkvalue, fingerprint
REQUIRED JWT CLAIMS
jti and exp
FINGERPRINT HASH
SHA256
SUCCESS RESPONSE
200 OK, application/json
DOI
10.17487/RFC9447

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                       J. Peterson
Request for Comments: 9447                                     M. Barnes
Category: Standards Track                                        Neustar
ISSN: 2070-1721                                               D. Hancock
                                                                C. Wendt
                                                                   Somos
                                                          September 2023


Automated Certificate Management Environment (ACME) Challenges Using an
                            Authority Token

Abstract

   Some proposed extensions to the Automated Certificate Management
   Environment (ACME) rely on proving eligibility for certificates
   through consulting an external authority that issues a token
   according to a particular policy.  This document specifies a generic
   Authority Token Challenge for ACME that supports subtype claims for
   different identifiers or namespaces that can be defined separately
   for specific applications.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc9447.

Copyright Notice

   Copyright (c) 2023 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Revised BSD License text as described in Section 4.e of the
   Trust Legal Provisions and are provided without warranty as described
   in the Revised BSD License.

Table of Contents

   1.  Introduction
   2.  Requirements Language
   3.  ACME Authority Token Challenge
     3.1.  Token Type Requirements
     3.2.  Authority Token Scope
     3.3.  Binding Challenges
   4.  Authority Token Challenge tkauth-type Registration
   5.  Acquiring a Token
     5.1.  Basic REST Interface
   6.  IANA Considerations
     6.1.  ACME Validation Method Registration
     6.2.  JSON Web Token Claim Registration
     6.3.  Creation of ACME Authority Token Challenge Types Registry
   7.  Security Considerations
   8.  References
     8.1.  Normative References
     8.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   ACME [RFC8555] is a mechanism for automating certificate management
   on the Internet.  It enables administrative entities to prove
   effective control over resources, like domain names, and automates
   the process of issuing certificates that attest control or ownership
   of those resources.

   In some cases, proving effective control over an identifier requires
   an attestation from a third party who has authority over the
   resource, for example, an external policy administrator for a
   namespace other than the DNS application ACME was originally designed
   to support.  In order to automate the process of issuing certificates
   for those resources, this specification defines a generic Authority
   Token Challenge that ACME servers can issue in order to require
   clients to return an Authority Token that authorizes a given
   issuance.  The challenge contains a type indication that tells the
   client what sort of token it needs to acquire.  It is expected that
   the Authority Token Challenge will be usable for a variety of
   identifier types.  In particular, this document describes an
   architecture for Authority Tokens, defines a JSON Web Token (JWT)
   [RFC7519] Authority Token format along with a protocol for token
   acquisition, and shows how to integrate these tokens into an ACME
   challenge.

   As a concrete example, [RFC9448] provides a mechanism that allows
   service providers to acquire certificates corresponding to a Service
   Provider Code (SPC) as defined in [RFC8226] by consulting an external
   authority responsible for those codes.  Furthermore, Communications
   Service Providers (CSPs) can delegate authority over numbers to their
   customers, and those CSPs who support ACME can then help customers to
   acquire certificates for those numbering resources with ACME.  This
   can permit number acquisition flows compatible with those shown in
   [RFC8396].

2.  Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  ACME Authority Token Challenge

   Proving that a device on the Internet has effective control over a
   non-Internet resource is not as straightforward as proving control
   over Internet resources, like a DNS zone or a web page.  Provided
   that the issuer of identifiers in a namespace, or someone acting on
   the issuer's behalf, can implement a service that grants Authority
   Tokens to the people to whom it has issued identifiers, a generic
   token could be used as a response to an ACME challenge.  This
   specification, therefore, defines an Authority Token issued by an
   authority over a namespace to an ACME client for delivery to an ACME
   server in response to a challenge.  Authority over a hierarchical
   namespace can also be delegated so that delegates of a root authority
   can themselves act as Token Authorities for certain types of names.

   This architecture assumes a trust relationship between certification
   authorities (CAs) and Token Authorities, i.e., that CAs are willing
   to accept the attestation of Token Authorities for particular types
   of identifiers as sufficient proof to issue a credential.  It
   furthermore assumes that ACME clients have a relationship with Token
   Authorities, which permits them to authenticate and authorize the
   issuance of Authority Tokens to the proper entities.  This ACME
   challenge has no applicability to identifiers or authorities where
   those pre-associations cannot be assumed.

   The ACME Authority Token Challenge type, "tkauth-01", is here
   specified for use with the "TNAuthList" (Telephone Number
   Authentication List) ACME Identifier Type described in [RFC9448]; in
   order to use the "tkauth-01" Validation Method with an ACME
   Identifier Type other than "TNAuthList", that identifier type would
   need to be listed in a new registration in the ACME Validation
   Methods registry maintained by IANA. "tkauth-01" furthermore supports
   different token subtypes.  The token subtype is determined by a new
   ACME challenge field, tkauth-type.  An IANA registry is used to
   manage the values of tkauth-type (see Section 6.3).  Additionally,
   this challenge type also has a new "token-authority" field to
   designate a location where a token can be acquired.

3.1.  Token Type Requirements

   IANA will maintain a registry of tkauth-types under a policy of
   Specification Required.  In order to register a new tkauth-type,
   specifications must address the following requirements; in cases
   where a tkauth-type admits of its own subtypes, subtypes inherit
   these requirements.

   While Authority Token types do not need to be specific to a
   namespace, every token must carry enough information for a CA to
   determine the name for which certificate issuance is authorized.
   Some types of Authority Token types might be reusable for a number of
   different namespaces; others might be specific to a particular type
   of name.  Therefore, in defining tkauth-types, future specifications
   must indicate how a token conveys to the CA the name(s) that the
   Token Authority is attesting that the ACME client controls.

   While nothing precludes use cases where an ACME client is itself a
   Token Authority, an ACME client will typically need a protocol to
   request and retrieve an Authority Token.  The Token Authority will
   require certain information from an ACME client in order to ascertain
   that it is an authorized entity to request a certificate for a
   particular name.  The protocols used to request an Authority Token
   MUST convey to the Token Authority the identifier type and value that
   will be used in the ACME challenge, as well as the binding (see
   Section 3.3), and those MUST be reflected in the Authority Token.  A
   baseline mechanism for how the Token Authority authenticates and
   authorizes ACME clients to receive Authority Tokens is given in
   Section 5.

   Because the assignment of resources can change over time,
   demonstrations of authority must be regularly refreshed.  Definitions
   of a tkauth-type MUST specify how they manage the freshness of
   authority assignments.  Typically, a CA will expect a regular
   refreshing of the token.

3.2.  Authority Token Scope

   An Authority Token is used to answer a challenge from an ACME server,
   upon a request for the issuance of a certificate.  It could be that
   the Authority Token is requested from the Token Authority after a
   challenge has been received, or it could be that the Authority Token
   was acquired prior to the initial ACME client request.  A Token
   Authority could grant an Authority Token that has the exact same
   scope as the requested certificate to a client; alternatively, an
   Authority Token could attest to all of the resources that the client
   is eligible to receive certificates for, which could be a superset of
   the scope of the requested certificate.

   For example, imagine a case where a Token Authority for DNS names
   knows that a client is eligible to receive certificates for
   "example.com" and "example.net".  The client asks an ACME server for
   a certificate for "example.com", and the server directs the client to
   acquire an Authority Token from the Token Authority.  When the client
   sends an acquisition request (see Section 5) to the Token Authority,
   the Token Authority could issue a token scoped just to "example.com"
   or a token that attests the client is eligible to receive
   certificates for both "example.com" or "example.net".  The advantage
   of the latter is that if, at a later time (but one within the expiry
   of the token), the client wanted to acquire a certificate for
   "example.net", it would not have to return to the Token Authority, as
   the Token effectively pre-authorized the issuance of that
   certificate.

   Applications of the Authority Token to different identifier types
   might require different scopes, so registrations of tkauth-types
   should be clear about if and how a scope greater than that of the
   requested certificate would be conveyed in a token.

3.3.  Binding Challenges

   Applications that use the Authority Token need a way to correlate
   tokens issued by a Token Authority with the proper ACME client to
   prevent replay or cut-and-paste attacks using a token issued for a
   different purpose.  To mitigate this, Authority Tokens contain a
   binding signed by a Token Authority; an ACME server can use the
   binding to determine that a Token presented by a client was in fact
   granted by the Token Authority based on a request from the client and
   not from some other entity.  It is RECOMMENDED that the ACME account
   fingerprint be used for this purpose.

   Creating a binding from an Authority Token to a particular ACME
   account entails that the Token could be reused up until its expiry
   for multiple challenges issued by an ACME server.  This might be a
   desirable property when using short-lived certificates, for example,
   in any cases where the ACME server issues challenges more frequently
   that an Authority Token can or should issue tokens or in cases where
   the Authority Token scope (see Section 3.2) is broad, so certificates
   with a more narrow scope may periodically be issued.

   For some identifier types, it may be more appropriate to bind the
   Authority Token to a nonce specific to the challenge rather than to
   an ACME account fingerprint.  Any specification of the use of the
   nonce or other factors for this purpose is left to the identifier
   type profile for the Authority Token.

   Note that the fingerprint value in the client's JWT is reflected in
   the Authority Token returned by the Token Authority; the Token
   Authority has no requirement to validate that fingerprint.  Were a
   fingerprint to be captured by an attacker that had its own account
   with the Token Authority, it could replay that fingerprint in its own
   JWT in order to receive an Authority Token with that fingerprint.
   However, were the attacker to present that Authority Token to an ACME
   service, the service would see the fingerprint does not match the
   attacker's ACME account fingerprint.  So unless an attacker can
   compromise a target ACME account or gain similar privileges, the
   binding would be secure.

4.  Authority Token Challenge tkauth-type Registration

   This document specifies a tkauth-type of "atc", which contains a
   standard JWT [RFC7519] using a signature string defined by a JSON Web
   Signature (JWS) [RFC7515].  The "atc" tkauth-type MAY be used for any
   number of different ACME Identifier Types in the ACME challenge.

   A new JWT claim, "atc", is defined below and lists the identifier
   type used in this Authority Token.  The "atc" tkauth-type is
   restricted to the JWTs; if a non-JWT format is desired for the ACME
   Authority Token Challenge, a different tkauth-type should be
   specified and registered in the "ACME Authority Token Challenge
   Types" registry defined in Section 6.3.

   For this ACME Authority Token usage of a JWT, it is OPTIONAL for the
   payload of the JWT to contain an "iss", indicating the Token
   Authority that generated the token if the "x5u" or "x5c" element in
   the header does not already convey that information; typically, this
   will be the same location that appeared in the "token-authority"
   field of the ACME challenge, when present.  In order to satisfy the
   requirement for replay prevention, the JWT MUST contain a "jti"
   element and an "exp" claim; the "exp" claim manages token freshness.
   In addition to helping to manage replay, the "jti" provides a
   convenient way to reliably track when the same "atc" Authority Token
   is being used for multiple challenges over time within its set
   lifetime.

   The JWT payload MUST also contain a new JWT claim, "atc", for
   Authority Token Challenge, which contains three mandatory elements in
   a JSON map: the ATC identifier type ("tktype"), the identifier value
   ("tkvalue"), and the binding ("fingerprint").  The use of "tktype" is
   restricted to the values in the "ACME Identifier Types" registry, as
   defined by [RFC8555].  The identifier type and value are those given
   in the ACME challenge and conveyed to the Token Authority by the ACME
   client.  For the purposes of the "atc" tkauth-type, the binding
   "fingerprint" is assumed to be a fingerprint of the ACME credential
   for the account used to request the certificate, but the
   specification of how the binding is generated is left to the
   identifier type profile for the Authority Token (see Section 3.3).
   The "tkvalue" indicates the scope of the authority that the token and
   its semantics are outside the scope of this document, as they will be
   specified by the "tkvalue" identifier in a separate specification.

   Following the example of [RFC9448], the "tktype" identifier type
   could be the TNAuthList (as defined in [RFC8226]), which would be the
   value for the "tkvalue" element that the Token Authority is
   attesting.  Practically speaking, that scope may comprise a list of
   Service Provider Code elements, telephone number range elements, and/
   or individual telephone numbers.  So for example:

        {
    "protected": base64url({
         "typ":"JWT",
     "alg":"ES256",
     "x5u":"https://authority.example.org/cert"
        }),
    "payload": base64url({
         "iss":"https://authority.example.org/authz",
     "exp":1300819380,
     "jti":"id6098364921",
     "atc":{"tktype":"TnAuthList","tkvalue":"F83n2a...avn27DN3==",
     "fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:D3:
     BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"}
        }),
     "signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ"
        }

   Optionally, the "atc" claim may contain a fourth boolean element,
   "ca".  If set to "true", the "ca" element indicates that the Token
   Authority is granting permission to issue a certification authority
   certificate rather than an end-entity certificate for the names in
   question.  This permits subordinate delegations from the issued
   certificate (using [RFC9115] or similar mechanisms).  If the "ca"
   element is absent, the Token Authority is explicitly withholding
   permission.  The "atc" object in the example above would then look
   like:

   "atc":{"tktype":"TnAuthList","tkvalue":"F83n2a...avn27DN3==",
   "ca":true,"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:
   71:D3:BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"} }

   Specifications of "tktype" identifier types may define additional
   optional "atc" elements.

5.  Acquiring a Token

   The acquisition of an Authority Token requires a network interface,
   apart from potential use cases where the entity that acts as an ACME
   client itself also acts as a Token Authority trusted by the ACME
   server.  Implementations compliant with this specification MUST
   support an HTTPS interface for Authority Token acquisition as
   described below, though other interfaces MAY be supported as well.

5.1.  Basic REST Interface

   In order to request an Authority Token from a Token Authority, a
   client sends a HTTPS POST request [RFC9110].  This specification
   assumes that Token Authority URIs are known to clients through
   preexisting business relationships and that the credentials and
   related authentication and authorization for Authority Token
   acquisition are encompassed in that relationship.  Different services
   may organize their web resources in domain-specific ways, but the
   resource locator should specify the account of the client, an
   identifier for the service provider, and finally a locator for the
   token.

      POST /at/account/:id/token HTTP/1.1
      Host: authority.example.com
      Content-Type: application/json

   Note that ":id" here is a placeholder for an actual account
   identifier.  The body of the POST request MUST contain the Authority
   Token Challenge element (the key "atc", colon, and its value) that
   the client is requesting the Token Authority generate.  In this way,
   the client proposes the scope of the Authority Token it would like to
   receive from the Token Authority.

   In common use cases, the "tkvalue" in this request is asking that the
   Token Authority issue a token that attests the entire scope of
   authority to which the client is entitled.  The client may also
   request an Authority Token with some subset of its own authority via
   the "tkvalue" element in the Authority Token Challenge object.  The
   way that "tkvalue" is defined will necessarily be specific to the
   identifier type.  For the TNAuthList identifier type, for example, an
   object requesting an Authority Token could request authority for only
   a single telephone number in a way that is defined in the TNAuthList
   specification.

   Finally, the JSON object MAY also contain an optional boolean
   element, "ca", which signifies that the client is requesting that the
   Token Authority issue an Authority Token with the "ca" flag set, as
   described in Section 4.

   After an HTTPS-level challenge (e.g., a 401 HTTP response code) to
   verify the identity of the client and subsequently making an
   authorization decision about whether the client should receive an
   Authority Token with the requested scope, then in the success case,
   the Token Authority MUST return a 200 OK with a body of type
   "application/json" containing the Authority Token.

   A full example of "atc" token acquisition using the HTTP interface,
   with the "tktype" of "TNAuthList", is given in Section 5.5 of
   [RFC9448].

6.  IANA Considerations

6.1.  ACME Validation Method Registration

   IANA has added a new ACME Validation Method (per [RFC8555]) in the
   "ACME Validation Methods" subregistry of the "Automated Certificate
   Management Environment (ACME) Protocol" registry group as follows:

   Label:  tkauth-01

   Identifier Type:  TNAuthList

   ACME:  Y

   Reference:  RFC 9447

6.2.  JSON Web Token Claim Registration

   IANA has added a new claim in the "JSON Web Token Claims" registry,
   as defined in [RFC7519], as follows:

   Claim name:  atc

   Claim Description:  Authority Token Challenge

   Change Controller:  IETF

   Specification document(s):  RFC 9447

6.3.  Creation of ACME Authority Token Challenge Types Registry

   IANA has created a new registry for "ACME Authority Token Challenge
   Types" as used in these challenges, under a policy of Specification
   Required and following the requirements in Section 3.1, with three
   columns: Label, Description, and Reference.  The initial content of
   the registry is as follows:

   Label:  atc (as defined in Section 4)

   Description:  JSON Web Token (JWT) challenge type

   Reference:  RFC 9447

7.  Security Considerations

   Per the guidance in [RFC8555], ACME transactions MUST use TLS, and
   similarly, the HTTPS REST transactions used to request and acquire
   Authority Tokens MUST use TLS.  These measures are intended to
   prevent the capture of Authority Tokens by eavesdroppers.  A
   preexisting trust relationship between the HTTPS REST client and the
   Token Authority must also exist in order for the parties to
   meaningfully authenticate one another.  The security considerations
   of [RFC8555] apply to the use of the mechanism in this specification.
   Implementations should follow the best practices identified in
   [RFC8725].

   As described in Section 3.2, an Authority Token can either have a
   scope that attests all of the resources that a client is eligible to
   receive certificates for or potentially a more limited scope that is
   intended to capture only those resources for which a client will
   receive a certificate from a particular certification authority.  Any
   certification authority that sees an Authority Token can learn
   information about the resources a client can claim.  In cases where
   this incurs a privacy risk, Authority Token scopes should be limited
   to only the resources that will be attested by the requested ACME
   certificate.

   In cases where a tkauth-type, as defined in Section 4, admits of its
   own subtypes, the security of features like binding challenges (see
   Section 3.3) will depend on the subtype specification.

   The capture of Authority Tokens by an adversary could enable an
   attacker to acquire a certificate from a CA.  Therefore, all
   Authority Tokens MUST contain a field that identifies to the CA which
   ACME client requested the token from the Token Authority; here, that
   is the fingerprint specified in Section 4.  All Authority Tokens must
   specify an expiry (of the token itself as proof for a CA, as opposed
   to the expiry of the name), and for some applications, it may make
   sense for that expiry to be quite short.  ACME services relying on
   Authority Tokens SHOULD NOT issue certificates with a longer expiry
   than the expiry of the Authority Token.  Any protocol used to
   retrieve Authority Tokens from a Token Authority MUST use
   confidentiality to prevent eavesdroppers from acquiring an Authority
   Token.  The details of this protocol are out of the scope of this
   specification.

   This document only specifies SHA256 for the fingerprint hash.
   However, the syntax of the fingerprint object would permit other keys
   if, due to concerns about algorithmic agility, a more robust
   algorithm were required at a future time.  Future specifications can
   define new keys for the fingerprint object as needed.

8.  References

8.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC7515]  Jones, M., Bradley, J., and N. Sakimura, "JSON Web
              Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
              2015, <https://www.rfc-editor.org/info/rfc7515>.

   [RFC7519]  Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
              (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
              <https://www.rfc-editor.org/info/rfc7519>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8555]  Barnes, R., Hoffman-Andrews, J., McCarney, D., and J.
              Kasten, "Automatic Certificate Management Environment
              (ACME)", RFC 8555, DOI 10.17487/RFC8555, March 2019,
              <https://www.rfc-editor.org/info/rfc8555>.

   [RFC8725]  Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best
              Current Practices", BCP 225, RFC 8725,
              DOI 10.17487/RFC8725, February 2020,
              <https://www.rfc-editor.org/info/rfc8725>.

   [RFC9110]  Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP Semantics", STD 97, RFC 9110,
              DOI 10.17487/RFC9110, June 2022,
              <https://www.rfc-editor.org/info/rfc9110>.

   [RFC9448]  Wendt, C., Hancock, D., Barnes, M., and J. Peterson,
              "TNAuthList Profile of Automated Certificate Management
              Environment (ACME) Authority Token", RFC 9448,
              DOI 10.17487/RFC9448, September 2023,
              <https://www.rfc-editor.org/info/rfc9448>.

8.2.  Informative References

   [RFC8226]  Peterson, J. and S. Turner, "Secure Telephone Identity
              Credentials: Certificates", RFC 8226,
              DOI 10.17487/RFC8226, February 2018,
              <https://www.rfc-editor.org/info/rfc8226>.

   [RFC8396]  Peterson, J. and T. McGarry, "Managing, Ordering,
              Distributing, Exposing, and Registering Telephone Numbers
              (MODERN): Problem Statement, Use Cases, and Framework",
              RFC 8396, DOI 10.17487/RFC8396, July 2018,
              <https://www.rfc-editor.org/info/rfc8396>.

   [RFC9115]  Sheffer, Y., López, D., Pastor Perales, A., and T.
              Fossati, "An Automatic Certificate Management Environment
              (ACME) Profile for Generating Delegated Certificates",
              RFC 9115, DOI 10.17487/RFC9115, September 2021,
              <https://www.rfc-editor.org/info/rfc9115>.

Acknowledgements

   We would like to Roman Danyliw and Ben Kaduk for contributions to
   this problem statement and framework.

Authors' Addresses

   Jon Peterson
   Neustar, Inc.
   Email: jon.peterson@team.neustar


   Mary Barnes
   Neustar, Inc.
   Email: mary.ietf.barnes@gmail.com


   David Hancock
   Somos
   Email: davidhancock.ietf@gmail.com


   Chris Wendt
   Somos
   Email: chris-ietf@chriswendt.net

AI ELI5

On this page
PROBLEMACME can prove control of DNS names, but for other kinds of identifiers a certification authority needs an attestation from a third party that has authority over the resource.
MECHANISMThe ACME server issues a tkauth-01 challenge, the client fetches an Authority Token (a signed JWT) from the Token Authority, and returns it as the response, bound to the client's ACME account.
WHY IT MATTERSIt gives ACME a reusable way to handle non-DNS namespaces, with the TNAuthList identifier type in RFC 9448 as the concrete first use.

§1Why ACME Needs Authority Tokens

ACME is the mechanism for automating certificate management on the Internet. It lets an administrative entity prove effective control over a resource such as a domain name, and it automates issuing a certificate that attests that control.

Sometimes the proof has to come from a third party that has authority over the resource, for example an external policy administrator for a namespace other than DNS. RFC 9447 defines a generic Authority Token Challenge. The ACME server issues it to require the client to return an Authority Token that authorizes a given issuance. The challenge says what sort of token the client must acquire.

The concrete example in the text is RFC 9448, which lets service providers get certificates for a Service Provider Code by consulting the external authority responsible for those codes.

Sometimes the person handing out certificates cannot check your claim by themselves. So they ask you to bring a note from the person who really owns the thing you are asking about.

§3The tkauth-01 Challenge and Its Trust Model

The architecture assumes two relationships. Certification authorities (CAs) are willing to accept a Token Authority's attestation as sufficient proof for particular identifier types, and ACME clients have a relationship with the Token Authority that lets it authenticate and authorize them. The challenge has no applicability where those pre-associations cannot be assumed. Authority over a hierarchical namespace can also be delegated, so delegates of a root authority can act as Token Authorities for certain names.

The challenge type is tkauth-01. It is specified for use with the TNAuthList ACME Identifier Type from RFC 9448. Using it with another identifier type would need a new registration in the ACME Validation Methods registry. The token subtype is carried in a new challenge field, tkauth-type, and a new token-authority field designates a location where a token can be acquired.

The door person trusts the ticket office, and you already have an account with the ticket office. The challenge simply tells you which ticket to get and where.

§3.1Rules for New Token Types

IANA keeps a registry of tkauth-types under a Specification Required policy. A specification that registers a new type must meet several requirements, and subtypes inherit them.

  • Every token must carry enough information for a CA to determine the name for which issuance is authorized, and the specification must say how.
  • The protocols used to request a token MUST convey the identifier type and value used in the ACME challenge, plus the binding, and those MUST be reflected in the token.
  • Because resource assignments change over time, the type MUST specify how it manages the freshness of authority assignments. A CA will typically expect regular refreshing.

Section 3.2 adds that a token can be scoped exactly to the requested certificate, or can attest everything the client is eligible for. The text's example is a client eligible for example.com and example.net: a broad token lets it later get a certificate for the second name without returning to the Token Authority, within the token's expiry.

Anyone inventing a new kind of ticket has to make sure it says what it is good for and when it runs out.

§4The atc Token Format

This document defines the tkauth-type atc: a standard JWT signed as a JSON Web Signature (JWS). It may be used for any number of ACME Identifier Types. A new JWT claim, also named atc, lists the identifier type used.

The payload MUST contain a jti and an exp claim, which together give replay prevention and manage token freshness. An iss claim is optional when the header's x5u or x5c already says who issued the token.

The atc claim is a JSON map with three mandatory elements: tktype (the identifier type, from the ACME Identifier Types registry), tkvalue (the identifier value, whose semantics are defined by a separate specification) and fingerprint (the binding). An optional boolean ca, if true, grants permission to issue a certification authority certificate rather than an end-entity certificate; if absent, permission is explicitly withheld.

The ticket is a signed card with an expiry time, a one-off number, what it is for, and a fingerprint showing which visitor it belongs to.

THE ATC CLAIM (RFC 9447)
  • tktypeIdentifier type, from the ACME Identifier Types registry.
  • tkvalueIdentifier value the token attests; semantics defined elsewhere.
  • fingerprintBinding, assumed to be a fingerprint of the ACME account credential.
  • ca (optional)If true, permits issuing a CA certificate instead of an end-entity one.

§5Acquiring a Token over HTTPS

Unless the ACME client is itself the Token Authority, acquiring a token needs a network interface. Compliant implementations MUST support an HTTPS interface, and MAY support others. The client sends an HTTPS POST, with a path such as /at/account/:id/token and a JSON body, to a Token Authority URI it already knows through a preexisting business relationship.

The body MUST contain the atc element the client wants generated, so the client proposes the scope of the token. Usually it asks for the entire scope it is entitled to, but it can ask for a subset. It may also include ca to request the CA flag.

After an HTTPS-level challenge (for example a 401 response) and an authorization decision, the Token Authority MUST return a 200 OK with a body of type application/json containing the token. A full example for TNAuthList is in Section 5.5 of RFC 9448.

You show your membership to the ticket office and say what you want a ticket for. If they agree, they hand you the signed ticket.

TOKEN CHALLENGE FLOW (summarized, illustrative, not a figure from the RFC)
ACME clientACME serverToken Authority
  1. tkauth-01 challengeNames the tkauth-type and may give a token-authority location.
  2. HTTPS POST with atcProposes the scope of the token it wants.
  3. 200 OK with Authority Token
  4. Token as challenge response

§6IANA Registrations

IANA added the tkauth-01 validation method for identifier type TNAuthList to the ACME Validation Methods registry. It registered the atc claim, described as Authority Token Challenge, in the JSON Web Token Claims registry.

It also created a new registry, ACME Authority Token Challenge Types, under Specification Required, with columns Label, Description and Reference. Its initial content is one entry: atc, the JSON Web Token (JWT) challenge type.

The rule book got new entries so everyone uses the same names for the new challenge and ticket.

§7Binding and Security Considerations

Tokens carry a binding signed by the Token Authority so the ACME server can tell the token was granted on the request of this client and not someone else, which defends against replay or cut-and-paste. The RFC RECOMMENDS the ACME account fingerprint. For some identifier types a challenge-specific nonce may suit better. Binding to an account means a token can be reused until it expires, which suits short-lived certificates or broad scopes.

ACME transactions and the HTTPS token requests MUST use TLS, and implementations should follow the JWT best practices of RFC 8725. A CA that sees a broad token learns what else the client can claim, so where that is a privacy risk scopes should be limited. ACME services SHOULD NOT issue certificates with a longer expiry than the Authority Token. Only SHA256 is specified for the fingerprint hash, though the syntax would permit other keys later.

The ticket has your name tag stapled on, so a stranger who finds it cannot use it. It also runs out, and you should not hand it over in the open.

§8References