| rfc9447.original | rfc9447.txt | |||
|---|---|---|---|---|
| Network Working Group J. Peterson | Internet Engineering Task Force (IETF) J. Peterson | |||
| Internet-Draft M. Barnes | Request for Comments: 9447 M. Barnes | |||
| Intended status: Standards Track Neustar | Category: Standards Track Neustar | |||
| Expires: 27 April 2023 D. Hancock | ISSN: 2070-1721 D. Hancock | |||
| Comcast | ||||
| C. Wendt | C. Wendt | |||
| Somos | Somos | |||
| 24 October 2022 | September 2023 | |||
| ACME Challenges Using an Authority Token | Automated Certificate Management Environment (ACME) Challenges Using an | |||
| draft-ietf-acme-authority-token-09 | Authority Token | |||
| Abstract | Abstract | |||
| Some proposed extensions to the Automated Certificate Management | Some proposed extensions to the Automated Certificate Management | |||
| Environment (ACME) rely on proving eligibility for certificates | Environment (ACME) rely on proving eligibility for certificates | |||
| through consulting an external authority that issues a token | through consulting an external authority that issues a token | |||
| according to a particular policy. This document specifies a generic | according to a particular policy. This document specifies a generic | |||
| Authority Token challenge for ACME which supports subtype claims for | Authority Token Challenge for ACME that supports subtype claims for | |||
| different identifiers or namespaces that can be defined separately | different identifiers or namespaces that can be defined separately | |||
| for specific applications. | for specific applications. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 27 April 2023. | 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 Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | ||||
| Please review these documents carefully, as they describe your rights | carefully, as they describe your rights and restrictions with respect | |||
| and restrictions with respect to this document. Code Components | to this document. Code Components extracted from this document must | |||
| extracted from this document must include Revised BSD License text as | include Revised BSD License text as described in Section 4.e of the | |||
| described in Section 4.e of the Trust Legal Provisions and are | Trust Legal Provisions and are provided without warranty as described | |||
| provided without warranty as described in the Revised BSD License. | in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Requirements Language | |||
| 3. ACME Authority Token Challenge . . . . . . . . . . . . . . . 3 | 3. ACME Authority Token Challenge | |||
| 3.1. Token Type Requirements . . . . . . . . . . . . . . . . . 4 | 3.1. Token Type Requirements | |||
| 3.2. Authority Token Scope . . . . . . . . . . . . . . . . . . 5 | 3.2. Authority Token Scope | |||
| 3.3. Binding Challenges . . . . . . . . . . . . . . . . . . . 6 | 3.3. Binding Challenges | |||
| 4. Authority Token Challenge tkauth-type Registration . . . . . 6 | 4. Authority Token Challenge tkauth-type Registration | |||
| 5. Acquiring a Token . . . . . . . . . . . . . . . . . . . . . . 8 | 5. Acquiring a Token | |||
| 5.1. Basic REST Interface . . . . . . . . . . . . . . . . . . 9 | 5.1. Basic REST Interface | |||
| 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 | 6. IANA Considerations | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. ACME Validation Method Registration | |||
| 7.1. ACME Validation Method Registration . . . . . . . . . . . 10 | 6.2. JSON Web Token Claim Registration | |||
| 7.2. JSON Web Token Claim Registration . . . . . . . . . . . . 10 | 6.3. Creation of ACME Authority Token Challenge Types Registry | |||
| 7.3. Creation of ACME Authority Token Challenge Type | 7. Security Considerations | |||
| Registry . . . . . . . . . . . . . . . . . . . . . . . . 10 | 8. References | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 8.1. Normative References | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 8.2. Informative References | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 12 | Acknowledgements | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 13 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 1. Introduction | 1. Introduction | |||
| ACME [RFC8555] is a mechanism for automating certificate management | ACME [RFC8555] is a mechanism for automating certificate management | |||
| on the Internet. It enables administrative entities to prove | on the Internet. It enables administrative entities to prove | |||
| effective control over resources like domain names, and automates the | effective control over resources, like domain names, and automates | |||
| process of issuing certificates that attest control or ownership of | the process of issuing certificates that attest control or ownership | |||
| those resources. | of those resources. | |||
| In some cases, proving effective control over an identifier requires | In some cases, proving effective control over an identifier requires | |||
| an attestation from a third party who has authority over the | an attestation from a third party who has authority over the | |||
| resource, for example, an external policy administrator for a | resource, for example, an external policy administrator for a | |||
| namespace other than the DNS application ACME was originally designed | namespace other than the DNS application ACME was originally designed | |||
| to support. In order to automate the process of issuing certificates | to support. In order to automate the process of issuing certificates | |||
| for those resources, this specification defines a generic Authority | for those resources, this specification defines a generic Authority | |||
| Token challenge that ACME servers can issue in order to require | Token Challenge that ACME servers can issue in order to require | |||
| clients to return an Authority Token that authorizes a given | clients to return an Authority Token that authorizes a given | |||
| issuance. The challenge contains a type indication that tells the | issuance. The challenge contains a type indication that tells the | |||
| client what sort of token it needs to acquire. It is expected that | client what sort of token it needs to acquire. It is expected that | |||
| the Authority Token challenge will be usable for a variety of | the Authority Token Challenge will be usable for a variety of | |||
| identifier types. In particular, this document describes an | identifier types. In particular, this document describes an | |||
| architecture for Authority Tokens, defines a JSON Web Token (JWT, | architecture for Authority Tokens, defines a JSON Web Token (JWT) | |||
| [RFC7519]) Authority Token format along with a protocol for token | [RFC7519] Authority Token format along with a protocol for token | |||
| acquisition, and shows how to integrate these tokens into an ACME | acquisition, and shows how to integrate these tokens into an ACME | |||
| challenge. | challenge. | |||
| As a concrete example, [I-D.ietf-acme-authority-token-tnauthlist] | As a concrete example, [RFC9448] provides a mechanism that allows | |||
| provides a mechanism that allows service providers to acquire | service providers to acquire certificates corresponding to a Service | |||
| certificates corresponding to a Service Provider Code (SPC) as | Provider Code (SPC) as defined in [RFC8226] by consulting an external | |||
| defined in [RFC8226] by consulting an external authority responsible | authority responsible for those codes. Furthermore, Communications | |||
| for those codes. Furthermore, Communications Service Providers | Service Providers (CSPs) can delegate authority over numbers to their | |||
| (CSPs) can delegate authority over numbers to their customers, and | customers, and those CSPs who support ACME can then help customers to | |||
| those CSPs who support ACME can then help customers to acquire | acquire certificates for those numbering resources with ACME. This | |||
| certificates for those numbering resources with ACME. This can | can permit number acquisition flows compatible with those shown in | |||
| permit number acquisition flows compatible with those shown in | ||||
| [RFC8396]. | [RFC8396]. | |||
| 2. Terminology | 2. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. ACME Authority Token Challenge | 3. ACME Authority Token Challenge | |||
| Proving that a device on the Internet has effective control over a | Proving that a device on the Internet has effective control over a | |||
| non-Internet resource is not as straightforward as proving control | non-Internet resource is not as straightforward as proving control | |||
| over an Internet resources like a DNS zone or a web page. Provided | over Internet resources, like a DNS zone or a web page. Provided | |||
| that the issuer of identifiers in a namespace, or someone acting on | that the issuer of identifiers in a namespace, or someone acting on | |||
| the issuer's behalf, can implement a service that grants Authority | the issuer's behalf, can implement a service that grants Authority | |||
| Tokens to the people to whom it has issued identifiers, a generic | Tokens to the people to whom it has issued identifiers, a generic | |||
| token could be used as a response to an ACME challenge. This | token could be used as a response to an ACME challenge. This | |||
| specification, therefore, defines an Authority Token issued by an | specification, therefore, defines an Authority Token issued by an | |||
| authority over a namespace to an ACME client for delivery to an ACME | authority over a namespace to an ACME client for delivery to an ACME | |||
| server in response to a challenge. Authority over a hierarchical | server in response to a challenge. Authority over a hierarchical | |||
| namespace can also be delegated, so that delegates of a root | namespace can also be delegated so that delegates of a root authority | |||
| authority can themselves act as Token Authorities for certain types | can themselves act as Token Authorities for certain types of names. | |||
| of names. | ||||
| This architecture assumes a trust relationship between CAs and Token | This architecture assumes a trust relationship between certification | |||
| Authorities: that CAs are willing to accept the attestation of Token | authorities (CAs) and Token Authorities, i.e., that CAs are willing | |||
| Authorities for particular types of identifiers as sufficient proof | to accept the attestation of Token Authorities for particular types | |||
| to issue a credential. It furthermore assumes that ACME clients have | of identifiers as sufficient proof to issue a credential. It | |||
| a relationship with Token Authorities which permits them to | furthermore assumes that ACME clients have a relationship with Token | |||
| authenticate and authorize the issuance of Authority Tokens to the | Authorities, which permits them to authenticate and authorize the | |||
| proper entities. This ACME challenge has no applicability to | issuance of Authority Tokens to the proper entities. This ACME | |||
| identifiers or authorities where those pre-associations cannot be | challenge has no applicability to identifiers or authorities where | |||
| assumed. | those pre-associations cannot be assumed. | |||
| The ACME Authority Token Challenge type, "tkauth-01", is here | The ACME Authority Token Challenge type, "tkauth-01", is here | |||
| specified for use with the "TNAuthList" ACME Identifier Type | specified for use with the "TNAuthList" (Telephone Number | |||
| described in [I-D.ietf-acme-authority-token-tnauthlist]; in order to | Authentication List) ACME Identifier Type described in [RFC9448]; in | |||
| use "tkauth-01" Validation Method with an ACME Identifier type other | order to use the "tkauth-01" Validation Method with an ACME | |||
| than "TNAuthList," that identifier type would need to be listed in a | Identifier Type other than "TNAuthList", that identifier type would | |||
| new registration in the ACME Validation Methods registry maintained | need to be listed in a new registration in the ACME Validation | |||
| by IANA. "tkauth-01" furthermore supports different token subtypes. | Methods registry maintained by IANA. "tkauth-01" furthermore supports | |||
| The token subtype is determined by a new ACME challenge field, | different token subtypes. The token subtype is determined by a new | |||
| tkauth-type. An IANA registry is used to manage the values of | ACME challenge field, tkauth-type. An IANA registry is used to | |||
| tkauth-type, see Section 7.3. Additionally, this challenge type also | manage the values of tkauth-type (see Section 6.3). Additionally, | |||
| has a new "token-authority" field to designate a location where a | this challenge type also has a new "token-authority" field to | |||
| token can be acquired. | designate a location where a token can be acquired. | |||
| 3.1. Token Type Requirements | 3.1. Token Type Requirements | |||
| The IANA will maintain a registry of tkauth-types under a policy of | IANA will maintain a registry of tkauth-types under a policy of | |||
| Specification Required. In order to register a new tkauth-type, | Specification Required. In order to register a new tkauth-type, | |||
| specifications must address the following requirements; in cases | specifications must address the following requirements; in cases | |||
| where a tkauth-type admits of its own subtypes, subtypes inherit | where a tkauth-type admits of its own subtypes, subtypes inherit | |||
| these requirements. | these requirements. | |||
| While Authority Token types do not need to be specific to a | While Authority Token types do not need to be specific to a | |||
| namespace, every token must carry enough information for a CA to | namespace, every token must carry enough information for a CA to | |||
| determine the name for which certificate issuance is authorized. | determine the name for which certificate issuance is authorized. | |||
| Some types of Authority Token types might be reusable for a number of | Some types of Authority Token types might be reusable for a number of | |||
| different namespaces; others might be specific to a particular type | different namespaces; others might be specific to a particular type | |||
| skipping to change at page 5, line 22 ¶ | skipping to change at line 198 ¶ | |||
| authority assignments. Typically, a CA will expect a regular | authority assignments. Typically, a CA will expect a regular | |||
| refreshing of the token. | refreshing of the token. | |||
| 3.2. Authority Token Scope | 3.2. Authority Token Scope | |||
| An Authority Token is used to answer a challenge from an ACME server, | 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 | upon a request for the issuance of a certificate. It could be that | |||
| the Authority Token is requested from the Token Authority after a | the Authority Token is requested from the Token Authority after a | |||
| challenge has been received, or it could be that the Authority Token | challenge has been received, or it could be that the Authority Token | |||
| was acquired prior to the initial ACME client request. A Token | was acquired prior to the initial ACME client request. A Token | |||
| Authority could grant to a client an Authority Token that has the | Authority could grant an Authority Token that has the exact same | |||
| exact same scope as the requested certificate; alternatively, an | scope as the requested certificate to a client; alternatively, an | |||
| Authority Token could attest to all of the resources that the client | Authority Token could attest to all of the resources that the client | |||
| is eligible to receive certificates for, which could be a superset of | is eligible to receive certificates for, which could be a superset of | |||
| the scope of the requested certificate. | the scope of the requested certificate. | |||
| For example, imagine a case where an Authority for DNS names knows | For example, imagine a case where a Token Authority for DNS names | |||
| that a client is eligible to receive certificates for "example.com" | knows that a client is eligible to receive certificates for | |||
| and "example.net". The client asks an ACME server for a certificate | "example.com" and "example.net". The client asks an ACME server for | |||
| for "example.com", the server directs the client to acquire an | a certificate for "example.com", and the server directs the client to | |||
| Authority Token from the Token Authority. When the client sends an | acquire an Authority Token from the Token Authority. When the client | |||
| acquisition request (see Section 5) to the Token Authority, the Token | sends an acquisition request (see Section 5) to the Token Authority, | |||
| Authority could issue a token scoped just to "example.com", or a | the Token Authority could issue a token scoped just to "example.com" | |||
| token that attests the client is eligible to receive certificates for | or a token that attests the client is eligible to receive | |||
| both "example.com" or "example.net". The advantage of the latter is | certificates for both "example.com" or "example.net". The advantage | |||
| that if, at a later time (but one within the expiry of the token), | of the latter is that if, at a later time (but one within the expiry | |||
| the client wanted to acquire a certificate for "example.net", it | of the token), the client wanted to acquire a certificate for | |||
| would not have to return to the Token Authority, as the Token | "example.net", it would not have to return to the Token Authority, as | |||
| effectively pre-authorized the issuance of that certificate. | the Token effectively pre-authorized the issuance of that | |||
| certificate. | ||||
| Applications of the Authority Token to different identifier types | Applications of the Authority Token to different identifier types | |||
| might require different scopes, so registrations of tkauth-types | might require different scopes, so registrations of tkauth-types | |||
| should be clear if and how a scope greater than that of the requested | should be clear about if and how a scope greater than that of the | |||
| certificate would be conveyed in a token. | requested certificate would be conveyed in a token. | |||
| 3.3. Binding Challenges | 3.3. Binding Challenges | |||
| Applications that use the Authority Token need a way to correlate | Applications that use the Authority Token need a way to correlate | |||
| tokens issued by a Token Authority with the proper ACME client, to | 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 | prevent replay or cut-and-paste attacks using a token issued for a | |||
| different purpose. To mitigate this, Authority Tokens contain a | different purpose. To mitigate this, Authority Tokens contain a | |||
| binding signed by a Token Authority; an ACME server can use the | 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 | 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, | granted by the Token Authority based on a request from the client and | |||
| and not from some other entity. It is RECOMMENDED that the ACME | not from some other entity. It is RECOMMENDED that the ACME account | |||
| account fingerprint be used for this purpose. | fingerprint be used for this purpose. | |||
| Creating a binding from an Authority Token to a particular ACME | Creating a binding from an Authority Token to a particular ACME | |||
| account entails that the Token could be reused up until its expiry | account entails that the Token could be reused up until its expiry | |||
| for multiple challenges issued by an ACME server. This might be a | for multiple challenges issued by an ACME server. This might be a | |||
| desirable property when using short-lived certificates, for example, | desirable property when using short-lived certificates, for example, | |||
| or in any cases where the ACME server issues challenges more | in any cases where the ACME server issues challenges more frequently | |||
| frequently that an Authority Token can or should issue tokens, or in | that an Authority Token can or should issue tokens or in cases where | |||
| cases where the Authority Token scope (see Section 3.2) is broad, so | the Authority Token scope (see Section 3.2) is broad, so certificates | |||
| certificates with a more narrow scope may periodically be issued. | with a more narrow scope may periodically be issued. | |||
| For some identifier types, it may be more appropriate to bind the | For some identifier types, it may be more appropriate to bind the | |||
| Authority Token to a nonce specific to the challenge rather than to | Authority Token to a nonce specific to the challenge rather than to | |||
| an ACME account fingerprint. Any specification of the use of the | an ACME account fingerprint. Any specification of the use of the | |||
| nonce or other factors for this purpose is left to the identifier | nonce or other factors for this purpose is left to the identifier | |||
| type profile for the Authority Token. | type profile for the Authority Token. | |||
| Note that the fingerprint value in the client's JWT is reflected in | Note that the fingerprint value in the client's JWT is reflected in | |||
| the Authority Token returned by the Token Authority; the Token | the Authority Token returned by the Token Authority; the Token | |||
| Authority has no requirement to validate that fingerprint. Were a | Authority has no requirement to validate that fingerprint. Were a | |||
| fingerprint to be captured by an attacker which had its own account | fingerprint to be captured by an attacker that had its own account | |||
| with the Token Authority, it could replay that fingerprint in its own | with the Token Authority, it could replay that fingerprint in its own | |||
| JWT in order to receive an Authority Token with that fingerprint. | JWT in order to receive an Authority Token with that fingerprint. | |||
| However, were the attacker to present that Authority Token to an ACME | However, were the attacker to present that Authority Token to an ACME | |||
| service, the service would see the fingerprint does not match the | service, the service would see the fingerprint does not match the | |||
| attacker's ACME account fingerprint. So unless an attacker can | attacker's ACME account fingerprint. So unless an attacker can | |||
| compromise a target ACME account or gain similar privileges, the | compromise a target ACME account or gain similar privileges, the | |||
| binding would be secure. | binding would be secure. | |||
| 4. Authority Token Challenge tkauth-type Registration | 4. Authority Token Challenge tkauth-type Registration | |||
| This draft specifies a tkauth-type of "atc" which contains a standard | This document specifies a tkauth-type of "atc", which contains a | |||
| JWT [RFC7519] using a JWS-defined signature string [RFC7515]. The | standard JWT [RFC7519] using a signature string defined by a JSON Web | |||
| "atc" tkauth-type MAY be used for any number of different ACME | Signature (JWS) [RFC7515]. The "atc" tkauth-type MAY be used for any | |||
| identifier types in the ACME challenge. | number of different ACME Identifier Types in the ACME challenge. | |||
| A new JWT claim, "atc", is defined below and lists the identifier | A new JWT claim, "atc", is defined below and lists the identifier | |||
| type used in this Authority Token. The "atc" tkauth-type is | 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 | restricted to the JWTs; if a non-JWT format is desired for the ACME | |||
| Authority Token Challenge, a different tkauth-type should be | Authority Token Challenge, a different tkauth-type should be | |||
| specified and registered in the "ACME Authority Token Challenge | specified and registered in the "ACME Authority Token Challenge | |||
| Types" registry defined in Section 8. | Types" registry defined in Section 6.3. | |||
| For this ACME Authority Token usage of JWT, the payload of the JWT | For this ACME Authority Token usage of a JWT, it is OPTIONAL for the | |||
| OPTIONALLY contain an "iss" indicating the Token Authority that | payload of the JWT to contain an "iss", indicating the Token | |||
| generated the token, if the "x5u" or "x5c" element in the header does | Authority that generated the token if the "x5u" or "x5c" element in | |||
| not already convey that information; typically, this will be the same | the header does not already convey that information; typically, this | |||
| location that appeared in the "token-authority" field of the ACME | will be the same location that appeared in the "token-authority" | |||
| challenge, when present. In order to satisfy the requirement for | field of the ACME challenge, when present. In order to satisfy the | |||
| replay prevention the JWT MUST contain a "jti" element, and an "exp" | requirement for replay prevention, the JWT MUST contain a "jti" | |||
| claim; the "exp" claim manages token freshness. In addition to | element and an "exp" claim; the "exp" claim manages token freshness. | |||
| helping to manage replay, the "jti" provides a convenient way to | In addition to helping to manage replay, the "jti" provides a | |||
| reliably track when the same "atc" Authority Token is being used for | convenient way to reliably track when the same "atc" Authority Token | |||
| multiple challenges over time within its set lifetime. | is being used for multiple challenges over time within its set | |||
| lifetime. | ||||
| The JWT payload MUST also contain a new JWT claim, "atc", for | The JWT payload MUST also contain a new JWT claim, "atc", for | |||
| Authority Token Challenge, which contains three mandatory elements in | Authority Token Challenge, which contains three mandatory elements in | |||
| a JSON map: the ATC identifier type ("tktype"), the identifier value | a JSON map: the ATC identifier type ("tktype"), the identifier value | |||
| ("tkvalue"), and the binding ("fingerprint"). The use of "tktype" is | ("tkvalue"), and the binding ("fingerprint"). The use of "tktype" is | |||
| restricted to the values in the "ACME Identifier Types" registry as | restricted to the values in the "ACME Identifier Types" registry, as | |||
| defined by [RFC8555]. The identifier type and value are those given | defined by [RFC8555]. The identifier type and value are those given | |||
| in the ACME challenge and conveyed to the Token Authority by the ACME | in the ACME challenge and conveyed to the Token Authority by the ACME | |||
| client. For the purposes of the "atc" tkauth-type, the binding | client. For the purposes of the "atc" tkauth-type, the binding | |||
| "fingerprint" is assumed to be a fingerprint of the ACME credential | "fingerprint" is assumed to be a fingerprint of the ACME credential | |||
| for the account used to request the certificate, but the | for the account used to request the certificate, but the | |||
| specification of how the binding is generated is left to the | specification of how the binding is generated is left to the | |||
| identifier type profile for the Authority Token (see Section 3.3). | identifier type profile for the Authority Token (see Section 3.3). | |||
| The "tkvalue" indicates the scope of the authority that the token, | The "tkvalue" indicates the scope of the authority that the token and | |||
| and its semantics are outside the scope of this document, as they | its semantics are outside the scope of this document, as they will be | |||
| will be specified by the "tkvalue" identifier in a separate | specified by the "tkvalue" identifier in a separate specification. | |||
| specification. | ||||
| Following the example of [I-D.ietf-acme-authority-token-tnauthlist], | Following the example of [RFC9448], the "tktype" identifier type | |||
| the "tktype" identifier type could be the TNAuthList, with a | could be the TNAuthList (as defined in [RFC8226]), which would be the | |||
| "tkvalue" as defined in [RFC8226] that the Token Authority is | value for the "tkvalue" element that the Token Authority is | |||
| attesting. Practically speaking, that scope may comprise a list of | attesting. Practically speaking, that scope may comprise a list of | |||
| Service Provider Code elements, telephone number range elements, and/ | Service Provider Code elements, telephone number range elements, and/ | |||
| or individual telephone numbers. So for example: | or individual telephone numbers. So for example: | |||
| { | { | |||
| "protected": base64url({ | "protected": base64url({ | |||
| "typ":"JWT", | "typ":"JWT", | |||
| "alg":"ES256", | "alg":"ES256", | |||
| "x5u":"https://authority.example.org/cert" | "x5u":"https://authority.example.org/cert" | |||
| }), | }), | |||
| "payload": base64url({ | "payload": base64url({ | |||
| "iss":"https://authority.example.org/authz", | "iss":"https://authority.example.org/authz", | |||
| "exp":1300819380, | "exp":1300819380, | |||
| "jti":"id6098364921", | "jti":"id6098364921", | |||
| "atc":{"tktype":"TnAuthList","tkvalue":"F83n2a...avn27DN3==","fingerprint": | "atc":{"tktype":"TnAuthList","tkvalue":"F83n2a...avn27DN3==", | |||
| "SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:D3:BA:B9:19:81:F8:50: | "fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:D3: | |||
| 9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"} | BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"} | |||
| }), | }), | |||
| "signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ" | "signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ" | |||
| } | } | |||
| Optionally, the "atc" claim may contain a fourth boolean element, | Optionally, the "atc" claim may contain a fourth boolean element, | |||
| "ca". If set to "true", the "ca" element indicates that the Token | "ca". If set to "true", the "ca" element indicates that the Token | |||
| Authority is granting permission to issue a certification authority | Authority is granting permission to issue a certification authority | |||
| certificate rather than an end-entity certificate for the names in | certificate rather than an end-entity certificate for the names in | |||
| question. This permits subordinate delegations from the issued | question. This permits subordinate delegations from the issued | |||
| certificate (using [RFC9115] or similar mechanisms). If the "ca" | certificate (using [RFC9115] or similar mechanisms). If the "ca" | |||
| element is absent, the Token Authority is explicitly withholding | element is absent, the Token Authority is explicitly withholding | |||
| permission. The "atc" object in the example above would then look | permission. The "atc" object in the example above would then look | |||
| like: | like: | |||
| "atc":{"tktype":"TnAuthList","tkvalue":"F83n2a...avn27DN3==","ca":true, | "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: | "ca":true,"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B: | |||
| 9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3"} } | 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 | Specifications of "tktype" identifier types may define additional | |||
| optional "atc" elements. | optional "atc" elements. | |||
| 5. Acquiring a Token | 5. Acquiring a Token | |||
| The acquisition of an Authority Token requires a network interface, | The acquisition of an Authority Token requires a network interface, | |||
| apart from potential use cases where the entity that acts as an ACME | 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 | client itself also acts as a Token Authority trusted by the ACME | |||
| server. Implementations compliant with this specification MUST | server. Implementations compliant with this specification MUST | |||
| support an HTTPS interface for Authority Token acquisition as | support an HTTPS interface for Authority Token acquisition as | |||
| described below, though other interfaces MAY be supported as well. | described below, though other interfaces MAY be supported as well. | |||
| 5.1. Basic REST Interface | 5.1. Basic REST Interface | |||
| In order to request an Authority Token from a Token Authority, a | In order to request an Authority Token from a Token Authority, a | |||
| client sends a HTTPS POST request [RFC7231] . This specification | client sends a HTTPS POST request [RFC9110]. This specification | |||
| assumes that Token Authority URIs are known to clients through | assumes that Token Authority URIs are known to clients through | |||
| preexisting business relationships, and that the credentials and | preexisting business relationships and that the credentials and | |||
| related authentication and authorization for Authority Token | related authentication and authorization for Authority Token | |||
| acquisition are encompassed in that relationship. Different services | acquisition are encompassed in that relationship. Different services | |||
| may organize their web resources in domain-specific ways, but the | may organize their web resources in domain-specific ways, but the | |||
| resource locator should specify the account of the client, an | resource locator should specify the account of the client, an | |||
| identifier for the service provider, and finally a locator for the | identifier for the service provider, and finally a locator for the | |||
| token. | token. | |||
| POST /at/account/:id/token HTTP/1.1 | POST /at/account/:id/token HTTP/1.1 | |||
| Host: authority.example.com | Host: authority.example.com | |||
| Content-Type: application/json | Content-Type: application/json | |||
| skipping to change at page 9, line 35 ¶ | skipping to change at line 386 ¶ | |||
| the client is requesting the Token Authority generate. In this way, | the client is requesting the Token Authority generate. In this way, | |||
| the client proposes the scope of the Authority Token it would like to | the client proposes the scope of the Authority Token it would like to | |||
| receive from the Token Authority. | receive from the Token Authority. | |||
| In common use cases, the "tkvalue" in this request is asking that the | In common use cases, the "tkvalue" in this request is asking that the | |||
| Token Authority issue a token that attests the entire scope of | Token Authority issue a token that attests the entire scope of | |||
| authority to which the client is entitled. The client may also | authority to which the client is entitled. The client may also | |||
| request an Authority Token with some subset of its own authority via | request an Authority Token with some subset of its own authority via | |||
| the "tkvalue" element in the Authority Token Challenge object. The | the "tkvalue" element in the Authority Token Challenge object. The | |||
| way that "tkvalue" is defined will necessarily be specific to the | way that "tkvalue" is defined will necessarily be specific to the | |||
| identifier type. For the TNAuthlist identifier type, for example, an | identifier type. For the TNAuthList identifier type, for example, an | |||
| object requesting an Authority Token could request authority for only | object requesting an Authority Token could request authority for only | |||
| a single telephone number in a way that is defined in the TNAuthList | a single telephone number in a way that is defined in the TNAuthList | |||
| specification. | specification. | |||
| Finally, the JSON object MAY also contain an optional boolean element | Finally, the JSON object MAY also contain an optional boolean | |||
| "ca" which signifies that the client is requesting that the Token | element, "ca", which signifies that the client is requesting that the | |||
| Authority issue an Authority Token with the "ca" flag set, as | Token Authority issue an Authority Token with the "ca" flag set, as | |||
| described in Section 4. | described in Section 4. | |||
| After an HTTPS-level challenge (e.g. a 401 HTTP response code) to | After an HTTPS-level challenge (e.g., a 401 HTTP response code) to | |||
| verify the identity of the client and subsequently making an | verify the identity of the client and subsequently making an | |||
| authorization decision about whether the client should receive an | authorization decision about whether the client should receive an | |||
| Authority Token with the requested scope, then in the success case, | Authority Token with the requested scope, then in the success case, | |||
| the Token Authority MUST return a 200 OK with a body of type | the Token Authority MUST return a 200 OK with a body of type | |||
| "application/json" containing the Authority Token. | "application/json" containing the Authority Token. | |||
| A full example of "atc" token acquisition using the HTTP interface, | A full example of "atc" token acquisition using the HTTP interface, | |||
| with the "tktype" of "TNAuthList", is given in | with the "tktype" of "TNAuthList", is given in Section 5.5 of | |||
| [I-D.ietf-acme-authority-token-tnauthlist] Section 5.5. | [RFC9448]. | |||
| 6. Acknowledgements | 6. IANA Considerations | |||
| We would like to Roman Danyliw and Ben Kaduk for contributions to | 6.1. ACME Validation Method Registration | |||
| this problem statement and framework. | ||||
| 7. IANA Considerations | 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: | ||||
| 7.1. ACME Validation Method Registration | Label: tkauth-01 | |||
| This document requests that IANA populate a new ACME Validation | Identifier Type: TNAuthList | |||
| Method (again per [RFC8555]) in the ACME Validation Methods sub- | ||||
| registry of the Automated Certificate Management Environment (ACME) | ||||
| Protocol registry group for the label "tkauth-01", identifier type | ||||
| "TNAuthList", an ACME value of "Y", and a reference pointing to | ||||
| [RFCThis]. | ||||
| Note to the RFC Editor: Please replace [RFCThis] throughout this | ACME: Y | |||
| document with the RFC number assigned to this specification. | ||||
| 7.2. JSON Web Token Claim Registration | Reference: RFC 9447 | |||
| This document asks IANA to populate a new claim in the "JSON Web | 6.2. JSON Web Token Claim Registration | |||
| Token Claims" registry as defined in [RFC7519] as follows: | ||||
| Claim name: atc | IANA has added a new claim in the "JSON Web Token Claims" registry, | |||
| as defined in [RFC7519], as follows: | ||||
| Claim Description: Authority Token Challenge | Claim name: atc | |||
| Change Controller: IESG | Claim Description: Authority Token Challenge | |||
| Specification document(s): [RFCThis] | Change Controller: IETF | |||
| 7.3. Creation of ACME Authority Token Challenge Type Registry | Specification document(s): RFC 9447 | |||
| This document requests that the IANA create a new registry for "ACME | 6.3. Creation of ACME Authority Token Challenge Types Registry | |||
| 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, Reference and Description. | ||||
| The registry should be pre-populated with a Label of "atc" per | ||||
| Section 4 with a Reference value of [RFCThis], and a Description of | ||||
| "JSON Web Token (JWT) challenge type." | ||||
| 8. Security Considerations | 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 | Per the guidance in [RFC8555], ACME transactions MUST use TLS, and | |||
| similarly the HTTPS REST transactions used to request and acquire | similarly, the HTTPS REST transactions used to request and acquire | |||
| Authority Tokens MUST use TLS. These measures are intended to | Authority Tokens MUST use TLS. These measures are intended to | |||
| prevent the capture of Authority Tokens by eavesdroppers. A | prevent the capture of Authority Tokens by eavesdroppers. A | |||
| preexisting trust relationship between the HTTPS REST client and the | preexisting trust relationship between the HTTPS REST client and the | |||
| Token Authority must also exist in order for the parties to | Token Authority must also exist in order for the parties to | |||
| meaningfully authenticate one another. The security considerations | meaningfully authenticate one another. The security considerations | |||
| of [RFC8555] apply to the use of the mechanism in this specification. | of [RFC8555] apply to the use of the mechanism in this specification. | |||
| Implementations should follow the best practices identified in | Implementations should follow the best practices identified in | |||
| [RFC8725]. | [RFC8725]. | |||
| As described in Section 3.2, an Authority Token can either have a | As described in Section 3.2, an Authority Token can either have a | |||
| scope that attests all of the resources which a client is eligible to | scope that attests all of the resources that a client is eligible to | |||
| receive certificates for, or potentially a more limited scope that is | receive certificates for or potentially a more limited scope that is | |||
| intended to capture only those resources for which a client will | intended to capture only those resources for which a client will | |||
| receive a certificate from a particular certification authority. Any | receive a certificate from a particular certification authority. Any | |||
| certification authority that sees an Authority Token can learn | certification authority that sees an Authority Token can learn | |||
| information about the resources a client can claim. In cases where | information about the resources a client can claim. In cases where | |||
| this incurs a privacy risk, Authority Token scopes should be limited | this incurs a privacy risk, Authority Token scopes should be limited | |||
| to only the resources that will be attested by the requested ACME | to only the resources that will be attested by the requested ACME | |||
| certificate. | certificate. | |||
| In cases where a tkauth-type as defined in Section 4 admits of its | In cases where a tkauth-type, as defined in Section 4, admits of its | |||
| own subtypes, the security of features like binding challenges (see | own subtypes, the security of features like binding challenges (see | |||
| Section 3.3) will depend on the subtype specification. | Section 3.3) will depend on the subtype specification. | |||
| The capture of Authority Tokens by an adversary could enable an | The capture of Authority Tokens by an adversary could enable an | |||
| attacker to acquire a certificate from a CA. Therefore, all | attacker to acquire a certificate from a CA. Therefore, all | |||
| Authority Tokens MUST contain a field that identifies to the CA which | Authority Tokens MUST contain a field that identifies to the CA which | |||
| ACME client requested the token from the Token Authority; here that | ACME client requested the token from the Token Authority; here, that | |||
| is the fingerprint specified in Section 4). All Authority Tokens | is the fingerprint specified in Section 4. All Authority Tokens must | |||
| must specify an expiry (of the token itself as proof for a CA, as | specify an expiry (of the token itself as proof for a CA, as opposed | |||
| opposed to the expiry of the name), and for some application, it may | to the expiry of the name), and for some applications, it may make | |||
| make sense of that expiry to be quite short. ACME services relying | sense for that expiry to be quite short. ACME services relying on | |||
| on Authority Tokens SHOULD not issue certificates with a longer | Authority Tokens SHOULD NOT issue certificates with a longer expiry | |||
| expiry than the expiry of the Authority Token. Any protocol used to | than the expiry of the Authority Token. Any protocol used to | |||
| retrieve Authority Tokens from a Token Authority MUST use | retrieve Authority Tokens from a Token Authority MUST use | |||
| confidentiality to prevetn eavesdroppers from acquiring an Authority | confidentiality to prevent eavesdroppers from acquiring an Authority | |||
| Token. The details of this protocol are out of the scope of this | Token. The details of this protocol are out of the scope of this | |||
| specification. | specification. | |||
| This document only specifies SHA256 for the fingerprint hash. | This document only specifies SHA256 for the fingerprint hash. | |||
| However, the syntax of the fingerprint object would permit other keys | However, the syntax of the fingerprint object would permit other keys | |||
| if, due to concerns about algorithmic agility, a more robust | if, due to concerns about algorithmic agility, a more robust | |||
| algorithm were required at a future time. Future specifications can | algorithm were required at a future time. Future specifications can | |||
| define new keys for the fingerprint object as needed. | define new keys for the fingerprint object as needed. | |||
| 9. References | 8. References | |||
| 9.1. Normative References | ||||
| [I-D.ietf-acme-authority-token-tnauthlist] | 8.1. Normative References | |||
| Wendt, C., Hancock, D., Barnes, M., and J. Peterson, | ||||
| "TNAuthList profile of ACME Authority Token", Work in | ||||
| Progress, Internet-Draft, draft-ietf-acme-authority-token- | ||||
| tnauthlist-10, 16 September 2022, | ||||
| <https://www.ietf.org/archive/id/draft-ietf-acme- | ||||
| authority-token-tnauthlist-10.txt>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | ||||
| Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | ||||
| <https://www.rfc-editor.org/info/rfc4648>. | ||||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | ||||
| DOI 10.17487/RFC7231, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7231>. | ||||
| [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web | [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web | |||
| Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | |||
| 2015, <https://www.rfc-editor.org/info/rfc7515>. | 2015, <https://www.rfc-editor.org/info/rfc7515>. | |||
| [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| skipping to change at page 13, line 10 ¶ | skipping to change at line 530 ¶ | |||
| [RFC8555] Barnes, R., Hoffman-Andrews, J., McCarney, D., and J. | [RFC8555] Barnes, R., Hoffman-Andrews, J., McCarney, D., and J. | |||
| Kasten, "Automatic Certificate Management Environment | Kasten, "Automatic Certificate Management Environment | |||
| (ACME)", RFC 8555, DOI 10.17487/RFC8555, March 2019, | (ACME)", RFC 8555, DOI 10.17487/RFC8555, March 2019, | |||
| <https://www.rfc-editor.org/info/rfc8555>. | <https://www.rfc-editor.org/info/rfc8555>. | |||
| [RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best | [RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best | |||
| Current Practices", BCP 225, RFC 8725, | Current Practices", BCP 225, RFC 8725, | |||
| DOI 10.17487/RFC8725, February 2020, | DOI 10.17487/RFC8725, February 2020, | |||
| <https://www.rfc-editor.org/info/rfc8725>. | <https://www.rfc-editor.org/info/rfc8725>. | |||
| 9.2. Informative References | [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 | [RFC8226] Peterson, J. and S. Turner, "Secure Telephone Identity | |||
| Credentials: Certificates", RFC 8226, | Credentials: Certificates", RFC 8226, | |||
| DOI 10.17487/RFC8226, February 2018, | DOI 10.17487/RFC8226, February 2018, | |||
| <https://www.rfc-editor.org/info/rfc8226>. | <https://www.rfc-editor.org/info/rfc8226>. | |||
| [RFC8396] Peterson, J. and T. McGarry, "Managing, Ordering, | [RFC8396] Peterson, J. and T. McGarry, "Managing, Ordering, | |||
| Distributing, Exposing, and Registering Telephone Numbers | Distributing, Exposing, and Registering Telephone Numbers | |||
| (MODERN): Problem Statement, Use Cases, and Framework", | (MODERN): Problem Statement, Use Cases, and Framework", | |||
| RFC 8396, DOI 10.17487/RFC8396, July 2018, | RFC 8396, DOI 10.17487/RFC8396, July 2018, | |||
| <https://www.rfc-editor.org/info/rfc8396>. | <https://www.rfc-editor.org/info/rfc8396>. | |||
| [RFC9115] Sheffer, Y., López, D., Pastor Perales, A., and T. | [RFC9115] Sheffer, Y., López, D., Pastor Perales, A., and T. | |||
| Fossati, "An Automatic Certificate Management Environment | Fossati, "An Automatic Certificate Management Environment | |||
| (ACME) Profile for Generating Delegated Certificates", | (ACME) Profile for Generating Delegated Certificates", | |||
| RFC 9115, DOI 10.17487/RFC9115, September 2021, | RFC 9115, DOI 10.17487/RFC9115, September 2021, | |||
| <https://www.rfc-editor.org/info/rfc9115>. | <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 | Authors' Addresses | |||
| Jon Peterson | Jon Peterson | |||
| Neustar, Inc. | Neustar, Inc. | |||
| Email: jon.peterson@team.neustar | Email: jon.peterson@team.neustar | |||
| Mary Barnes | Mary Barnes | |||
| Neustar, Inc. | Neustar, Inc. | |||
| Email: mary.ietf.barnes@gmail.com | Email: mary.ietf.barnes@gmail.com | |||
| David Hancock | David Hancock | |||
| Comcast | Somos | |||
| Email: davidhancock.ietf@gmail.com | Email: davidhancock.ietf@gmail.com | |||
| Chris Wendt | Chris Wendt | |||
| Somos | Somos | |||
| Email: chris-ietf@chriswendt.net | Email: chris-ietf@chriswendt.net | |||
| End of changes. 69 change blocks. | ||||
| 226 lines changed or deleted | 215 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||