| draft-ietf-sidr-publication-10.txt | draft-ietf-sidr-publication-11.txt | |||
|---|---|---|---|---|
| Network Working Group S. Weiler | Network Working Group S. Weiler | |||
| Internet-Draft W3C / MIT | Internet-Draft W3C / MIT | |||
| Intended status: Standards Track A. Sonalker | Intended status: Standards Track A. Sonalker | |||
| Expires: July 14, 2017 TowerSec | Expires: August 21, 2017 TowerSec | |||
| R. Austein | R. Austein | |||
| Dragon Research Labs | Dragon Research Labs | |||
| January 10, 2017 | February 17, 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-10 | draft-ietf-sidr-publication-11 | |||
| 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. | |||
| Even in cases where a certificate issuer runs their own publication | Even in cases where a certificate issuer runs their own publication | |||
| repository, it can be useful to run the certificate engine itself on | repository, it can be useful to run the certificate engine itself on | |||
| a different machine from the publication repository. This document | a different machine from the publication repository. This document | |||
| skipping to change at page 1, line 40 | skipping to change at page 1, line 40 | |||
| 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 July 14, 2017. | This Internet-Draft will expire on August 21, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 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 | |||
| skipping to change at page 2, line 18 | skipping to change at page 2, line 18 | |||
| 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. Historical Note . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Historical Note . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Protocol Specification . . . . . . . . . . . . . . . . . . . 5 | 2. Protocol Specification . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. Common XML Message Format . . . . . . . . . . . . . . . . 5 | 2.1. Common XML Message Format . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Publication and Withdrawal . . . . . . . . . . . . . . . 6 | 2.2. Publication and Withdrawal . . . . . . . . . . . . . . . 7 | |||
| 2.3. Listing the repository . . . . . . . . . . . . . . . . . 7 | 2.3. Listing the repository . . . . . . . . . . . . . . . . . 8 | |||
| 2.4. Error handling . . . . . . . . . . . . . . . . . . . . . 8 | 2.4. Error handling . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2.6. XML Schema . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.6. XML Schema . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.1. <publish/> Query, No Existing Object . . . . . . . . . . 11 | 3.1. <publish/> Query, No Existing Object . . . . . . . . . . 12 | |||
| 3.2. <publish/> Query, Overwriting Existing Object . . . . . . 11 | 3.2. <publish/> Query, Overwriting Existing Object . . . . . . 12 | |||
| 3.3. <withdraw/> Query . . . . . . . . . . . . . . . . . . . . 12 | 3.3. <withdraw/> Query . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.4. <success/> Reply . . . . . . . . . . . . . . . . . . . . 12 | 3.4. <success/> Reply . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5. <report_error/> With Optional Elements . . . . . . . . . 12 | 3.5. <report_error/> With Optional Elements . . . . . . . . . 13 | |||
| 3.6. <report_error/> Without Optional Elements . . . . . . . . 13 | 3.6. <report_error/> Without Optional Elements . . . . . . . . 13 | |||
| 3.7. Error Handling With Multi-Element Queries . . . . . . . . 13 | 3.7. Error Handling With Multi-Element Queries . . . . . . . . 13 | |||
| 3.7.1. Multi-Element Query . . . . . . . . . . . . . . . . . 13 | 3.7.1. Multi-Element Query . . . . . . . . . . . . . . . . . 13 | |||
| 3.7.2. Successful Multi-Element Response . . . . . . . . . . 14 | 3.7.2. Successful Multi-Element Response . . . . . . . . . . 14 | |||
| 3.7.3. Failure Multi-Element Response, First Error Only . . 14 | 3.7.3. Failure Multi-Element Response, First Error Only . . 14 | |||
| 3.7.4. Failure Multi-Element Response, All Errors . . . . . 15 | 3.7.4. Failure Multi-Element Response, All Errors . . . . . 15 | |||
| 3.8. <list/> Query . . . . . . . . . . . . . . . . . . . . . . 16 | 3.8. <list/> Query . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.9. <list/> Reply . . . . . . . . . . . . . . . . . . . . . . 16 | 3.9. <list/> Reply . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 4. Operational Considerations . . . . . . . . . . . . . . . . . 16 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 18 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 19 | 7.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 19 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 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. See [RFC6480] for an overview of the RPKI. | 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. | |||
| skipping to change at page 3, line 39 | skipping to change at page 3, line 39 | |||
| 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. | |||
| The authentication and message integrity architecture of the | The authentication and message integrity architecture of the | |||
| publication protocol is essentially identical to the architecture | publication protocol is essentially identical to the architecture | |||
| used in [RFC6492], because the participants in this protocol are the | used in [RFC6492], because the participants in this protocol are the | |||
| same CA engines as in RFC 6492; this allows reuse of the same | same CA engines as in RFC 6492; this allows reuse of the same | |||
| "Business PKI" ("BPKI", see Section 1.2) infrastructure used to | "Business PKI" ("BPKI", see Section 1.2) infrastructure used to | |||
| support RFC 6492. As in RCC 6492, authorization is a matter of | support RFC 6492. As in RFC 6492, authorization is a matter of | |||
| external configuration: we assume that any given publication | external configuration: we assume that any given publication | |||
| repository has some kind of policy controlling which certificate | repository has some kind of policy controlling which certificate | |||
| engines are allowed to publish, modify, or withdraw particular RPKI | engines are allowed to publish, modify, or withdraw particular RPKI | |||
| objects, most likely following the recommendation in [RFC6480] | objects, most likely following the recommendation in [RFC6480] | |||
| Section 4.4, the details of this policy are a private matter between | 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 | the operator of a certificate engine and the operator of the chosen | |||
| publication repository. | publication repository. | |||
| The following diagram attempts to convey where this publication | The following diagram attempts to convey where this publication | |||
| protocol fits into the overall data flow between the certificate | protocol fits into the overall data flow between the certificate | |||
| skipping to change at page 5, line 19 | skipping to change at page 5, line 19 | |||
| "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 ([XML]) messages wrapped in signed | The publication protocol uses XML ([XML]) messages wrapped in signed | |||
| CMS messages, carried over HTTP transport. | CMS messages, carried over HTTP transport ([RFC2616]). The CMS | |||
| encapsulation is identical to that used in [RFC6492], section 3.1 and | ||||
| subsections. | ||||
| 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". | |||
| skipping to change at page 6, line 4 | skipping to change at page 6, line 11 | |||
| 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 --> | |||
| </msg> | </msg> | |||
| <msg | <msg | |||
| type="reply" | type="reply" | |||
| 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 --> | |||
| </msg> | </msg> | |||
| As noted above, the outermost XML element is encapsulated in in a | ||||
| signed CMS message. Query messages are signed by the client, reply | ||||
| messages are signed by the server. | ||||
| Common attributes: | Common attributes: | |||
| version: The value of this attribute is the version of this | version: The value of this attribute is the version of this | |||
| 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/>. | |||
| skipping to change at page 6, line 33 | skipping to change at page 6, line 45 | |||
| The <publish/> and <withdraw/> PDUs include a "tag" attribute to | The <publish/> and <withdraw/> PDUs include a "tag" attribute to | |||
| facilitate bulk operation. When performing bulk operations, a CA | facilitate bulk operation. When performing bulk operations, a CA | |||
| engine will probably find it useful to specify a distinct tag value | engine will probably find it useful to specify a distinct tag value | |||
| for each <publish/> or <withdraw/> PDU, to simplify matching an error | for each <publish/> or <withdraw/> PDU, to simplify matching an error | |||
| with the PDU which triggered it. The tag attribute is mandatory, to | with the PDU which triggered it. The tag attribute is mandatory, to | |||
| simplify parsing, but a CA engine which has no particular use for | simplify parsing, but a CA engine which has no particular use for | |||
| tagging MAY use any syntactically legal value, including simply using | tagging MAY use any syntactically legal value, including simply using | |||
| the empty string for all tag fields. | the empty string for all tag fields. | |||
| This document describes version 4 of this protocol. An | ||||
| implementation which understands only this version of the protocol | ||||
| MUST reject messages with a different protocol version attribute, | ||||
| signalling the error as described in Section 2.4. Since "4" is | ||||
| currently the only value allowed for the version attribute in the | ||||
| schema (Section 2.6), an incorrect protocol version can be detected | ||||
| either by checking the version attribute directly or as a schema | ||||
| validation error. | ||||
| 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 | an rsync URI ([RFC3986], [RFC5781]). The <publish/> query also | |||
| published, encoded in Base64. | contains the DER object to be published, encoded in Base64 ([RFC4648] | |||
| section 4, with line breaks within the Base64 text permitted but not | ||||
| required). | ||||
| 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, encoded as a hexadecimal string. For | specified repository URI, encoded as a hexadecimal string. For | |||
| <withdraw/> PDUs, the hash MUST be present, as this operation makes | <withdraw/> PDUs, the hash MUST be present, as this operation makes | |||
| no sense if there is no existing object to withdraw. For <publish/> | no sense if there is no existing object to withdraw. For <publish/> | |||
| PDUs, the hash is MUST be present if the publication operation is | PDUs, the hash MUST be present if the publication operation is | |||
| overwriting an existing object, and MUST NOT be present if this | overwriting an existing object, and MUST NOT be present if this | |||
| publication operation is writing to a new URI where no prior object | publication operation is writing to a new URI where no prior object | |||
| exists. Presence of an object when no "hash" attribute has been | exists. Presence of an object when no "hash" attribute has been | |||
| specified is an error, as is absence of an object or an incorrect | specified is an error, as is absence of an object or an incorrect | |||
| hash value when a "hash" attribute has been specified. Any such | hash value when a "hash" attribute has been specified. Any such | |||
| errors MUST be reported using the <report_error/> PDU. | 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. | |||
| skipping to change at page 7, line 25 | skipping to change at page 7, line 47 | |||
| 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/> or <withdraw/> PDUs | When a query message containing <publish/> or <withdraw/> PDUs | |||
| succeeds, the server returns a single <success/> reply. | succeeds, the server returns a single <success/> reply. | |||
| When a query fails, the server returns one or more <report_error/> | When a query fails, the server returns one or more <report_error/> | |||
| reply PDUs. Typically, a server will only generate one | reply PDUs. Typically, a server will only generate one | |||
| <report_error/> corresponding to the first query PDU that failed, but | <report_error/> corresponding to the first query PDU that failed, but | |||
| servers MAY return multiple <report_error/> PDUs at the implementor's | servers MAY return multiple <report_error/> PDUs at the implementor's | |||
| discretion. | discretion. | |||
| 2.3. Listing the repository | 2.3. Listing the repository | |||
| skipping to change at page 11, line 25 | skipping to change at page 11, line 46 | |||
| element failed_pdu { query_elt }? | element failed_pdu { query_elt }? | |||
| }* | }* | |||
| 3. Examples | 3. Examples | |||
| Following are examples of various queries and the corresponding | Following are examples of various queries and the corresponding | |||
| replies for the RPKI publication protocol. | replies for the RPKI publication protocol. | |||
| 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. Similarly, these examples do not show | |||
| the CMS signature wrapper around the XML, just the XML payload. | ||||
| 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) --> | <!-- body is base64(new-object) --> | |||
| <publish | <publish | |||
| tag="" | tag="" | |||
| skipping to change at page 16, line 34 | skipping to change at page 16, line 34 | |||
| hash="c7c50a68b7aa50bf" | hash="c7c50a68b7aa50bf" | |||
| uri="rsync://wombat.example/Fie/c7c50a68b7aa50bf.cer"/> | uri="rsync://wombat.example/Fie/c7c50a68b7aa50bf.cer"/> | |||
| <list | <list | |||
| hash="f222481ded47445d" | hash="f222481ded47445d" | |||
| uri="rsync://wombat.example/Foe/f222481ded47445d.cer"/> | uri="rsync://wombat.example/Foe/f222481ded47445d.cer"/> | |||
| <list | <list | |||
| hash="15b94e08713275bc" | hash="15b94e08713275bc" | |||
| uri="rsync://wombat.example/Fum/15b94e08713275bc.cer"/> | uri="rsync://wombat.example/Fum/15b94e08713275bc.cer"/> | |||
| </msg> | </msg> | |||
| 4. Operational Considerations | 4. IANA Considerations | |||
| There are two basic options open to the repository operator as to how | ||||
| the publication tree is laid out. The first option is simple: each | ||||
| publication client is given its own directory one level below the top | ||||
| of the rsync module, and there is no overlap between the publication | ||||
| spaces used by different clients. For example: | ||||
| rsync://example.org/rpki/Alice/ | ||||
| rsync://example.org/rpki/Bob/ | ||||
| rsync://example.org/rpki/Carol/ | ||||
| This has the advantage of being very easy for the publication | ||||
| operator to manage, but has the drawback of making it difficult for | ||||
| relying parties to fetch published objects efficiently, particularly | ||||
| 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 | ||||
| parties is rsync, a more efficient repository structure would be one | ||||
| which minimized the number of rsync fetches required. One such | ||||
| structure would be one in which the publication directories for | ||||
| subjects were placed underneath the publication directories of their | ||||
| issuers: since the normal synchronization tree walk is top-down, this | ||||
| can significantly reduce the total number of rsync connections | ||||
| required to synchronize. For example: | ||||
| rsync://example.org/rpki/Alice/ | ||||
| rsync://example.org/rpki/Alice/Bob/ | ||||
| rsync://example.org/rpki/Alice/Bob/Carol/ | ||||
| Preliminary measurement suggests that, in the case of large numbers | ||||
| of small publication directories, the time needed to set up and tear | ||||
| down individual rsync connections becomes significant, and that a | ||||
| properly optimized tree structure can reduce synchronization time by | ||||
| an order of magnitude. | ||||
| The more complex tree structure does require careful attention when | ||||
| setting up clients. In the example above, assuming that Alice issues | ||||
| to Bob who in turn issues to Carol, Alice has ceded control of a | ||||
| portion of her publication space to Bob, who has in turn ceded a | ||||
| portion of that to Carol. | ||||
| The details of how the repository operator determines that Alice has | ||||
| given Bob permission to nest Bob's publication directory under | ||||
| Alice's is outside the scope of this protocol. | ||||
| 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: | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: rpki-publication | MIME subtype name: rpki-publication | |||
| Required parameters: None | Required parameters: None | |||
| Optional parameters: None | Optional parameters: None | |||
| Encoding considerations: binary | Encoding considerations: binary | |||
| Security considerations: Carries an RPKI Publication Protocol | Security considerations: Carries an RPKI Publication Protocol | |||
| Message, as defined in this document. | Message, as defined in this document. | |||
| Interoperability considerations: None | Interoperability considerations: None | |||
| Published specification: This document | Published specification: [[RFCxxxx]] | |||
| 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: IETF | Author/Change controller: IETF | |||
| 6. Security Considerations | 5. 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 wrapped in a signed CMS | |||
| that protection at the application layer, this protocol does not | message, which provides message integrity protection and an auditable | |||
| require the use of HTTPS or other transport security mechanisms. | form of message authentication. Because of these protections at the | |||
| application layer, and because all the data being published are | ||||
| intended to be public information in any case, this protocol does | ||||
| not, strictly speaking, require the use of HTTPS or other transport | ||||
| security mechanisms. There may, however, be circumstances in which a | ||||
| particular publication operator may prefer HTTPS over HTTP anyway, as | ||||
| a matter of (BPKI) CA policy. Use of HTTP versus HTTPS here is, | ||||
| essentially, a private matter between the repository operator and its | ||||
| clients. Note, however, that even if a client/server pair uses HTTPS | ||||
| for this protocol, message authentication for this protocol is still | ||||
| based on the CMS signatures, not HTTPS. | ||||
| Although the hashes used in the <publish/> and <withdraw/> PDUs are | Although the hashes used in the <publish/> and <withdraw/> PDUs are | |||
| cryptographically strong, 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. Because of this, the most likely | |||
| reason for a change to this digest algorithm would be to track a | ||||
| corresponding change in the digest algorithm used in RPKI manifests. | ||||
| If and when such a change happens, it will require incrementing the | ||||
| version number of this publication protocol, but given that the most | ||||
| likely implementation of a publication server uses these hashes as | ||||
| lookup keys in a database, bumping the protocol version number would | ||||
| be a relatively minor portion of the effort of changing the | ||||
| algorithm. | ||||
| Compromise of a publication server, perhaps through mismanagement of | Compromise of a publication server, perhaps through mismanagement of | |||
| BPKI private keys, could lead to a denial-of-service attack on the | BPKI private keys, could lead to a denial-of-service attack on the | |||
| RPKI. An attacker gaining access to BPKI private keys could use this | RPKI. An attacker gaining access to BPKI private keys could use this | |||
| protocol to delete (withdraw) RPKI objects, leading to routing | protocol to delete (withdraw) RPKI objects, leading to routing | |||
| changes or failures. Accordingly, as in most PKIs, good key | changes or failures. Accordingly, as in most PKIs, good key | |||
| management practices are important. | management practices are important. | |||
| 7. Acknowledgements | 6. Acknowledgements | |||
| The authors would like to thank: Geoff Huston, George Michaelson, | The authors would like to thank: Geoff Huston, George Michaelson, | |||
| Oleg Muravskiy, Paul Wouters, Randy Bush, Rob Loomans, Robert | Oleg Muravskiy, Paul Wouters, Randy Bush, Rob Loomans, Robert | |||
| Kisteleki, Tim Bruijnzeels, Tom Petch, and anybody else who helped | Kisteleki, Tim Bruijnzeels, Tom Petch, and anybody else who helped | |||
| along the way but whose name(s) the authors have temporarily | along the way but whose name(s) the authors have temporarily | |||
| forgotten. | forgotten. | |||
| 8. References | 7. References | |||
| 8.1. Normative References | 7.1. Normative References | |||
| [RelaxNG] Clark, J., "RELAX NG Compact Syntax", OASIS , November | ||||
| 2002, <https://www.oasis-open.org/committees/relax-ng/ | ||||
| compact-20021121.html>. | ||||
| [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. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", RFC 3986, | ||||
| STD 66, January 2005. | ||||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | ||||
| Encodings", RFC 4648, October 2006. | ||||
| [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. | |||
| [RFC5781] Weiler, S., Ward, D., and R. Housley, "The rsync URI | ||||
| Scheme", RFC 5781, February 2010. | ||||
| [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>. | |||
| 8.2. Informative References | [XML] Cowan, J., "Extensible Markup Language (XML) 1.1", W3C CR | |||
| CR-xml11-20021015, October 2002. | ||||
| 7.2. Informative References | ||||
| [I-D.ietf-sidr-delta-protocol] | [I-D.ietf-sidr-delta-protocol] | |||
| Bruijnzeels, T., Muravskiy, O., Weber, B., and R. Austein, | Bruijnzeels, T., Muravskiy, O., Weber, B., and R. Austein, | |||
| "RPKI Repository Delta Protocol", draft-ietf-sidr-delta- | "RPKI Repository Delta Protocol", draft-ietf-sidr-delta- | |||
| protocol-04 (work in progress), September 2016. | protocol-07 (work in progress), February 2017. | |||
| [I-D.ietf-sidr-rpki-oob-setup] | [I-D.ietf-sidr-rpki-oob-setup] | |||
| Austein, R., "An Out-Of-Band Setup Protocol For RPKI | Austein, R., "An Out-Of-Band Setup Protocol For RPKI | |||
| Production Services", draft-ietf-sidr-rpki-oob-setup-05 | Production Services", draft-ietf-sidr-rpki-oob-setup-06 | |||
| (work in progress), December 2016. | (work in progress), January 2017. | |||
| [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 | |||
| W3C / MIT | W3C / MIT | |||
| Email: weiler@csail.mit.edu | Email: weiler@csail.mit.edu | |||
| Anuja Sonalker | Anuja Sonalker | |||
| TowerSec Automotive Cyber Security | TowerSec Automotive Cyber Security | |||
| End of changes. 32 change blocks. | ||||
| 95 lines changed or deleted | 97 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/ | ||||