aboutsummaryrefslogtreecommitdiff
path: root/rpkid/doc/Publication
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid/doc/Publication')
-rw-r--r--rpkid/doc/Publication212
1 files changed, 0 insertions, 212 deletions
diff --git a/rpkid/doc/Publication b/rpkid/doc/Publication
deleted file mode 100644
index f7ac1539..00000000
--- a/rpkid/doc/Publication
+++ /dev/null
@@ -1,212 +0,0 @@
-RPKI Engine  1.0
-
-* MainÂ_Page
-* RelatedÂ_Pages
-* Packages
-* Classes
-* Files
-* [Search ]
-
-* RPKI_Engine_Reference_Manual
-
-Publication protocol
-
-The publication protocol is really two separate client/server protocols,
-between different parties.
-
-The first is a configuration protocol for an IRBE to use to configure a
-publication engine, the second is the interface by which authorized clients
-request publication of specific objects.
-
-Much of the architecture of the publication protocol is borrowed from the left-
-right_protocol: like the left-right protocol, the publication protocol uses
-CMS-wrapped XML over HTTP with the same eContentType OID and the same HTTP
-content-type, and the overall style of the XML messages is very similar to the
-left-right protocol. All operations allow an optional "tag" attribute to allow
-batching.
-
-The publication engine operates a single HTTP server which serves both of these
-subprotocols. The two subprotocols share a single server port, but use distinct
-URLs to allow demultiplexing.
-
- Publication control subprotocol
-
-The control subprotocol reuses the message-passing design of the left-right
-protocol. Configured objects support the "create", "set", "get", "list", and
-"destroy" actions, or a subset thereof when the full set of actions doesn't
-make sense.
-
- <config/> object
-
-The <config/> object allows configuration of data that apply to the entire
-publication server rather than a particular client.
-
-There is exactly one <config/> object in the publication server, and it only
-supports the "set" and "get" actions -- it cannot be created or destroyed.
-
-Payload data which can be configured in a <config/> object:
-
- bpki_crl (element):
- This is the BPKI CRL used by the publication server when signing the CMS
- wrapper on responses in the publication subprotocol. As the CRL must be
- updated at regular intervals, it's not practical to restart the
- publication server when the BPKI CRL needs to be updated. The BPKI model
- doesn't require use of a BPKI CRL between the IRBE and the publication
- server, so we can use the publication control subprotocol to update the
- BPKI CRL.
-
- <client/> object
-
-The <client/> object represents one client authorized to use the publication
-server.
-
-The <client/> object supports the full set of "create", "set", "get", "list",
-and "destroy" actions. Each client has a "client_handle" attribute, which is
-used in responses and must be specified in "create", "set", "get", or "destroy"
-actions.
-
-Payload data which can be configured in a <client/> object:
-
- base_uri (attribute):
- This is the base URI below which this client is allowed to publish data.
- The publication server may impose additional constraints in the case of a
- child publishing beneath its parent.
-
- bpki_cert (element):
- BPKI CA certificate for this <client/>. This is used as part of the
- certificate chain when validating incoming TLS and CMS messages. If the
- bpki_glue certificate is in use (below), the bpki_cert certificate should
- be issued by the bpki_glue certificate; otherwise, the bpki_cert
- certificate should be issued by the publication engine's bpki_ta
- certificate.
-
- bpki_glue (element):
- Another BPKI CA certificate for this <client/>, usually not needed.
- Certain pathological cross-certification cases require a two-certificate
- chain due to issuer name conflicts. If used, the bpki_glue certificate
- should be the issuer of the bpki_cert certificate and should be issued by
- the publication engine's bpki_ta certificate; if not needed, the
- bpki_glue certificate should be left unset.
-
- Publication subprotocol
-
-The publication subprotocol is structured somewhat differently from the
-publication control protocol. Objects in the publication subprotocol represent
-objects to be published or objects to be withdrawn from publication. Each kind
-of object supports two actions: "publish" and "withdraw". In each case the XML
-element representing hte object to be published or withdrawn has a "uri"
-attribute which contains the publication URI. For "publish" actions, the XML
-element body contains the DER object to be published, encoded in Base64; for
-"withdraw" actions, the XML element body is empty.
-
-In theory, the detailed access control for each kind of object might be
-different. In practice, as of this writing, access control for all objects is a
-simple check that the client's "base_uri" is a leading substring of the
-publication URI. Details of why access control might need to become more
-complicated are discussed in a later section.
-
- <certificate/> object
-
-The <certificate/> object represents an RPKI certificate to be published or
-withdrawn.
-
- <crl/> object
-
-The <crl/> object represents an RPKI CRL to be published or withdrawn.
-
- <manifest/> object
-
-The <manifest/> object represents an RPKI publication manifest to be published
-or withdrawn.
-
-Note that part of the reason for the batching support in the publication
-protocol is because every publication or withdrawal action requires a new
-manifest, thus every publication or withdrawal action will involve at least two
-objects.
-
- <roa/> object
-
-The <roa/> object represents a ROA to be published or withdrawn.
-
- Error handling
-
-Error in this protocol are handled at two levels.
-
-Since all messages in this protocol are conveyed over HTTP connections, basic
-errors are indicated via the HTTP response code. 4xx and 5xx responses indicate
-that something bad happened. Errors that make it impossible to decode a query
-or encode a response are handled in this way.
-
-Where possible, errors will result in a <report_error/> message which takes the
-place of the expected protocol response message. <report_error/> messages are
-CMS-signed XML messages like the rest of this protocol, and thus can be
-archived to provide an audit trail.
-
-<report_error/> messages only appear in replies, never in queries. The
-<report_error/> message can appear in both the control and publication
-subprotocols.
-
-The <report_error/> message includes an optional "tag" attribute to assist in
-matching the error with a particular query when using batching.
-
-The error itself is conveyed in the error_code (attribute). The value of this
-attribute is a token indicating the specific error that occurred. At present
-this will be the name of a Python exception; the production version of this
-protocol will nail down the allowed error tokens here, probably in the RelaxNG
-schema.
-
-The body of the <report_error/> element itself is an optional text string; if
-present, this is debugging information. At present this capabilty is not used,
-debugging information goes to syslog.
-
- Additional access control considerations.
-
-As detailed above, the publication protocol is trivially simple. This glosses
-over two bits of potential complexity:
-
-* In the case where parent and child are sharing a repository, we'd like to
- nest child under parent, because testing has demonstrated that even on
- relatively slow hardware the delays involved in setting up separate rsync
- connections tend to dominate synchronization time for relying parties.
-
-* The repository operator might also want to do some checks to assure itself
- that what it's about to allow the RPKI engine to publish is not dangerous
- toxic waste.
-
-The up-down protocol includes a mechanism by which a parent can suggest a
-publication URI to each of its children. The children are not required to
-accept this hint, and the children must make separate arrangements with the
-repository operator (who might or might not be the same as the entity that
-hosts the children's RPKI engine operations) to use the suggested publication
-point, but if everything works out, this allows children to nest cleanly under
-their parents publication points, which helps reduce synchronization time for
-relying parties.
-
-In this case, one could argue that the publication server is responsible for
-preventing one of its clients (the child in the above description) from
-stomping on data published by another of its clients (the parent in the above
-description). This goes beyond the basic access check and requires the
-publication server to determine whether the parent has given its consent for
-the child to publish under the parent. Since the RPKI certificate profile
-requires the child's publication point to be indicated in an SIA extension in a
-certificate issued by the parent to the child, the publication engine can infer
-this permission from the parent's issuance of a certificate to the child.
-Since, by definition, the parent also uses this publication server, this is an
-easy check, as the publication server should already have the parent's
-certificate available by the time it needs to check the child's certificate.
-
-The previous paragraph only covers a "publish" action for a <certificate/
-> object. For "publish" actions on other objects, the publication server would
-need to trace permission back to the certificate issued by the parent; for
-"withdraw" actions, the publication server would have to perform the same
-checks it would perform for a "publish" action, using the current published
-data before withdrawing it. The latter in turn implies an ordering constraint
-on "withdraw" actions in order to preserve the data necessary for these access
-control decisions; as this may prove impractical, the publication server may
-probably need to make periodic sweeps over its published data looking for
-orphaned objects, but that's probably a good idea anyway.
-
-Note that, in this publication model, any agreement that the repository makes
-to publish the RPKI engine's output is conditional upon the object to be
-published passing whatever access control checks the publication server
-imposes.