<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ietf-regext-rdap-rpki-03" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="rdap-rpki">Registration Data Access Protocol (RDAP) Extension for Resource Public Key Infrastructure (RPKI) Registration Data</title><seriesInfo value="draft-ietf-regext-rdap-rpki-03" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="J." surname="Singh" fullname="Jasdip Singh"><organization>ARIN</organization><address><postal><street></street>
</postal><email>jasdips@arin.net</email>
</address></author><author initials="A." surname="Newton" fullname="Andy Newton"><organization>ICANN</organization><address><postal><street></street>
</postal><email>andy@hxr.us</email>
</address></author><date/>
<area>Applications and Real-Time Area (ART)</area>
<workgroup>Registration Protocols Extensions (regext)</workgroup>

<abstract>
<t>The Resource Public Key Infrastructure (RPKI) is used to secure inter-domain routing on the internet. This document
defines a new Registration Data Access Protocol (RDAP) extension with identifier &quot;rpki1&quot;, for accessing the RPKI
registration data in the Internet Number Registry System (INRS) for the Route Origin Authorization (ROA), Autonomous
System Provider Authorization (ASPA), and X.509 Resource Certificate RPKI profiles through RDAP. The INRS is composed of
Regional Internet Registries (RIRs), National Internet Registries (NIRs), and Local Internet Registries (LIRs).</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>The network operators are increasingly deploying the Resource Public Key Infrastructure (RPKI) <xref target="RFC6480"></xref> to secure
inter-domain routing <xref target="RFC4271"></xref> on the internet. RPKI enables Internet Number Resource (INR) holders to
cryptographically assert about their registered IP addresses and autonomous system numbers to prevent route hijacks and
leaks. To that end, RPKI defines the following profiles:</t>

<ul spacing="compact">
<li>Route Origin Authorization (ROA) <xref target="RFC9582"></xref> where a Classless Inter-Domain Routing (CIDR) <xref target="RFC1519"></xref> address block
holder cryptographically asserts about the origin autonomous system (AS) <xref target="RFC4271"></xref> for routing that CIDR address
block.</li>
<li>Autonomous System Provider Authorization (ASPA) <xref target="I-D.ietf-sidrops-aspa-profile"></xref> where an autonomous system number
(ASN) <xref target="RFC5396"></xref> holder cryptographically asserts about the provider ASes for that ASN.</li>
<li>X.509 Resource Certificate <xref target="RFC6487"></xref> where the issuer grants the subject a right-of-use for the listed IP
addresses and/or autonomous system numbers.</li>
</ul>
<t>This document defines a new RDAP extension with identifier &quot;rpki1&quot;, for accessing the RPKI registration data in the
Internet Number Registry System (INRS) for the aforementioned RPKI profiles through RDAP. The INRS is composed of
Regional Internet Registries (RIRs), National Internet Registries (NIRs), and Local Internet Registries (LIRs).</t>
<t>The motivation here is that such RDAP data could complement the existing RPKI diagnostic tools (e.g., <xref target="ROUTINATOR"></xref>,
<xref target="NIST-RPKI-MONITOR"></xref>, etc.) when troubleshooting a route hijack or leak, by conveniently providing access to
registration information from a registry's database beside what is inherently available from an RPKI profile object.
There is registration metadata that is often needed for troubleshooting that does not appear in an RPKI profile object
or its verified payload but could be looked up or searched using RDAP; such as:</t>

<ul spacing="compact">
<li>When did the initial version of a ROA get published?</li>
<li>Was a ROA created in conjunction with an Internet Routing Registry (IRR) <xref target="RFC2622"></xref> route?</li>
<li>Which IRR routes are related with a ROA?</li>
<li>Which ROAs are associated with an IP network?</li>
<li>Which ROAs are associated with an origin AS?</li>
<li>Which ASPAs are associated with a provider AS?</li>
<li>Which X.509 resource certificates are associated with an organization?</li>
<li>Which organization is registered as the authoritative source for an RPKI profile object?</li>
</ul>
<t>Furthermore, correlating registered RPKI data with registered IP networks and autonomous system numbers would also give
access to the latter's contact information through RDAP entity objects, which should aid troubleshooting.</t>
<t>In addition to troubleshooting, serving RPKI metadata over RDAP offers a convenience to network operators
through a simple lookup mechanism. As is demonstrated in <xref target="RDAP-GUIDE"></xref>, constructing custom RDAP scripts is
relatively easy and beneficial to network operators for the purposes of reporting. Though not RDAP-based, systems such
as <xref target="JDR"></xref> and <xref target="CLOUDFLARE"></xref> have shown the utility of an approach that allows users to explore the RPKI hierarchy in a
visual fashion, without interacting with the signed objects directly.</t>
<t>For these purposes, this specification defines RDAP object classes, as well as lookup and search path segments, for the
ROA, ASPA, and X.509 resource certificate registration data.</t>

<section anchor="requirements-language"><name>Requirements Language</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;,
&quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP 14
<xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they appear in all capitals, as shown here.</t>
<t>Indentation and whitespace in examples are provided only to illustrate element relationships, and are not a required
feature of this specification.</t>
<t>&quot;...&quot; in examples is used as shorthand for elements defined outside of this document, as well as to abbreviate elements
that are too long.</t>
</section>
</section>

<section anchor="extension"><name>Extension</name>
<t>This document defines a new RDAP extension with identifier &quot;rpki1&quot;, for accessing the RPKI registration data in the INRS
for the ROA, ASPA, and X.509 Resource Certificate RPKI profiles through RDAP.</t>
<t>A server that supports the functionality specified in this document MUST include the &quot;rpki1&quot; string literal in the
&quot;rdapConformance&quot; array (<xref target="RFC9083" sectionFormat="of" section="4.1"></xref>) for any lookup or search response containing an RDAP object per the
object class definition in <xref target="roa_object_class"></xref>, <xref target="aspa_object_class"></xref>, or <xref target="x509_resource_cert_object_class"></xref>, as well as
in the help response. Here is an elided example for this inclusion:</t>

<artwork><![CDATA[{
  "rdapConformance":
  [
    "rdap_level_0",
    "rpki1",
    ...
  ],
  ...
}
]]></artwork>
<t>This extension adheres to the guidelines in <xref target="I-D.ietf-regext-rdap-extensions"></xref>.</t>
<t>The &quot;1&quot; in &quot;rpki1&quot; denotes version 1 of this extension. New versions of this extension will use different extension
identifiers.</t>

<section anchor="what_it_is_not"><name>What It Is Not</name>
<t>This RDAP extension MUST NOT be used to directly influence internet routing. Neither RDAP nor this extension define the
necessary security properties or distribution mechanisms required to securely add, remove, or modify internet routes.</t>
</section>

<section anchor="in-the-future"><name>In The Future</name>
<t>In the future, if the RDAP data for the RPKI profiles supported in this document needs to evolve and/or additional RPKI
profiles need to be made accessible through RDAP, a new RDAP extension must be defined, adhering to the guidelines in
<xref target="I-D.ietf-regext-rdap-extensions"></xref>.</t>
</section>
</section>

<section anchor="common_data_members"><name>Common Data Members</name>
<t>The RDAP object classes for RPKI (<xref target="roa_object_class"></xref>, <xref target="aspa_object_class"></xref>, <xref target="x509_resource_cert_object_class"></xref>) can
contain one or more of the following common members:</t>

<ul spacing="compact">
<li>&quot;handle&quot; -- a string representing the registry-unique identifier of an RPKI object registration</li>
<li>&quot;name&quot; -- a string representing the identifier assigned to an RPKI object registration by the registration holder</li>
<li><t>&quot;digests&quot; -- an array of objects representing hashes that entirely cover an RPKI object; such an object can contain
the following members:</t>

<ul spacing="compact">
<li>&quot;digest&quot; -- a hexadecimal string representing the hash that entirely covers an RPKI object</li>
<li>&quot;digestAlgorithm&quot; -- a string literal representing the algorithm used to generate the hash that entirely covers an
RPKI object, with possible values of &quot;SHA-256&quot; and &quot;SHA-512&quot; <xref target="RFC6234"></xref> for this version of the specification</li>
</ul></li>
<li>&quot;notValidBefore&quot; -- a string that contains the time and date in Zulu (Z) format with UTC offset of 00:00
<xref target="RFC3339"></xref>, representing the not-valid-before date of an X.509 resource certificate for an RPKI object
(<xref target="RFC6487" sectionFormat="of" section="4"></xref>)</li>
<li>&quot;notValidAfter&quot; -- a string that contains the time and date in Zulu (Z) format with UTC offset of 00:00 <xref target="RFC3339"></xref>,
representing the not-valid-after date of an X.509 resource certificate for an RPKI object (<xref target="RFC6487" sectionFormat="of" section="4"></xref>)</li>
<li>&quot;publicationUri&quot; -- a URI string pointing to the location of an RPKI object within an RPKI repository;
the URI scheme is &quot;rsync&quot;, per <xref target="RFC6487" sectionFormat="of" section="4"></xref></li>
<li>&quot;notificationUri&quot; -- an HTTPS URI string pointing to the location of the RPKI Repository Delta Protocol (RRDP) update
notification file for an RPKI repository (<xref target="RFC8182" sectionFormat="of" section="3"></xref>)</li>
<li>&quot;entities&quot; -- an array of entity objects (<xref target="RFC9083" sectionFormat="of" section="5.1"></xref>), including the organization (entity) registered as
the authoritative source for an RPKI object</li>
<li><t>&quot;rpkiType&quot; -- a string literal representing various combinations of an RPKI repository and a Certification Authority
(CA), with the following possible values:</t>

<ul spacing="compact">
<li>&quot;hosted&quot; -- both the repository and CA are operated by a registry for an organization with allocated resources</li>
<li>&quot;delegated&quot; -- both the repository and CA are operated by an organization with resources allocated by a registry</li>
<li>&quot;hybrid&quot; -- the repository is operated by a registry for an organization with allocated resources whereas the CA
is operated by the organization itself</li>
</ul></li>
</ul>
<t>The purpose of an object with &quot;digest&quot; and &quot;digestAlgorithm&quot; members is to enable an RDAP server to present a message
digest (hash) for an entire RPKI object, thereby providing RDAP clients with an exact reference to the underlying RPKI
object. This can help with analysis, research, and/or debugging.</t>
<t>For a CA that implements RRDP <xref target="RFC8182"></xref>, the update notification file location is expected to be set in each X.509
resource certificate it issues (<xref target="RFC8182" sectionFormat="of" section="3.2"></xref>). Consequently, the &quot;notificationUri&quot; data should help inform
about the RPKI repository and/or CA operated downstream from a registry by an organization with resources allocated by
that registry.</t>
</section>

<section anchor="roa"><name>Route Origin Authorization</name>

<section anchor="roa_object_class"><name>Object Class</name>
<t>The Route Origin Authorization (ROA) object class can contain the following members:</t>

<ul spacing="compact">
<li>&quot;objectClassName&quot; -- the string &quot;rpki1_roa&quot;</li>
<li>&quot;handle&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;name&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;digests&quot; -- see <xref target="common_data_members"></xref></li>
<li><t>&quot;roaIps&quot; -- an array of objects representing CIDR address blocks within a ROA; such an object can contain the
following members:</t>

<ul spacing="compact">
<li>&quot;ip&quot; -- a string representing an IPv4 or IPv6 CIDR address block with the &quot;&lt;CIDR prefix&gt;/&lt;CIDR length&gt;&quot; format
(<xref target="RFC9582" sectionFormat="of" section="4"></xref>)</li>
<li>&quot;maxLength&quot; -- a number representing the maximum prefix length of the CIDR address block that the origin AS is
authorized to advertise; up to 32 for IPv4 and up to 128 for IPv6 (<xref target="RFC9582" sectionFormat="of" section="4"></xref>)</li>
</ul></li>
<li>&quot;originAutnum&quot; -- an unsigned 32-bit integer representing the origin autonomous system number (<xref target="RFC9582" sectionFormat="of" section="4"></xref>)</li>
<li>&quot;notValidBefore&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notValidAfter&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;publicationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notificationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;entities&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;rpkiType&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;events&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.5"></xref></li>
<li>&quot;links&quot; -- &quot;self&quot; link, and &quot;related&quot; links for IP network and IRR (when defined) objects (<xref target="RFC9083" sectionFormat="of" section="4.2"></xref>)</li>
<li>&quot;remarks&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.3"></xref></li>
</ul>
<t>Here is an elided example of a ROA object:</t>

<artwork><![CDATA[{
  "objectClassName": "rpki1_roa",
  "handle": "XXXX",
  "name": "ROA-1",
  "digests":
  [
    {
      "digest": "01234567...89abcdef",
      "digestAlgorithm": "SHA-256",
    },
    ...
  ],
  "roaIps":
  [
    {
      "ip": "2001:db8::/48",
      "maxLength": 64
    },
    ...
  ],
  "originAutnum": 65536,
  "notValidBefore": "2024-04-27T23:59:59Z",
  "notValidAfter": "2025-04-27T23:59:59Z",
  "publicationUri": "rsync://example.net/path/to/XXXX.roa",
  "notificationUri": "https://example.net/path/to/notification.xml",
  "entities":
  [
    {
      "objectClassName": "entity",
      "handle": "XYZ-RIR",
      ...
    },
    ...
  ],
  "rpkiType": "hosted",
  "events":
  [
    {
      "eventAction": "registration",
      "eventDate": "2024-01-01T23:59:59Z"
    },
    ...
  ],
  "links":
  [
    {
      "value": "https://example.net/rdap/rpki1_roa/handle/XXXX",
      "rel": "self",
      "href": "https://example.net/rdap/rpki1_roa/handle/XXXX",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_roa/handle/XXXX",
      "rel": "related",
      "href": "https://example.net/rdap/ip/2001:db8::/48",
      "type": "application/rdap+json"
    },
    ...
  ],
  "remarks":
  [
    {
      "description": [ "ROA" ]
    }
  ]
}
]]></artwork>
</section>

<section anchor="lookup"><name>Lookup</name>
<t>The resource type path segment for exact or closest match lookup of a ROA object is &quot;rpki1_roa&quot;.</t>
<t>The following lookup path segments are defined for a ROA object:</t>
<t>Syntax: rpki1_roa/handle/&lt;handle&gt;</t>
<t>Syntax: rpki1_roa/ip/&lt;IP address&gt;</t>
<t>Syntax: rpki1_roa/ip/&lt;CIDR prefix&gt;/&lt;CIDR length&gt;</t>
<t>Syntax: rpki1_roa/digest/&lt;digest algorithm&gt;/&lt;digest&gt;</t>
<t>The <tt>/ip</tt> syntax mirrors the syntax for IP networks found in <xref target="RFC9082" sectionFormat="of" section="3.1.1"></xref>.</t>
<t>A lookup query for ROA information by handle is specified using this form:</t>
<t>rpki1_roa/handle/XXXX</t>
<t>XXXX is a string representing the &quot;handle&quot; property of a ROA, as described in <xref target="roa_object_class"></xref>. The following URL
would be used to find information for a ROA that exactly matches the &quot;8a848ab0729f0f4f0173ba2013bc5eb3&quot; handle:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/handle/8a848ab0729f0f4f0173ba2013bc5eb3
]]></artwork>
<t>A lookup query for ROA information by IP address is specified using this form:</t>
<t>rpki1_roa/ip/YYYY</t>
<t>YYYY is a string representing an IPv4 or IPv6 address. The following URL would be used to find information for the
most-specific ROA matching the &quot;192.0.2.0&quot; IP address:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/ip/192.0.2.0
]]></artwork>
<t>Similarly, for the &quot;2001:db8::&quot; IP address:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/ip/2001%3Adb8%3A%3A
]]></artwork>
<t>A lookup query for ROA information by CIDR is specified using this form:</t>
<t>rpki1_roa/ip/YYYY/ZZZZ</t>
<t>YYYY/ZZZZ is a string representing the &quot;ip&quot; property of a CIDR address block within a ROA, as described in
<xref target="roa_object_class"></xref>. The following URL would be used to find information for the most-specific ROA matching the
&quot;192.0.2.0/25&quot; CIDR:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/ip/192.0.2.0/25
]]></artwork>
<t>Similarly, for the &quot;2001:db8::/64&quot; CIDR:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/ip/2001%3Adb8%3A%3A/64
]]></artwork>
<t>A lookup query for ROA information by digest is specified using this form:</t>
<t>rpki1_roa/digest/BBBB/CCCC</t>
<t>BBBB is a string representing the &quot;digestAlgorithm&quot; property, and CCCC is a string representing the &quot;digest&quot; property,
as described in <xref target="common_data_members"></xref>. The following URL would be used to find information for a ROA matching the
&quot;7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069&quot; SHA-256 digest:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roa/digest/SHA-256/7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069
]]></artwork>
<t>In the &quot;links&quot; array of a ROA object, the context URI (&quot;value&quot; member) of each link should be the lookup URL by its
handle, and if that's not available, then the lookup URL by one of its IP addresses.</t>
</section>

<section anchor="search"><name>Search</name>
<t>The resource type path segment for searching ROA objects is &quot;rpki1_roas&quot;.</t>
<t>The following search path segments are defined for ROA objects:</t>
<t>Syntax: rpki1_roas?name=&lt;name search pattern&gt;</t>
<t>Syntax: rpki1_roas?originAutnum=&lt;autonomous system number&gt;</t>
<t>Searches for ROA information by name are specified using this form:</t>
<t>rpki1_roas?name=XXXX</t>
<t>XXXX is a search pattern per <xref target="RFC9082" sectionFormat="of" section="4.1"></xref>, representing the &quot;name&quot; property of a ROA, as described in
<xref target="roa_object_class"></xref>. The following URL would be used to find information for ROA names matching the &quot;ROA-*&quot; pattern:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roas?name=ROA-*
]]></artwork>
<t>Searches for ROA information by origin autonomous system number are specified using this form:</t>
<t>rpki1_roas?originAutnum=BBBB</t>
<t>BBBB is an autonomous system number representing the &quot;originAutnum&quot; property of a ROA, as described in
<xref target="roa_object_class"></xref>. The following URL would be used to find information for ROAs with origin autonomous system number
65536:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_roas?originAutnum=65536
]]></artwork>

<section anchor="search-results"><name>Search Results</name>
<t>The ROA search results are returned in the &quot;rpki1_roaSearchResults&quot; member, which is an array of ROA objects
(<xref target="roa_object_class"></xref>).</t>
<t>Here is an elided example of the search results when finding information for ROAs with origin autonomous system number
65536:</t>

<artwork><![CDATA[{
  "rdapConformance":
  [
    "rdap_level_0",
    "rpki1",
    ...
  ],
  ...
  "rpki1_roaSearchResults":
  [
    {
      "objectClassName": "rpki1_roa",
      "handle": "XXXX",
      "name": "ROA-1",
      "digests":
      [
        {
          "digest": "01234567...89abcdef",
          "digestAlgorithm": "SHA-256",
        },
        ...
      ],
      "roaIps":
      [
        {
          "ip": "2001:db8::/48",
          "maxLength": 64
        },
        ...
      ],
      "originAutnum": 65536,
      "notValidBefore": "2024-04-27T23:59:59Z",
      "notValidAfter": "2025-04-27T23:59:59Z",
      "publicationUri": "rsync://example.net/path/to/XXXX.roa",
      "notificationUri": "https://example.net/path/to/notification.xml",
      "entities":
      [
        {
          "objectClassName": "entity",
          "handle": "XYZ-RIR",
          ...
        },
        ...
      ],
      "rpkiType": "hosted",
      "events":
      [
        {
          "eventAction": "registration",
          "eventDate": "2024-01-01T23:59:59Z"
        },
        ...
      ],
      "links":
      [
        {
          "value": "https://example.net/rdap/rpki1_roas?originAutnum=65536",
          "rel": "self",
          "href": "https://example.net/rdap/rpki1_roa/handle/XXXX",
          "type": "application/rdap+json"
        },
        {
          "value": "https://example.net/rdap/rpki1_roas?originAutnum=65536",
          "rel": "related",
          "href": "https://example.net/rdap/ip/2001:db8::/48",
          "type": "application/rdap+json"
        },
        ...
      ]
    },
    ...
  ]
}
]]></artwork>
</section>
</section>

<section anchor="reverse-search"><name>Reverse Search</name>

<section anchor="by-entity"><name>By Entity</name>
<t>Per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource type of &quot;rpki1_roas&quot;,
a related resource type of &quot;entity&quot;, and an entity property of &quot;fn&quot;, &quot;handle&quot;, &quot;email&quot; or &quot;role&quot;, then the reverse
search will be performed on the ROA objects from its data store by the given entity property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for ROA searches in
the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related resource type is &quot;entity&quot;.</t>
<t>When an entity object has associated ROA objects, a related reverse search link could be included in its returned data.
For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/entity/XYZ-RIR",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_roas/reverse_search/entity?handle=XYZ-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>

<section anchor="by-ip-network"><name>By IP Network</name>
<t>An IP network object can span multiple ROA objects, and vice versa. Their relationship is affected by IP address
transfers and splits in a registry. It would be useful to find all the ROA objects associated with an IP network object.
To that end, per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource type of
&quot;rpki1_roas&quot;, a related resource type of &quot;ip&quot;, and an IP network property of &quot;handle&quot;, then the reverse search will be
performed on the ROA objects from its data store by the given IP network property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for ROA searches in
the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related resource type is &quot;ip&quot;.</t>
<t>When an IP network object has associated ROA objects, a related reverse search link could be included in its returned
data. For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/ip/2001:db8::/48",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_roas/reverse_search/ip?handle=XXXX-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>
</section>
</section>

<section anchor="aspa"><name>Autonomous System Provider Authorization</name>

<section anchor="aspa_object_class"><name>Object Class</name>
<t>The Autonomous System Provider Authorization (ASPA) object class can contain the following members:</t>

<ul spacing="compact">
<li>&quot;objectClassName&quot; -- the string &quot;rpki1_aspa&quot;</li>
<li>&quot;handle&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;name&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;digests&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;customerAutnum&quot; -- an unsigned 32-bit integer representing an autonomous system number of the registration holder
(called customer per ASPA terminology) (<xref target="I-D.ietf-sidrops-aspa-profile" sectionFormat="of" section="3"></xref>)</li>
<li>&quot;providerAutnums&quot; -- an array of unsigned 32-bit integers, each representing the autonomous system number of an AS
that is authorized as a provider (<xref target="I-D.ietf-sidrops-aspa-profile" sectionFormat="of" section="3"></xref>)</li>
<li>&quot;notValidBefore&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notValidAfter&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;publicationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notificationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;entities&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;rpkiType&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;events&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.5"></xref></li>
<li>&quot;links&quot; -- &quot;self&quot; link, and &quot;related&quot; links for autonomous system number and IRR (when defined) objects
(<xref target="RFC9083" sectionFormat="of" section="4.2"></xref>)</li>
<li>&quot;remarks&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.3"></xref></li>
</ul>
<t>Here is an elided example of an ASPA object:</t>

<artwork><![CDATA[{
  "objectClassName": "rpki1_aspa",
  "handle": "XXXX",
  "name": "ASPA-1",
  "digests":
  [
    {
      "digest": "23456789...abcdef01",
      "digestAlgorithm": "SHA-256",
    },
    ...
  ],
  "customerAutnum": 65536,
  "providerAutnums":
  [
    65542,
    ...
  ],
  "notValidBefore": "2024-04-27T23:59:59Z",
  "notValidAfter": "2025-04-27T23:59:59Z",
  "publicationUri": "rsync://example.net/path/to/XXXX.aspa",
  "notificationUri": "https://example.net/path/to/notification.xml",
  "entities":
  [
    {
      "objectClassName": "entity",
      "handle": "XYZ-RIR",
      ...
    },
    ...
  ],
  "rpkiType": "hosted",
  "events":
  [
    {
      "eventAction": "registration",
      "eventDate": "2024-01-01T23:59:59Z"
    },
    ...
  ],
  "links":
  [
    {
      "value": "https://example.net/rdap/rpki1_aspa/handle/XXXX",
      "rel": "self",
      "href": "https://example.net/rdap/rpki1_aspa/handle/XXXX",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_aspa/handle/XXXX",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65536",
      "type": "application/rdap+json"
    },
    ...
  ],
  "remarks":
  [
    {
      "description": [ "ASPA" ]
    }
  ]
}
]]></artwork>
</section>

<section anchor="lookup-1"><name>Lookup</name>
<t>The resource type path segment for exact match lookup of an ASPA object is &quot;rpki1_aspa&quot;.</t>
<t>The following lookup path segments are defined for an ASPA object:</t>
<t>Syntax: rpki1_aspa/handle/&lt;handle&gt;</t>
<t>Syntax: rpki1_aspa/autnum/&lt;autonomous system number&gt;</t>
<t>Syntax: rpki1_aspa/digest/&lt;digest algorithm&gt;/&lt;digest&gt;</t>
<t>The <tt>/autnum</tt> syntax mirrors the syntax for autonomous system numbers found in <xref target="RFC9082" sectionFormat="of" section="3.1.2"></xref>.</t>
<t>A lookup query for ASPA information by handle is specified using this form:</t>
<t>rpki1_aspa/handle/XXXX</t>
<t>XXXX is a string representing the &quot;handle&quot; property of an ASPA, as described in <xref target="aspa_object_class"></xref>. The following URL
would be used to find information for an ASPA that exactly matches the &quot;47ab80ed8693f25d0187d93a07db4484&quot; handle:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_aspa/handle/47ab80ed8693f25d0187d93a07db4484
]]></artwork>
<t>A lookup query for ASPA information by customer autonomous system number is specified using this form:</t>
<t>rpki1_aspa/autnum/YYYY</t>
<t>YYYY is an autonomous system number representing the &quot;customerAutnum&quot; property of an ASPA, as described in
<xref target="aspa_object_class"></xref>. The following URL would be used to find information for an ASPA with customer autonomous system
number 65536:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_aspa/autnum/65536
]]></artwork>
<t>A lookup query for ASPA information by digest is specified using this form:</t>
<t>rpki1_aspa/digest/BBBB/CCCC</t>
<t>BBBB is a string representing the &quot;digestAlgorithm&quot; property, and CCCC is a string representing the &quot;digest&quot; property,
as described in <xref target="common_data_members"></xref>. The following URL would be used to find information for an ASPA matching the
&quot;f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d90697&quot; SHA-256 digest:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_aspa/digest/SHA-256/f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d90697
]]></artwork>
<t>In the &quot;links&quot; array of an ASPA object, the context URI (&quot;value&quot; member) of each link should be the lookup URL by its
handle, and if that's not available, then the lookup URL by its customer autonomous system number.</t>
</section>

<section anchor="search-1"><name>Search</name>
<t>The resource type path segment for searching ASPA objects is &quot;rpki1_aspas&quot;.</t>
<t>The following search path segments are defined for ASPA objects:</t>
<t>Syntax: rpki1_aspas?name=&lt;name search pattern&gt;</t>
<t>Syntax: rpki1_aspas?providerAutnum=&lt;provider autonomous system number&gt;</t>
<t>Searches for ASPA information by name are specified using this form:</t>
<t>rpki1_aspas?name=XXXX</t>
<t>XXXX is a search pattern per <xref target="RFC9082" sectionFormat="of" section="4.1"></xref>, representing the &quot;name&quot; property of an ASPA, as described in
<xref target="aspa_object_class"></xref>. The following URL would be used to find information for ASPA names matching the &quot;ASPA-*&quot; pattern:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_aspas?name=ASPA-*
]]></artwork>
<t>Searches for ASPA information by provider autonomous system number are specified using this form:</t>
<t>rpki1_aspas?providerAutnum=YYYY</t>
<t>YYYY is an autonomous system number within the &quot;providerAutnums&quot; property of an ASPA, as described in
<xref target="aspa_object_class"></xref>. The following URL would be used to find information for ASPAs with provider autonomous system
number 65542:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_aspas?providerAutnum=65542
]]></artwork>

<section anchor="search-results-1"><name>Search Results</name>
<t>The ASPA search results are returned in the &quot;rpki1_aspaSearchResults&quot; member, which is an array of ASPA objects
(<xref target="aspa_object_class"></xref>).</t>
<t>Here is an elided example of the search results when finding information for ASPAs with provider autonomous system
number 65542:</t>

<artwork><![CDATA[{
  "rdapConformance":
  [
    "rdap_level_0",
    "rpki1",
    ...
  ],
  ...
  "rpki1_aspaSearchResults":
  [
    {
      "objectClassName": "rpki1_aspa",
      "handle": "XXXX",
      "name": "ASPA-1",
      "digests":
      [
        {
          "digest": "23456789...abcdef01",
          "digestAlgorithm": "SHA-256",
        },
        ...
      ],
      "customerAutnum": 65536,
      "providerAutnums":
      [
        65542,
        ...
      ],
      "notValidBefore": "2024-04-27T23:59:59Z",
      "notValidAfter": "2025-04-27T23:59:59Z",
      "publicationUri": "rsync://example.net/path/to/XXXX.aspa",
      "notificationUri": "https://example.net/path/to/notification.xml",
      "entities":
      [
        {
          "objectClassName": "entity",
          "handle": "XYZ-RIR",
          ...
        },
        ...
      ],
      "rpkiType": "hosted",
      "events":
      [
        {
          "eventAction": "registration",
          "eventDate": "2024-01-01T23:59:59Z"
        },
        ...
      ],
      "links":
      [
        {
          "value": "https://example.net/rdap/rpki1_aspas?providerAutnum=65542",
          "rel": "self",
          "href": "https://example.net/rdap/rpki1_aspa/handle/XXXX",
          "type": "application/rdap+json"
        },
        ...
      ],
      ...
    },
    ...
  ]
}
]]></artwork>
</section>
</section>

<section anchor="reverse-search-1"><name>Reverse Search</name>

<section anchor="by-entity-1"><name>By Entity</name>
<t>Per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource type of
&quot;rpki1_aspas&quot;, a related resource type of &quot;entity&quot;, and an entity property of &quot;fn&quot;, &quot;handle&quot;, &quot;email&quot; or &quot;role&quot;, then
the reverse search will be performed on the ASPA objects from its data store by the given entity property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for ASPA searches in
the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related resource type is &quot;entity&quot;.</t>
<t>When an entity object has associated ASPA objects, a related reverse search link could be included in its returned data.
For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/entity/XYZ-RIR",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_aspas/reverse_search/entity?handle=XYZ-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>

<section anchor="by-autonomous-system-number"><name>By Autonomous System Number</name>
<t>An autonomous system number object for an ASN range can span multiple ASPA objects. However, an ASPA object can only be
linked to a single autonomous system number object. It would be useful to find all the ASPA objects associated with an
autonomous system number object. To that end, per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query
with a searchable resource type of &quot;rpki1_aspas&quot;, a related resource type of &quot;autnum&quot;, and an autonomous system number
property of &quot;handle&quot;, then the reverse search will be performed on the ASPA objects from its data store by the given
autonomous system number property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for ASPA searches in
the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related resource type is &quot;autnum&quot;.</t>
<t>When an autonomous system number object has associated ASPA objects, a related reverse search link could be included in
its returned data. For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/autnum/65536",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_aspas/reverse_search/autnum?handle=YYYY-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>
</section>
</section>

<section anchor="x509_resource_cert"><name>X.509 Resource Certificate</name>

<section anchor="x509_resource_cert_object_class"><name>Object Class</name>
<t>The X.509 resource certificate object class can contain the following members:</t>

<ul spacing="compact">
<li>&quot;objectClassName&quot; -- the string &quot;rpki1_x509ResourceCert&quot;</li>
<li>&quot;handle&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;digests&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;serialNumber&quot; -- a string representing the unique identifier for the certificate (<xref target="RFC6487" sectionFormat="of" section="4.2"></xref>)</li>
<li>&quot;issuer&quot; -- a string representing the CA that issued the certificate (<xref target="RFC6487" sectionFormat="of" section="4.4"></xref>)</li>
<li>&quot;signatureAlgorithm&quot; -- a string representing the algorithm used by the CA to sign the certificate
(<xref target="RFC6487" sectionFormat="of" section="4.3"></xref>)</li>
<li>&quot;subject&quot; -- a string representing the identity of the subject the certificate is issued to (<xref target="RFC6487" sectionFormat="of" section="4.5"></xref>)</li>
<li><t>&quot;subjectPublicKeyInfo&quot; -- an object representing the subject's public key information (<xref target="RFC6487" sectionFormat="of" section="4.7"></xref>), with
the following members:</t>

<ul spacing="compact">
<li>&quot;publicKeyAlgorithm&quot; -- a string representing the algorithm for the public key</li>
<li>&quot;publicKey&quot; -- a string representation of the public key</li>
</ul></li>
<li>&quot;subjectKeyIdentifier&quot; -- a string, typically Base64-encoded, representing the unique identifier for the subject's
public key (<xref target="RFC6487" sectionFormat="of" section="4.8.2"></xref>)</li>
<li>&quot;ips&quot; -- an array of strings, each representing an IPv4 or IPv6 CIDR address block with the
&quot;&lt;CIDR prefix&gt;/&lt;CIDR length&gt;&quot; format (<xref target="RFC6487" sectionFormat="of" section="4.8.10"></xref>)</li>
<li>&quot;autnums&quot; -- an array of unsigned 32-bit integers, each representing an autonomous system number
(<xref target="RFC6487" sectionFormat="of" section="4.8.11"></xref>)</li>
<li>&quot;notValidBefore&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notValidAfter&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;publicationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;notificationUri&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;entities&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;rpkiType&quot; -- see <xref target="common_data_members"></xref></li>
<li>&quot;events&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.5"></xref></li>
<li>&quot;links&quot; -- &quot;self&quot; link, &quot;related&quot; links for IP network and/or autonomous system number objects
(<xref target="RFC9083" sectionFormat="of" section="4.2"></xref>), and &quot;rdap-help&quot; link (see <xref target="rdap_for_delegated_and_hybrid_rpki"></xref>)</li>
<li>&quot;remarks&quot; -- see <xref target="RFC9083" sectionFormat="of" section="4.3"></xref></li>
</ul>
<t>The following types of certificates can be represented using this object class:</t>

<ul spacing="compact">
<li>a CA certificate (<xref target="RFC6480" sectionFormat="of" section="2.2"></xref>) that a registry issues to an organization (the subject) for its allocated
IP addresses and/or autonomous system numbers, authorizing the organization CA to issue end-entity certificates
(<xref target="RFC6480" sectionFormat="of" section="2.3"></xref>)</li>
<li>a BGPSec router certificate <xref target="RFC8209"></xref> where an ASN(s) holder cryptographically asserts that a router (the subject)
holding the corresponding private key is authorized to emit secure route advertisements on behalf of the AS(es)
specified in the certificate</li>
</ul>
<t>Here is an elided example of an X.509 resource certificate object for a CA certificate:</t>

<artwork><![CDATA[{
  "objectClassName": "rpki1_x509ResourceCert",
  "handle": "ABCD",
  "digests":
  [
    {
      "digest": "456789ab...cdef0123",
      "digestAlgorithm": "SHA-256",
    },
    ...
  ],
  "serialNumber": "1234",
  "issuer": "CN=RIR-CA",
  "signatureAlgorithm": "ecdsa-with-SHA256",
  "subject": "CN=ISP-CA",
  "subjectPublicKeyInfo":
  {
    "publicKeyAlgorithm": "id-ecPublicKey",
    "publicKey": "..."
  },
  "subjectKeyIdentifier": "hOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=",
  "ips":
  [
    "192.0.2.0/24",
    "2001:db8::/48"
  ],
  "autnums":
  [
    65536,
    65537
  ],
  "notValidBefore": "2024-04-27T23:59:59Z",
  "notValidAfter": "2025-04-27T23:59:59Z",
  "publicationUri": "rsync://example.net/path/to/ABCD.cer",
  "notificationUri": "https://example.net/path/to/notification.xml",
  "entities":
  [
    {
      "objectClassName": "entity",
      "handle": "XYZ-RIR",
      ...
    },
    ...
  ],
  "rpkiType": "hosted",
  "events":
  [
    {
      "eventAction": "registration",
      "eventDate": "2024-01-01T23:59:59Z"
    },
    ...
  ],
  "links":
  [
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "rel": "self",
      "href": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "rel": "related",
      "href": "https://example.net/rdap/ip/192.0.2.0/24",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "rel": "related",
      "href": "https://example.net/rdap/ip/2001:db8::/48",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65536",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65537",
      "type": "application/rdap+json"
    },
    ...
  ],
  "remarks":
  [
    {
      "description": [ "CA certificate" ]
    }
  ]
}
]]></artwork>
<t>Here is an elided example of an X.509 resource certificate object for a BGPSec router certificate:</t>

<artwork><![CDATA[{
  "objectClassName": "rpki1_x509ResourceCert",
  "handle": "EFGH",
  "digests":
  [
    {
      "digest": "56789abc...def01234",
      "digestAlgorithm": "SHA-256",
    },
    ...
  ],
  "serialNumber": "5678",
  "issuer": "CN=ISP-CA",
  "signatureAlgorithm": "ecdsa-with-SHA256",
  "subject": "CN=ISP-BGPSEC-ROUTER",
  "subjectPublicKeyInfo":
  {
    "publicKeyAlgorithm": "id-ecPublicKey",
    "publicKey": "..."
  },
  "subjectKeyIdentifier": "iOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=",
  "autnums":
  [
    65536,
    65537
  ],
  "notValidBefore": "2024-04-27T23:59:59Z",
  "notValidAfter": "2025-04-27T23:59:59Z",
  "publicationUri": "rsync://example.net/path/to/EFGH.cer",
  "notificationUri": "https://example.net/path/to/notification.xml",
  "entities":
  [
    {
      "objectClassName": "entity",
      "handle": "XYZ-RIR",
      ...
    },
    ...
  ],
  "rpkiType": "hosted",
  "events":
  [
    {
      "eventAction": "registration",
      "eventDate": "2024-01-01T23:59:59Z"
    },
    ...
  ],
  "links":
  [
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/EFGH",
      "rel": "self",
      "href": "https://example.net/rdap/rpki1_x509ResourceCert/handle/EFGH",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/EFGH",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65536",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/EFGH",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65537",
      "type": "application/rdap+json"
    },
    ...
  ],
  "remarks":
  [
    {
      "description": [ "BGPSec router certificate" ]
    }
  ]
}
]]></artwork>
</section>

<section anchor="lookup-2"><name>Lookup</name>
<t>The resource type path segment for exact match lookup of an X.509 resource certificate object is
&quot;rpki1_x509ResourceCert&quot;.</t>
<t>The following lookup path segments are defined for an X.509 resource certificate object:</t>
<t>Syntax: rpki1_x509ResourceCert/handle/&lt;handle&gt;</t>
<t>Syntax: rpki1_x509ResourceCert/digest/&lt;digest algorithm&gt;/&lt;digest&gt;</t>
<t>A lookup query for X.509 resource certificate information by handle is specified using this form:</t>
<t>rpki1_x509ResourceCert/handle/XXXX</t>
<t>XXXX is a string representing the &quot;handle&quot; property of an X.509 resource certificate, as described in
<xref target="x509_resource_cert_object_class"></xref>. The following URL would be used to find information for an X.509 resource
certificate that exactly matches the &quot;ABCD&quot; handle:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCert/handle/ABCD
]]></artwork>
<t>A lookup query for X.509 resource certificate information by digest is specified using this form:</t>
<t>rpki1_x509ResourceCert/digest/BBBB/CCCC</t>
<t>BBBB is a string representing the &quot;digestAlgorithm&quot; property, and CCCC is a string representing the &quot;digest&quot; property,
as described in <xref target="common_data_members"></xref>. The following URL would be used to find information for an X.509 resource
certificate matching the &quot;83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d90697f&quot; SHA-256 digest:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCert/digest/SHA-256/83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d90697f
]]></artwork>
</section>

<section anchor="search-2"><name>Search</name>
<t>The resource type path segment for searching X.509 resource certificate objects is &quot;rpki1_x509ResourceCerts&quot;.</t>
<t>The following search path segments are defined for X.509 resource certificate objects:</t>
<t>Syntax: rpki1_x509ResourceCerts?issuer=&lt;issuer search pattern&gt;</t>
<t>Syntax: rpki1_x509ResourceCerts?subject=&lt;subject search pattern&gt;</t>
<t>Syntax: rpki1_x509ResourceCerts?subjectKeyIdentifier=&lt;subject key identifier&gt;</t>
<t>Syntax: rpki1_x509ResourceCerts?ip=&lt;IP address&gt;</t>
<t>Syntax: rpki1_x509ResourceCerts?cidr=&lt;CIDR&gt;</t>
<t>Syntax: rpki1_x509ResourceCerts?autnum=&lt;autonomous system number&gt;</t>
<t>Searches for X.509 resource certificate information by certificate issuer are specified using this form:</t>
<t>rpki1_x509ResourceCerts?issuer=YYYY</t>
<t>YYYY is a search pattern per <xref target="RFC9082" sectionFormat="of" section="4.1"></xref>, representing the &quot;issuer&quot; property of an X.509 resource
certificate object, as described in <xref target="x509_resource_cert_object_class"></xref>. The following URL would be used to find
information for X.509 resource certificate objects with issuer matching the &quot;CN=ISP-*&quot; pattern:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?issuer=CN%3DISP-*
]]></artwork>
<t>Searches for X.509 resource certificate information by certificate subject are specified using this form:</t>
<t>rpki1_x509ResourceCerts?subject=ZZZZ</t>
<t>ZZZZ is a search pattern per <xref target="RFC9082" sectionFormat="of" section="4.1"></xref>, representing the &quot;subject&quot; property of an X.509 resource
certificate object, as described in <xref target="x509_resource_cert_object_class"></xref>. The following URL would be used to find
information for X.509 resource certificate objects with subject matching the &quot;CN=ISP-BGPSEC-ROUTE*&quot; pattern:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?subject=CN%3DISP-BGPSEC-ROUTE*
]]></artwork>
<t>Searches for X.509 resource certificate information by subject key identifier are specified using this form:</t>
<t>rpki1_x509ResourceCerts?subjectKeyIdentifier=BBBB</t>
<t>BBBB is a string representing the &quot;subjectKeyIdentifier&quot; property of an X.509 resource certificate object, as described
in <xref target="x509_resource_cert_object_class"></xref>. The following URL would be used to find an X.509 resource certificate object with
subject key identifier matching the &quot;iOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=&quot; string:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?subjectKeyIdentifier=iOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=
]]></artwork>
<t>Searches for X.509 resource certificate information by an IP address are specified using this form:</t>
<t>rpki1_x509ResourceCerts?ip=CCCC</t>
<t>CCCC is a string representing an IPv4 or IPv6 address. The following URL would be used to find information for X.509
resource certificate objects with the &quot;ips&quot; member encompassing the &quot;192.0.2.0&quot; IP address:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?ip=192.0.2.0
]]></artwork>
<t>Similarly, for the &quot;2001:db8::&quot; IP address:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?ip=2001%3Adb8%3A%3A
]]></artwork>
<t>Searches for X.509 resource certificate information by a CIDR are specified using this form:</t>
<t>rpki1_x509ResourceCerts?cidr=CCCC/DDDD</t>
<t>CCCC/DDDD is a string representing an IPv4 or IPv6 CIDR, with CCCC as the CIDR prefix and DDDD as the CIDR length. The
following URL would be used to find information for X.509 resource certificate objects with the &quot;ips&quot; member
encompassing the &quot;192.0.2.0/25&quot; CIDR:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?cidr=192.0.2.0%2F25
]]></artwork>
<t>Similarly, for the &quot;2001:db8::/64&quot; CIDR:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?cidr=2001%3Adb8%3A%3A%2F64
]]></artwork>
<t>Searches for X.509 resource certificate information by an autonomous system number are specified using this form:</t>
<t>rpki1_x509ResourceCerts?autnum=EEEE</t>
<t>EEEE is an autonomous system number within the &quot;autnums&quot; property of an X.509 resource certificate object, as described
in <xref target="x509_resource_cert_object_class"></xref>. The following URL would be used to find information for X.509 resource
certificate objects with the &quot;autnums&quot; member including autonomous system number 65536:</t>

<artwork><![CDATA[https://example.net/rdap/rpki1_x509ResourceCerts?autnum=65536
]]></artwork>

<section anchor="search-results-2"><name>Search Results</name>
<t>The X.509 resource certificate search results are returned in the &quot;rpki1_x509ResourceCertSearchResults&quot; member, which is
an array of X.509 resource certificate objects (<xref target="x509_resource_cert_object_class"></xref>).</t>
<t>Here is an elided example of the search results when finding information for X.509 resource certificate objects with
issuer matching the &quot;CN=ISP-*&quot; pattern:</t>

<artwork><![CDATA[{
  "rdapConformance":
  [
    "rdap_level_0",
    "rpki1",
    ...
  ],
  ...
  "rpki1_x509ResourceCertSearchResults":
  [
    {
      "objectClassName": "rpki1_x509ResourceCert",
      "handle": "EFGH",
      "digests":
      [
        {
          "digest": "56789abc...def01234",
          "digestAlgorithm": "SHA-256",
        },
        ...
      ],
      "serialNumber": "5678",
      "issuer": "CN=ISP-CA",
      "signatureAlgorithm": "ecdsa-with-SHA256",
      "subject": "CN=ISP-BGPSEC-ROUTER",
      "subjectPublicKeyInfo":
      {
        "publicKeyAlgorithm": "id-ecPublicKey",
        "publicKey": "..."
      },
      "subjectKeyIdentifier": "iOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=",
      "autnums":
      [
        65536,
        65537
      ],
      "notValidBefore": "2024-04-27T23:59:59Z",
      "notValidAfter": "2025-04-27T23:59:59Z",
      "publicationUri": "rsync://example.net/path/to/ABCD.cer",
      "notificationUri": "https://example.net/path/to/notification.xml",
      "entities":
      [
        {
          "objectClassName": "entity",
          "handle": "XYZ-RIR",
          ...
        },
        ...
      ],
      "rpkiType": "hosted",
      "events":
      [
        {
          "eventAction": "registration",
          "eventDate": "2024-01-01T23:59:59Z"
        },
        ...
      ],
      "links":
      [
        {
          "value": "https://example.net/rdap/rpki1_x509ResourceCerts?issuer=CN=ISP-*",
          "rel": "self",
          "href": "https://example.net/rdap/rpki1_x509ResourceCert/handle/EFGH",
          "type": "application/rdap+json"
        },
        {
          "value": "https://example.net/rdap/rpki1_x509ResourceCerts?issuer=CN=ISP-*",
          "rel": "related",
          "href": "https://example.net/rdap/autnum/65536",
          "type": "application/rdap+json"
        },
        {
          "value": "https://example.net/rdap/rpki1_x509ResourceCerts?issuer=CN=ISP-*",
          "rel": "related",
          "href": "https://example.net/rdap/autnum/65537",
          "type": "application/rdap+json"
        },
        ...
      ],
      ...
    },
    ...
  ]
}
]]></artwork>
</section>
</section>

<section anchor="reverse-search-2"><name>Reverse Search</name>

<section anchor="by-entity-2"><name>By Entity</name>
<t>Per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource type of
&quot;rpki1_x509ResourceCerts&quot;, a related resource type of &quot;entity&quot;, and an entity property of &quot;fn&quot;, &quot;handle&quot;, &quot;email&quot; or
&quot;role&quot;, then the reverse search will be performed on the X.509 resource certificate objects from its data store by the
given entity property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for X.509 resource
certificate searches in the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related
resource type is &quot;entity&quot;.</t>
<t>When an entity object has associated X.509 resource certificate objects, a related reverse search link could be included
in its returned data. For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/entity/XYZ-RIR",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_x509ResourceCerts/reverse_search/entity?handle=XYZ-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>

<section anchor="by-ip-network-1"><name>By IP Network</name>
<t>It would be useful to find all the X.509 resource certificate objects associated with an IP network object. To that
end, per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource type of
&quot;rpki1_x509ResourceCerts&quot;, a related resource type of &quot;ip&quot;, and an IP network property of &quot;handle&quot;, then the reverse
search will be performed on the X.509 resource certificate objects from its data store by the given IP network property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for X.509 resource
certificate searches in the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related
resource type is &quot;ip&quot;.</t>
<t>When an IP network object has associated X.509 resource certificate objects, a related reverse search link could be
included in its returned data. For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/ip/2001:db8::/48",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_x509ResourceCerts/reverse_search/ip?handle=XXXX-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>

<section anchor="by-autonomous-system-number-1"><name>By Autonomous System Number</name>
<t>It would be useful to find all the X.509 resource certificate objects associated with an autonomous system number
object. To that end, per <xref target="RFC9536" sectionFormat="of" section="2"></xref>, if a server receives a reverse search query with a searchable resource
type of &quot;rpki1_x509ResourceCerts&quot;, a related resource type of &quot;autnum&quot;, and an autonomous system number property of
&quot;handle&quot;, then the reverse search will be performed on the X.509 resource certificate objects from its data store by the
given autonomous system number property.</t>
<t><xref target="reverse_search_registry"></xref> and <xref target="reverse_search_mapping_registry"></xref> include registration of entries for X.509 resource
certificate searches in the IANA &quot;RDAP Reverse Search&quot; and &quot;RDAP Reverse Search Mapping&quot; registries when the related
resource type is &quot;autnum&quot;.</t>
<t>When an autonomous system number object has associated X.509 resource certificate objects, a related reverse search link
could be included in its returned data. For example:</t>

<artwork><![CDATA[{
  "value": "https://example.net/rdap/autnum/65536",
  "rel": "related",
  "href": "https://example.net/rdap/rpki1_x509ResourceCerts/reverse_search/autnum?handle=YYYY-RIR",
  "type": "application/rdap+json"
}
]]></artwork>
</section>
</section>
</section>

<section anchor="rdap_for_delegated_and_hybrid_rpki"><name>RDAP for Delegated and Hybrid RPKI</name>
<t>For delegated and hybrid RPKI (see &quot;rpkiTypes&quot; in <xref target="common_data_members"></xref>), a registry may ask an organization with
allocated resources to provide the base URL for its RDAP service. If the RDAP base URL is provided, then in the X.509
resource certificate object (<xref target="x509_resource_cert_object_class"></xref>) for that organization's CA certificate, the registry
MUST include a link object (<xref target="RFC9083" sectionFormat="of" section="4.2"></xref>) with the &quot;rel&quot; member set to &quot;rdap-help&quot; and the &quot;href&quot; member set
to the help URL (<xref target="RFC9082" sectionFormat="of" section="3.1.6"></xref>) for that RDAP service by appending the &quot;help&quot; path segment to the provided
base URL. RDAP clients can then parse the base RDAP URL from the &quot;href&quot; value of such a link object and use the &quot;ips&quot;
and &quot;autnums&quot; values from the X.509 resource certificate object to form ROA and ASPA lookup queries for that
organization's RDAP service.</t>
<t>&quot;rdap-help&quot; is a new link relation type for RDAP help data (see <xref target="link_relations_registry"></xref>), enabling an RDAP client to
distinguish the help URL from other related URLs.</t>
<t>Here is an elided example of an X.509 resource certificate object for a delegated CA certificate with a &quot;rdap-help&quot;
link object:</t>

<artwork><![CDATA[{
  "objectClassName": "rpki1_x509ResourceCert",
  "handle": "IJKL",
  "digests":
  [
    {
      "digest": "6789abcd...ef012345",
      "digestAlgorithm": "SHA-256",
    },
    ...
  ],
  "serialNumber": "9012",
  "issuer": "CN=RIR-CA",
  "signatureAlgorithm": "ecdsa-with-SHA256",
  "subject": "CN=ISP-DELEGATED-CA",
  "subjectPublicKeyInfo":
  {
    "publicKeyAlgorithm": "id-ecPublicKey",
    "publicKey": "..."
  },
  "subjectKeyIdentifier": "iOcGgxqXDa7mYv78fR+sGBKMtWJqItSLfaIYJDKYi8A=",
  "ips":
  [
    "2001:db8:2::/48"
  ],
  "autnums":
  [
    65538
  ],
  "notValidBefore": "2024-04-27T23:59:59Z",
  "notValidAfter": "2025-04-27T23:59:59Z",
  "publicationUri": "rsync://example.net/path/to/IJKL.cer",
  "notificationUri": "https://example.com/path/to/notification.xml",
  "entities":
  [
    {
      "objectClassName": "entity",
      "handle": "ABC-RIR",
      ...
    },
    ...
  ],
  "rpkiType": "delegated",
  "events":
  [
    {
      "eventAction": "registration",
      "eventDate": "2024-01-01T23:59:59Z"
    },
    ...
  ],
  "links":
  [
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/IJKL",
      "rel": "self",
      "href": "https://example.net/rdap/rpki1_x509ResourceCert/handle/IJKL",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/IJKL",
      "rel": "related",
      "href": "https://example.net/rdap/ip/2001:db8:2::/48",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/IJKL",
      "rel": "related",
      "href": "https://example.net/rdap/autnum/65538",
      "type": "application/rdap+json"
    },
    {
      "value": "https://example.net/rdap/rpki1_x509ResourceCert/handle/IJKL",
      "rel": "rdap-help",
      "href": "https://example.com/rdap/help",
      "type": "application/rdap+json"
    },
    ...
  ],
  "remarks":
  [
    {
      "description": [ "Delegated CA certificate" ]
    }
  ]
}
]]></artwork>
<t>In this example, note how the authority component (domain) in the &quot;value&quot; URL differs from that in the &quot;href&quot; URL for
the &quot;rdap-help&quot; link object, with the former for the registry's RDAP service and the latter for that organization's RDAP
service.</t>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>This document does not introduce any new security considerations past those already discussed in the RDAP protocol
specifications (<xref target="RFC7481"></xref>, <xref target="RFC9560"></xref>).</t>
<t><xref target="what_it_is_not"></xref> explains why this RDAP extension MUST NOT be used to directly influence internet routing.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="rdap-extensions-registry"><name>RDAP Extensions Registry</name>
<t>IANA is requested to register the following values in the &quot;RDAP Extensions&quot; registry at <xref target="RDAP-EXTENSIONS"></xref>:</t>

<ul spacing="compact">
<li>Extension identifier: rpki1</li>
<li>Registry operator: Any</li>
<li>Published specification: This document.</li>
<li>Contact: IETF <eref target="mailto:iesg@ietf.org">iesg@ietf.org</eref></li>
<li>Intended usage: This extension describes version 1 of a method to access the RPKI registration data through RDAP.</li>
</ul>
</section>

<section anchor="reverse_search_registry"><name>RDAP Reverse Search Registry</name>
<t>IANA is requested to register the following entries in the &quot;RDAP Reverse Search&quot; registry at <xref target="RDAP-REVERSE-SEARCH"></xref>:</t>
<t>RPKI ROA search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Description: The server supports the RPKI ROA search by the full name (a.k.a. formatted name) of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI ROA search by the handle of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Description: The server supports the RPKI ROA search by the email address of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Description: The server supports the RPKI ROA search by the role of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the handle of an associated IP network:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: ip</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI ROA search by the handle of an associated IP network.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Description: The server supports the RPKI ASPA search by the full name (a.k.a. formatted name) of an associated
entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI ASPA search by the handle of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Description: The server supports the RPKI ASPA search by the email address of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Description: The server supports the RPKI ASPA search by the role of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the handle of an associated autonomous system number:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: autnum</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI ASPA search by the handle of an associated autonomous system number.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the full name (a.k.a. formatted name)
of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the handle of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the email address of an associated
entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the role of an associated entity.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated IP network:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: ip</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the handle of an associated IP network.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated autonomous system number:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: autnum</li>
<li>Property: handle</li>
<li>Description: The server supports the RPKI X.509 resource certificate search by the handle of an associated autonomous
system number.</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
</section>

<section anchor="reverse_search_mapping_registry"><name>RDAP Reverse Search Mapping Registry</name>
<t>IANA is requested to register the following entries in the &quot;RDAP Reverse Search Mapping&quot; registry
at <xref target="RDAP-REVERSE-SEARCH-MAPPING"></xref>:</t>
<t>RPKI ROA search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='fn')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Property Path: $.entities[*].handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='email')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Property Path: $.entities[*].roles</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ROA search by the handle of an associated IP network:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_roas</li>
<li>Related Resource Type: ip</li>
<li>Property: handle</li>
<li>Property Path: $.handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='fn')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Property Path: $.entities[*].handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='email')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Property Path: $.entities[*].roles</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI ASPA search by the handle of an associated autonomous system number:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_aspas</li>
<li>Related Resource Type: autnum</li>
<li>Property: handle</li>
<li>Property Path: $.handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the full name (a.k.a. formatted name) of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: fn</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='fn')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: handle</li>
<li>Property Path: $.entities[*].handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the email address of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: email</li>
<li>Property Path: $.entities[*].vcardArray[1][?(@[0]=='email')][3]</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the role of an associated entity:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: entity</li>
<li>Property: role</li>
<li>Property Path: $.entities[*].roles</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated IP network:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: ip</li>
<li>Property: handle</li>
<li>Property Path: $.handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
<t>RPKI X.509 resource certificate search by the handle of an associated autonomous system number:</t>

<ul spacing="compact">
<li>Searchable Resource Type: rpki1_x509ResourceCerts</li>
<li>Related Resource Type: autnum</li>
<li>Property: handle</li>
<li>Property Path: $.handle</li>
<li>Registrant Name: IETF</li>
<li>Registrant Contact Information: iesg@ietf.org</li>
<li>Reference: This document.</li>
</ul>
</section>

<section anchor="link_relations_registry"><name>Link Relations Registry</name>
<t>IANA is requested to register the following value in the &quot;Link Relations&quot; registry at <xref target="LINK-RELATIONS"></xref>:</t>

<ul spacing="compact">
<li>Relation Name: rdap-help</li>
<li>Description: Refers to a resource with RDAP help information related to the link context.</li>
<li>Reference: This document.</li>
</ul>
</section>
</section>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>Job Snijders, Ties de Kock, Mark Kosters, Tim Bruijnzeels, Bart Bakker, Frank Hill, Tobias Fiebig, Q Misell, and Rüdiger
Volk from the RPKI community provided valuable feedback for this document.</t>
</section>

<section anchor="change-history"><name>Change History</name>
<t>(Remove this section before publication.)</t>

<section anchor="changes-from-00-to-01"><name>Changes from 00 to 01</name>

<ul spacing="compact">
<li>Adhering to the guidelines in <xref target="I-D.ietf-regext-rdap-extensions"></xref>.</li>
<li>Highlighted other RDAP search scenarios that could help with RPKI troubleshooting.</li>
<li>Be more explicit about what this extension is not. (Feedback from Tobias Fiebig during IETF 122 SIDROPS presentation.)</li>
<li>How/when to evolve this extension in the future.</li>
<li>Renamed the &quot;autnum&quot; member as &quot;customerAutnum&quot; in the ASPA RDAP object class to better match the &quot;CustomerASID&quot; field
from the ASPA RPKI profile.</li>
</ul>
</section>

<section anchor="changes-from-01-to-02"><name>Changes from 01 to 02</name>

<ul spacing="compact">
<li>Generate a message digest that covers an entire RPKI object. (Feedback from Job Snijders during IETF 122 SIDROPS
presentation.)</li>
<li>Expound on RDAP for delegated and hybrid RPKI. (Feedback from Q Misell and Rüdiger Volk during IETF 122 SIDROPS
presentation.)</li>
</ul>
</section>

<section anchor="changes-from-02-to-03"><name>Changes from 02 to 03</name>

<ul spacing="compact">
<li>De-conflict lookup path segments.</li>
<li>More useful reverse searches.</li>
<li>Include RPKI-related reverse search links in returned data for an entity, an IP network, or an autonomous system
number.</li>
<li>No need for search by handle when lookup by handle is available.</li>
</ul>
</section>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-regext-rdap-extensions.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-aspa-profile.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1519.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5396.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8209.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9082.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9083.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9536.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9582.xml"/>
</references>
<references><name>Informative References</name>
<reference anchor="CLOUDFLARE" target="https://rpki.cloudflare.com/">
  <front>
    <title>RPKI Portal</title>
    <author>
      <organization>Cloudflare</organization>
    </author>
  </front>
</reference>
<reference anchor="JDR" target="https://blog.nlnetlabs.nl/introducing-jdr/">
  <front>
    <title>JDR</title>
    <author>
      <organization>NLNet Labs</organization>
    </author>
  </front>
</reference>
<reference anchor="LINK-RELATIONS" target="https://www.iana.org/assignments/link-relations/">
  <front>
    <title>Link Relations</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="NIST-RPKI-MONITOR" target="https://rpki-monitor.antd.nist.gov/">
  <front>
    <title>NIST RPKI Monitor</title>
    <author>
      <organization>NIST</organization>
    </author>
  </front>
</reference>
<reference anchor="RDAP-EXTENSIONS" target="https://www.iana.org/assignments/rdap-extensions/">
  <front>
    <title>RDAP Extensions</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="RDAP-GUIDE" target="https://rdap.rcode3.com/misc/uses.html">
  <front>
    <title>RDAP Guide</title>
    <author>
      <organization>Newton, A.</organization>
    </author>
  </front>
</reference>
<reference anchor="RDAP-REVERSE-SEARCH" target="https://www.iana.org/assignments/rdap-reverse-search/">
  <front>
    <title>RDAP Reverse Search</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="RDAP-REVERSE-SEARCH-MAPPING" target="https://www.iana.org/assignments/rdap-reverse-search-mapping/">
  <front>
    <title>RDAP Reverse Search Mapping</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2622.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4271.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7481.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9560.xml"/>
<reference anchor="ROUTINATOR" target="https://www.nlnetlabs.nl/projects/routing/routinator/">
  <front>
    <title>Routinator</title>
    <author>
      <organization>NLNet Labs</organization>
    </author>
  </front>
</reference>
</references>
</references>

</back>

</rfc>
