| draft-ietf-sidr-publication-09.txt | draft-ietf-sidr-publication-10.txt | |||
|---|---|---|---|---|
| Network Working Group S. Weiler | Network Working Group S. Weiler | |||
| Internet-Draft Parsons | Internet-Draft W3C / MIT | |||
| Intended status: Standards Track A. Sonalker | Intended status: Standards Track A. Sonalker | |||
| Expires: March 25, 2017 TowerSec | Expires: July 14, 2017 TowerSec | |||
| R. Austein | R. Austein | |||
| Dragon Research Labs | Dragon Research Labs | |||
| September 21, 2016 | January 10, 2017 | |||
| A Publication Protocol for the Resource Public Key Infrastructure (RPKI) | A Publication Protocol for the Resource Public Key Infrastructure (RPKI) | |||
| draft-ietf-sidr-publication-09 | draft-ietf-sidr-publication-10 | |||
| Abstract | Abstract | |||
| This document defines a protocol for publishing Resource Public Key | This document defines a protocol for publishing Resource Public Key | |||
| Infrastructure (RPKI) objects. Even though the RPKI will have many | Infrastructure (RPKI) objects. Even though the RPKI will have many | |||
| participants issuing certificates and creating other objects, it is | participants issuing certificates and creating other objects, it is | |||
| operationally useful to consolidate the publication of those objects. | operationally useful to consolidate the publication of those objects. | |||
| This document provides the protocol for doing so. | Even in cases where a certificate issuer runs their own publication | |||
| repository, it can be useful to run the certificate engine itself on | ||||
| a different machine from the publication repository. This document | ||||
| defines a protocol which addresses these needs. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on March 25, 2017. | This Internet-Draft will expire on July 14, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Historical Note . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Protocol Specification . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Common XML Message Format . . . . . . . . . . . . . . . . 4 | 2. Protocol Specification . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Publication and Withdrawal . . . . . . . . . . . . . . . 4 | 2.1. Common XML Message Format . . . . . . . . . . . . . . . . 5 | |||
| 2.3. Listing the repository . . . . . . . . . . . . . . . . . 5 | 2.2. Publication and Withdrawal . . . . . . . . . . . . . . . 6 | |||
| 2.4. Error handling . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. Listing the repository . . . . . . . . . . . . . . . . . 7 | |||
| 2.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.4. Error handling . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.6. XML Schema . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.6. XML Schema . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.1. <publish/> Query, No Existing Object . . . . . . . . . . 9 | 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.2. <publish/> Query, Overwriting Existing Object . . . . . . 10 | 3.1. <publish/> Query, No Existing Object . . . . . . . . . . 11 | |||
| 3.3. <withdraw/> Query . . . . . . . . . . . . . . . . . . . . 10 | 3.2. <publish/> Query, Overwriting Existing Object . . . . . . 11 | |||
| 3.4. <success/> Reply . . . . . . . . . . . . . . . . . . . . 10 | 3.3. <withdraw/> Query . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5. <report_error/> With Optional Elements . . . . . . . . . 10 | 3.4. <success/> Reply . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.6. <report_error/> Without Optional Elements . . . . . . . . 11 | 3.5. <report_error/> With Optional Elements . . . . . . . . . 12 | |||
| 3.7. Error Handling With Multi-Element Queries . . . . . . . . 11 | 3.6. <report_error/> Without Optional Elements . . . . . . . . 13 | |||
| 3.7.1. Multi-Element Query . . . . . . . . . . . . . . . . . 11 | 3.7. Error Handling With Multi-Element Queries . . . . . . . . 13 | |||
| 3.7.2. Successful Multi-Element Response . . . . . . . . . . 12 | 3.7.1. Multi-Element Query . . . . . . . . . . . . . . . . . 13 | |||
| 3.7.3. Failure Multi-Element Response, First Error Only . . 12 | 3.7.2. Successful Multi-Element Response . . . . . . . . . . 14 | |||
| 3.7.4. Failure Multi-Element Response, All Errors . . . . . 13 | 3.7.3. Failure Multi-Element Response, First Error Only . . 14 | |||
| 3.8. <list/> Query . . . . . . . . . . . . . . . . . . . . . . 14 | 3.7.4. Failure Multi-Element Response, All Errors . . . . . 15 | |||
| 3.9. <list/> Reply . . . . . . . . . . . . . . . . . . . . . . 14 | 3.8. <list/> Query . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 4. Operational Considerations . . . . . . . . . . . . . . . . . 14 | 3.9. <list/> Reply . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 4. Operational Considerations . . . . . . . . . . . . . . . . . 16 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 17 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 17 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 19 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| 1. Introduction | 1. Introduction | |||
| This document assumes a working knowledge of the Resource Public Key | This document assumes a working knowledge of the Resource Public Key | |||
| Infrastructure (RPKI), which is intended to support improved routing | Infrastructure (RPKI), which is intended to support improved routing | |||
| security on the Internet. [RFC6480] | security on the Internet. See [RFC6480] for an overview of the RPKI. | |||
| In order to make participation in the RPKI easier, it is helpful to | In order to make participation in the RPKI easier, it is helpful to | |||
| have a few consolidated repositories for RPKI objects, thus saving | have a few consolidated repositories for RPKI objects, thus saving | |||
| every participant from the cost of maintaining a new service. | every participant from the cost of maintaining a new service. | |||
| Similarly, relying parties using the RPKI objects will find it faster | Similarly, relying parties using the RPKI objects will find it faster | |||
| and more reliable to retrieve the necessary set from a smaller number | and more reliable to retrieve the necessary set from a smaller number | |||
| of repositories. | of repositories. | |||
| These consolidated RPKI object repositories will in many cases be | These consolidated RPKI object repositories will in many cases be | |||
| outside the administrative scope of the organization issuing a given | outside the administrative scope of the organization issuing a given | |||
| RPKI object. In some cases, outsourcing operation of the repository | RPKI object. In some cases, outsourcing operation of the repository | |||
| will be an explicit goal: some resource holders who strongly wish to | will be an explicit goal: some resource holders who strongly wish to | |||
| control their own RPKI private keys may lack the resources to operate | control their own RPKI private keys may lack the resources to operate | |||
| a 24x7 repository, or may simply not wish to do so. | a 24x7 repository, or may simply not wish to do so. | |||
| The operator of an RPKI publication repository may well be an | The operator of an RPKI publication repository may well be an | |||
| Internet registry which issues certificates to its customers, but it | Internet registry which issues certificates to its customers, but it | |||
| need not be; conceptually, operation of a an RPKI publication | need not be; conceptually, operation of a an RPKI publication | |||
| repository is separate from operation of RPKI CA. | repository is separate from operation of RPKI CA. | |||
| Even in cases where a resource holder operates both a certificate | ||||
| engine and a publication repository, it can be useful to separate the | ||||
| two functions, as they have somewhat different operational and | ||||
| security requirements. | ||||
| This document defines an RPKI publication protocol which allows | This document defines an RPKI publication protocol which allows | |||
| publication either within or across organizational boundaries, and | publication either within or across organizational boundaries, and | |||
| which makes fairly minimal demands on either the CA engine or the | which makes fairly minimal demands on either the CA engine or the | |||
| publication service. | publication service. | |||
| 1.1. Terminology | The authentication and message integrity architecture of the | |||
| publication protocol is essentially identical to the architecture | ||||
| used in [RFC6492], because the participants in this protocol are the | ||||
| same CA engines as in RFC 6492; this allows reuse of the same | ||||
| "Business PKI" ("BPKI", see Section 1.2) infrastructure used to | ||||
| support RFC 6492. As in RCC 6492, authorization is a matter of | ||||
| external configuration: we assume that any given publication | ||||
| repository has some kind of policy controlling which certificate | ||||
| engines are allowed to publish, modify, or withdraw particular RPKI | ||||
| objects, most likely following the recommendation in [RFC6480] | ||||
| Section 4.4, the details of this policy are a private matter between | ||||
| the operator of a certificate engine and the operator of the chosen | ||||
| publication repository. | ||||
| The following diagram attempts to convey where this publication | ||||
| protocol fits into the overall data flow between the certificate | ||||
| issuers and relying parties: | ||||
| +------+ +------+ +------+ | ||||
| | CA | | CA | | CA | | ||||
| +------+ +------+ +------+ | ||||
| | | | Publication Protocol | ||||
| | | | Business relationship | ||||
| +-------+ | +--------+ perhaps set up by | ||||
| | | | draft-ietf-sidr-rpki-oob-setup | ||||
| +----v---v--v-----+ | ||||
| | | | ||||
| | Publication | | ||||
| | Repository | | ||||
| | | | ||||
| +-----------------+ Distribution protocols | ||||
| | rsync or RRDP | ||||
| +--------------+----------------+ | ||||
| | | | | ||||
| +-------v-----+ +------v------+ +------v------+ | ||||
| | Relying | | Relying | | Relying | | ||||
| | Party | | Party | | Party | | ||||
| +-------------+ +-------------+ +-------------+ | ||||
| The publication protocol itself is not visible to relying parties: a | ||||
| relying party sees the public interface of the publication server, | ||||
| which is an rsync or RRDP ([I-D.ietf-sidr-delta-protocol]) server. | ||||
| Operators of certificate engines and publication repositories may | ||||
| find [I-D.ietf-sidr-rpki-oob-setup] a useful tool in setting up the | ||||
| pairwise relationships between these servers, but are not required to | ||||
| use it. | ||||
| 1.1. Historical Note | ||||
| This protocol started out as an informal collaboration between | ||||
| several of the early RPKI implementers, and while it was always the | ||||
| designers' intention that the resulting protocol end up on the IETF | ||||
| standards track, it took a few years to get there, because | ||||
| standardization of other pieces of the overall RPKI protocol space | ||||
| was more urgent. The standards track version of this publication | ||||
| protocol preserves the original XML namespace and protocol version | ||||
| scheme in order to maintain backwards compatibility with running code | ||||
| implemented against older versions of the specification. | ||||
| 1.2. Terminology | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| "Publication engine" and "publication server" are used | "Publication engine" and "publication server" are used | |||
| interchangeably to refer to the server providing the service | interchangeably to refer to the server providing the service | |||
| described in this document. | described in this document. | |||
| "Business Public Key Infrastructure" ("Business PKI" or "BPKI") | "Business Public Key Infrastructure" ("Business PKI" or "BPKI") | |||
| refers to a PKI, separate from the RPKI, used to authenticate clients | refers to a PKI, separate from the RPKI, used to authenticate clients | |||
| to the publication engine. We use the term "Business PKI" here | to the publication engine. We use the term "Business PKI" here | |||
| because an Internet registry might already have a PKI for | because an Internet registry might already have a PKI for | |||
| authenticating its clients and might wish to reuse that PKI for this | authenticating its clients and might wish to reuse that PKI for this | |||
| protocol. There is, however, no requirement to reuse such a PKI. | protocol. There is, however, no requirement to reuse such a PKI. | |||
| 2. Protocol Specification | 2. Protocol Specification | |||
| The publication protocol uses XML messages wrapped in signed CMS | The publication protocol uses XML ([XML]) messages wrapped in signed | |||
| messages, carried over HTTP transport. | CMS messages, carried over HTTP transport. | |||
| The publication protocol uses a simple request/response interaction. | The publication protocol uses a simple request/response interaction. | |||
| The client passes a request to the server, and the server generates a | The client passes a request to the server, and the server generates a | |||
| corresponding response. | corresponding response. | |||
| A message exchange commences with the client initiating an HTTP POST | A message exchange commences with the client initiating an HTTP POST | |||
| with content type of "application/rpki-publication", with the message | with content type of "application/rpki-publication", with the message | |||
| object as the body. The server's response will similarly be the body | object as the body. The server's response will similarly be the body | |||
| of the response with a content type of "application/rpki- | of the response with a content type of "application/rpki- | |||
| publication". | publication". | |||
| The content of the POST and the server's response will be a well- | The content of the POST and the server's response will be a well- | |||
| formed Cryptographic Message Syntax (CMS) [RFC5652] object with OID = | formed Cryptographic Message Syntax (CMS) [RFC5652] object with OID = | |||
| 1.2.840.113549.1.7.2 as described in Section 3.1 of [RFC6492]. | 1.2.840.113549.1.7.2 as described in Section 3.1 of [RFC6492]. | |||
| The CMS signatures are used to protect the integrity of the protocol | ||||
| messages and to authenticate the client and server to each other. | ||||
| Authorization to perform particular operations is a local matter, | ||||
| perhaps determined by contractual agreements between the operators of | ||||
| any particular client-server pair, but in any case is beyond the | ||||
| scope of this specification. | ||||
| 2.1. Common XML Message Format | 2.1. Common XML Message Format | |||
| The XML schema for this protocol is below in Section 2.6. The basic | The XML schema for this protocol is below in Section 2.6. The basic | |||
| XML message format looks like this: | XML message format looks like this: | |||
| <msg | <msg | |||
| type="query" | type="query" | |||
| version="4" | version="4" | |||
| xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | |||
| <!-- Zero or more PDUs --> | <!-- Zero or more PDUs --> | |||
| skipping to change at page 4, line 44 | skipping to change at page 6, line 24 | |||
| protocol. This document describes version 4. | protocol. This document describes version 4. | |||
| type: The possible values of this attribute are "reply" and "query". | type: The possible values of this attribute are "reply" and "query". | |||
| A query PDU may be one of three types: <publish/>, <withdraw/>, or | A query PDU may be one of three types: <publish/>, <withdraw/>, or | |||
| <list/>. | <list/>. | |||
| A reply PDU may be one of three types: <success/>, <list/>, or | A reply PDU may be one of three types: <success/>, <list/>, or | |||
| <report_error/>. | <report_error/>. | |||
| The <publish/> and <withdraw/> PDUs include a tag to facilitate bulk | The <publish/> and <withdraw/> PDUs include a "tag" attribute to | |||
| operation. | facilitate bulk operation. When performing bulk operations, a CA | |||
| engine will probably find it useful to specify a distinct tag value | ||||
| for each <publish/> or <withdraw/> PDU, to simplify matching an error | ||||
| with the PDU which triggered it. The tag attribute is mandatory, to | ||||
| simplify parsing, but a CA engine which has no particular use for | ||||
| tagging MAY use any syntactically legal value, including simply using | ||||
| the empty string for all tag fields. | ||||
| 2.2. Publication and Withdrawal | 2.2. Publication and Withdrawal | |||
| The publication protocol uses a common message format to request | The publication protocol uses a common message format to request | |||
| publication of any RPKI object. This format was chosen specifically | publication of any RPKI object. This format was chosen specifically | |||
| to allow this protocol to accommodate new types of RPKI objects | to allow this protocol to accommodate new types of RPKI objects | |||
| without needing changes to this protocol. | without needing changes to this protocol. | |||
| Both the <publish/> and <withdraw/> PDUs have a payload of a tag and | Both the <publish/> and <withdraw/> PDUs have a payload of a tag and | |||
| a URI. The <publish/> query also contains the DER object to be | a URI. The <publish/> query also contains the DER object to be | |||
| published, encoded in Base64. | published, encoded in Base64. | |||
| Both the <publish/> and <withdraw/> PDUs also have a "hash" | Both the <publish/> and <withdraw/> PDUs also have a "hash" | |||
| attribute, which carries a hash of an existing object at the | attribute, which carries a hash of an existing object at the | |||
| specified repository URI. For <withdraw/> PDUs, the hash is | specified repository URI, encoded as a hexadecimal string. For | |||
| mandatory, as this operation makes no sense if there is no existing | <withdraw/> PDUs, the hash MUST be present, as this operation makes | |||
| object to withdraw. For <publish/> PDUs, the hash MUST be present if | no sense if there is no existing object to withdraw. For <publish/> | |||
| the publication operation is overwriting an existing object, and MUST | PDUs, the hash is MUST be present if the publication operation is | |||
| be omitted if this publication operation is writing to a new URI | overwriting an existing object, and MUST NOT be present if this | |||
| where no prior object exists. Presence of an object when no "hash" | publication operation is writing to a new URI where no prior object | |||
| attribute is specified is an error, as is absence of the "hash" | exists. Presence of an object when no "hash" attribute has been | |||
| attribute or an incorrect hash value when an object is present. Any | specified is an error, as is absence of an object or an incorrect | |||
| such errors MUST be reported using the <report_error/> PDU. | hash value when a "hash" attribute has been specified. Any such | |||
| errors MUST be reported using the <report_error/> PDU. | ||||
| The hash algorithm is SHA-256 [SHS], to simplify comparison of | The hash algorithm is SHA-256 [SHS], to simplify comparison of | |||
| publication protocol hashes with RPKI manifest hashes. | publication protocol hashes with RPKI manifest hashes. | |||
| The intent behind the "hash" attribute is to allow the client and | The intent behind the "hash" attribute is to allow the client and | |||
| server to detect any disagreements about the effect that a <publish/> | server to detect any disagreements about the effect that a <publish/> | |||
| or <withdraw/> PDU will have on the repository. | or <withdraw/> PDU will have on the repository. | |||
| Note that every publish and withdraw action requires a new manifest, | Note that every publish and withdraw action requires a new manifest, | |||
| thus every publish or withdraw action will involve at least two | thus every publish or withdraw action will involve at least two | |||
| objects. | objects. | |||
| Processing of a query message is handled atomically: either the | Processing of a query message is handled atomically: either the | |||
| entire query succeeds or none of it does. When a query message | entire query succeeds or none of it does. When a query message | |||
| contains multiple PDUs, failure of any PDU may require the server to | contains multiple PDUs, failure of any PDU may require the server to | |||
| roll back actions triggered by earlier PDUs. | roll back actions triggered by earlier PDUs. | |||
| When a query messages containing <publish/> and/or <withdraw/> PDUs | When a query messages containing <publish/> or <withdraw/> PDUs | |||
| succeeds, a single <success/> reply is returned. | succeeds, the server returns a single <success/> reply. | |||
| When a query fails, one or more <report_error/> reply PDUs are | When a query fails, the server returns one or more <report_error/> | |||
| generated. Typically, only one <report_error/> reply is generated, | reply PDUs. Typically, a server will only generate one | |||
| corresponding to the first query PDU that failed. Servers are | <report_error/> corresponding to the first query PDU that failed, but | |||
| permitted to return multiple <report_error/> PDUs. | servers MAY return multiple <report_error/> PDUs at the implementor's | |||
| discretion. | ||||
| 2.3. Listing the repository | 2.3. Listing the repository | |||
| The <list/> operation allows the client to ask the server for a | The <list/> operation allows the client to ask the server for a | |||
| complete listing of objects which the server believes the client has | complete listing of objects which the server believes the client has | |||
| published. This is intended primarily to allow the client to recover | published. This is intended primarily to allow the client to recover | |||
| upon detecting (probably via use of the "hash" attribute, see | upon detecting (probably via use of the "hash" attribute, see | |||
| Section 2.2) that they have somehow lost synchronization. | Section 2.2) that they have somehow lost synchronization. | |||
| The <list/> query consists of a single PDU. A <list/> query must be | The <list/> query consists of a single PDU. A <list/> query MUST be | |||
| the only PDU in a query - it may not be combined with any <publish/> | the only PDU in a query - it may not be combined with any <publish/> | |||
| or <withdraw/> queries. | or <withdraw/> queries. | |||
| The <list/> reply consists of zero or more PDUs, one per object | The <list/> reply consists of zero or more PDUs, one per object | |||
| published in this repository by this client, each PDU conveying the | published in this repository by this client, each PDU conveying the | |||
| URI and hash of one published object. | URI and hash of one published object. | |||
| 2.4. Error handling | 2.4. Error handling | |||
| Errors are handled at two levels. | Errors are handled at two levels. | |||
| skipping to change at page 7, line 45 | skipping to change at page 9, line 34 | |||
| will cause a consistency problem (e.g. an object was deleted, but | will cause a consistency problem (e.g. an object was deleted, but | |||
| the manifest was not updated). Note that a server is not required | the manifest was not updated). Note that a server is not required | |||
| to make such checks. Indeed, it may be unwise for a server to do | to make such checks. Indeed, it may be unwise for a server to do | |||
| so. This error code just provides a way for the server to explain | so. This error code just provides a way for the server to explain | |||
| its (in-)action. | its (in-)action. | |||
| other_error: A meteor fell on the server. | other_error: A meteor fell on the server. | |||
| 2.6. XML Schema | 2.6. XML Schema | |||
| The following is a RelaxNG compact form schema describing the | The following is a [RelaxNG] compact form schema describing the | |||
| Publication Protocol. | Publication Protocol. | |||
| # $Id: rpki-publication.rnc 3785 2016-09-21 22:21:58Z sra $ | This schema is normative: in the event of a disagreement between this | |||
| schema and the document text above, this schema is authoritative. | ||||
| # RelaxNG schema for RPKI publication protocol. | # RelaxNG schema for RPKI publication protocol. | |||
| default namespace = | default namespace = | |||
| "http://www.hactrn.net/uris/rpki/publication-spec/" | "http://www.hactrn.net/uris/rpki/publication-spec/" | |||
| # This is version 4 of the protocol. | # This is version 4 of the protocol. | |||
| version = "4" | version = "4" | |||
| # Top level PDU is either a query or a reply. | # Top level PDU is either a query or a reply. | |||
| skipping to change at page 9, line 41 | skipping to change at page 11, line 33 | |||
| Note the authors have taken liberties with the Base64, hash, and URI | Note the authors have taken liberties with the Base64, hash, and URI | |||
| text in these examples in the interest of making the examples fit | text in these examples in the interest of making the examples fit | |||
| nicely into RFC text format. | nicely into RFC text format. | |||
| 3.1. <publish/> Query, No Existing Object | 3.1. <publish/> Query, No Existing Object | |||
| <msg | <msg | |||
| type="query" | type="query" | |||
| version="4" | version="4" | |||
| xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | |||
| <!-- body is base64(new-object) --> | ||||
| <publish | <publish | |||
| tag="foo" | tag="" | |||
| uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"> | uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"> | |||
| SGVsbG8sIG15IG5hbWUgaXMgQWxpY2U= | SGVsbG8sIG15IG5hbWUgaXMgQWxpY2U= | |||
| </publish> | </publish> | |||
| </msg> | </msg> | |||
| 3.2. <publish/> Query, Overwriting Existing Object | 3.2. <publish/> Query, Overwriting Existing Object | |||
| <msg | <msg | |||
| type="query" | type="query" | |||
| version="4" | version="4" | |||
| xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | |||
| <!-- hash is hex(SHA-256(old-object)) --> | ||||
| <!-- body is base64(new-object) --> | ||||
| <publish | <publish | |||
| hash="01a97a70ac477f06" | hash="01a97a70ac477f06" | |||
| tag="foo" | tag="foo" | |||
| uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"> | uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"> | |||
| SGVsbG8sIG15IG5hbWUgaXMgQWxpY2U= | SGVsbG8sIG15IG5hbWUgaXMgQWxpY2U= | |||
| </publish> | </publish> | |||
| </msg> | </msg> | |||
| 3.3. <withdraw/> Query | 3.3. <withdraw/> Query | |||
| <msg | <msg | |||
| type="query" | type="query" | |||
| version="4" | version="4" | |||
| xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | xmlns="http://www.hactrn.net/uris/rpki/publication-spec/"> | |||
| <!-- hash is hex(SHA-256(old-object)) --> | ||||
| <withdraw | <withdraw | |||
| hash="01a97a70ac477f06" | hash="01a97a70ac477f06" | |||
| tag="foo" | tag="foo" | |||
| uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"/> | uri="rsync://wombat.example/Alice/01a97a70ac477f06.cer"/> | |||
| </msg> | </msg> | |||
| 3.4. <success/> Reply | 3.4. <success/> Reply | |||
| <msg | <msg | |||
| type="reply" | type="reply" | |||
| skipping to change at page 14, line 48 | skipping to change at page 16, line 48 | |||
| publication client is given its own directory one level below the top | publication client is given its own directory one level below the top | |||
| of the rsync module, and there is no overlap between the publication | of the rsync module, and there is no overlap between the publication | |||
| spaces used by different clients. For example: | spaces used by different clients. For example: | |||
| rsync://example.org/rpki/Alice/ | rsync://example.org/rpki/Alice/ | |||
| rsync://example.org/rpki/Bob/ | rsync://example.org/rpki/Bob/ | |||
| rsync://example.org/rpki/Carol/ | rsync://example.org/rpki/Carol/ | |||
| This has the advantage of being very easy for the publication | This has the advantage of being very easy for the publication | |||
| operator to manage, but has the drawback of making it difficult for | operator to manage, but has the drawback of making it difficult for | |||
| relying parties to fetch published objects both safely and as | relying parties to fetch published objects efficiently, particularly | |||
| efficiently as possible. | for relying party implementations which follow the safety rule of | |||
| never retrieving anything from a URI which didn't come directly from | ||||
| either a signed object or a trust anchor locator. | ||||
| Given that the mandatory-to-implement retrieval protocol for relying | Given that the mandatory-to-implement retrieval protocol for relying | |||
| parties is rsync, a more efficient repository structure would be one | parties is rsync, a more efficient repository structure would be one | |||
| which minimized the number of rsync fetches required. One such | which minimized the number of rsync fetches required. One such | |||
| structure would be one in which the publication directories for | structure would be one in which the publication directories for | |||
| subjects were placed underneath the publication directories of their | subjects were placed underneath the publication directories of their | |||
| issuers: since the normal synchronization tree walk is top-down, this | issuers: since the normal synchronization tree walk is top-down, this | |||
| can significantly reduce the total number of rsync connections | can significantly reduce the total number of rsync connections | |||
| required to synchronize. For example: | required to synchronize. For example: | |||
| rsync://example.org/rpki/Alice/ | rsync://example.org/rpki/Alice/ | |||
| rsync://example.org/rpki/Alice/Bob/ | rsync://example.org/rpki/Alice/Bob/ | |||
| rsync://example.org/rpki/Alice/Bob/Carol/ | rsync://example.org/rpki/Alice/Bob/Carol/ | |||
| Preliminary measurement suggests that, in the case of large numbers | Preliminary measurement suggests that, in the case of large numbers | |||
| of small publication directories, the time needed to set up and tear | of small publication directories, the time needed to set up and tear | |||
| down individual rsync connections becomes significant, and that a | down individual rsync connections becomes significant, and that a | |||
| properly optimized tree structure can reduce synchronization time by | properly optimized tree structure can reduce synchronization time by | |||
| an order of magnitude. | an order of magnitude. | |||
| The more complex tree structure does require careful attention to the | The more complex tree structure does require careful attention when | |||
| "base_uri" attribute values when setting up clients. In the example | setting up clients. In the example above, assuming that Alice issues | |||
| above, assuming that Alice issues to Bob who in turn issues to Carol, | to Bob who in turn issues to Carol, Alice has ceded control of a | |||
| Alice has ceded control of a portion of her publication space to Bob, | portion of her publication space to Bob, who has in turn ceded a | |||
| who has in turn ceded a portion of that to Carol, and the "base_uri" | portion of that to Carol. | |||
| attributes in the <client/> setup messages should reflect this. | ||||
| The details of how the repository operator determines that Alice has | The details of how the repository operator determines that Alice has | |||
| given Bob permission to nest Bob's publication directory under | given Bob permission to nest Bob's publication directory under | |||
| Alice's is outside the scope of this protocol. | Alice's is outside the scope of this protocol. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| IANA is asked to register the application/rpki-publication MIME media | IANA is asked to register the application/rpki-publication MIME media | |||
| type as follows: | type as follows: | |||
| skipping to change at page 16, line 22 | skipping to change at page 18, line 22 | |||
| Interoperability considerations: None | Interoperability considerations: None | |||
| Published specification: This document | Published specification: This document | |||
| Applications which use this media type: HTTP | Applications which use this media type: HTTP | |||
| Additional information: | Additional information: | |||
| Magic number(s): None | Magic number(s): None | |||
| File extension(s): | File extension(s): | |||
| Macintosh File Type Code(s): | Macintosh File Type Code(s): | |||
| Person & email address to contact for further information: | Person & email address to contact for further information: | |||
| Rob Austein <sra@hactrn.net> | Rob Austein <sra@hactrn.net> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Author/Change controller: Rob Austein <sra@hactrn.net> | Author/Change controller: IETF | |||
| 6. Security Considerations | 6. Security Considerations | |||
| The RPKI publication protocol and the data it publishes use entirely | The RPKI publication protocol and the data it publishes use entirely | |||
| separate PKIs for authentication. The published data is | separate PKIs for authentication. The published data is | |||
| authenticated within the RPKI, and this protocol has nothing to do | authenticated within the RPKI, and this protocol has nothing to do | |||
| with that authentication, nor does it require that the published | with that authentication, nor does it require that the published | |||
| objects be valid in the RPKI. The publication protocol uses a | objects be valid in the RPKI. The publication protocol uses a | |||
| separate Business PKI (BPKI) to authenticate its messages. | separate Business PKI (BPKI) to authenticate its messages. | |||
| Each RPKI publication protocol message is CMS-signed. Because of | Each RPKI publication protocol message is CMS-signed. Because of | |||
| that protection at the application layer, this protocol does not | that protection at the application layer, this protocol does not | |||
| require the use of HTTPS or other transport security mechanisms. | require the use of HTTPS or other transport security mechanisms. | |||
| Although the hashes used in the <publish/> and <withdraw/> PDUs are | Although the hashes used in the <publish/> and <withdraw/> PDUs are | |||
| cryptographic strength, the digest algorithm was selected for | cryptographically strong, the digest algorithm was selected for | |||
| convenience in comparing these hashes with the hashes that appear in | convenience in comparing these hashes with the hashes that appear in | |||
| RPKI manifests. The hashes used in the <publish/> and <withdraw/> | RPKI manifests. The hashes used in the <publish/> and <withdraw/> | |||
| PDUs are not particularly security-sensitive, because these PDUs are | PDUs are not particularly security-sensitive, because these PDUs are | |||
| protected by the CMS signatures. | protected by the CMS signatures. | |||
| Compromise of a publication server, perhaps through mismanagement of | Compromise of a publication server, perhaps through mismanagement of | |||
| BPKI keys, could lead to a denial-of-service attack on the RPKI. An | BPKI private keys, could lead to a denial-of-service attack on the | |||
| attacker gaining access to BPKI keys could use this protocol delete | RPKI. An attacker gaining access to BPKI private keys could use this | |||
| (withdraw) RPKI objects, leading to routing changes or failures. | protocol to delete (withdraw) RPKI objects, leading to routing | |||
| Accordingly, as in most PKIs, good key management practices are | changes or failures. Accordingly, as in most PKIs, good key | |||
| important. | management practices are important. | |||
| 7. References | 7. Acknowledgements | |||
| 7.1. Normative References | The authors would like to thank: Geoff Huston, George Michaelson, | |||
| Oleg Muravskiy, Paul Wouters, Randy Bush, Rob Loomans, Robert | ||||
| Kisteleki, Tim Bruijnzeels, Tom Petch, and anybody else who helped | ||||
| along the way but whose name(s) the authors have temporarily | ||||
| forgotten. | ||||
| 8. References | ||||
| 8.1. Normative References | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, BCP 14, March 1997. | Requirement Levels", RFC 2119, BCP 14, March 1997. | |||
| [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", | [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", | |||
| RFC 5652, STD 70, September 2009. | RFC 5652, STD 70, September 2009. | |||
| [RFC6492] Huston, G., Loomans, R., Ellacott, B., and R. Austein, "A | [RFC6492] Huston, G., Loomans, R., Ellacott, B., and R. Austein, "A | |||
| Protocol for Provisioning Resource Certificates", | Protocol for Provisioning Resource Certificates", | |||
| RFC 6492, February 2012. | RFC 6492, February 2012. | |||
| [SHS] National Institute of Standards and Technology, "Secure | [SHS] National Institute of Standards and Technology, "Secure | |||
| Hash Standard", FIPS PUB 180-4, March 2012, | Hash Standard", FIPS PUB 180-4, March 2012, | |||
| <http://csrc.nist.gov/publications/fips/fips180-4/ | <http://csrc.nist.gov/publications/fips/fips180-4/ | |||
| fips-180-4.pdf>. | fips-180-4.pdf>. | |||
| 7.2. Informative References | 8.2. Informative References | |||
| [I-D.ietf-sidr-delta-protocol] | ||||
| Bruijnzeels, T., Muravskiy, O., Weber, B., and R. Austein, | ||||
| "RPKI Repository Delta Protocol", draft-ietf-sidr-delta- | ||||
| protocol-04 (work in progress), September 2016. | ||||
| [I-D.ietf-sidr-rpki-oob-setup] | ||||
| Austein, R., "An Out-Of-Band Setup Protocol For RPKI | ||||
| Production Services", draft-ietf-sidr-rpki-oob-setup-05 | ||||
| (work in progress), December 2016. | ||||
| [RelaxNG] Clark, J., "RELAX NG Compact Syntax", OASIS , November | ||||
| 2002, <https://www.oasis-open.org/committees/relax-ng/ | ||||
| compact-20021121.html>. | ||||
| [RFC6480] Lepinski, M. and S. Kent, "An Infrastructure to Support | [RFC6480] Lepinski, M. and S. Kent, "An Infrastructure to Support | |||
| Secure Internet Routing", RFC 6480, February 2012. | Secure Internet Routing", RFC 6480, February 2012. | |||
| [XML] Cowan, J., "Extensible Markup Language (XML) 1.1", W3C CR | ||||
| CR-xml11-20021015, October 2002. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Samuel Weiler | Samuel Weiler | |||
| Parsons | W3C / MIT | |||
| Email: weiler@tislabs.com | Email: weiler@csail.mit.edu | |||
| Anuja Sonalker | Anuja Sonalker | |||
| TowerSec Automotive Cyber Security | TowerSec Automotive Cyber Security | |||
| Email: asonalker@tower-sec.com | Email: asonalker@tower-sec.com | |||
| Rob Austein | Rob Austein | |||
| Dragon Research Labs | Dragon Research Labs | |||
| Email: sra@hactrn.net | Email: sra@hactrn.net | |||
| End of changes. 36 change blocks. | ||||
| 82 lines changed or deleted | 198 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||