rfc9148xml2.original.xml | rfc9148.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'[ | ||||
<!ENTITY RFC0791 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | <!DOCTYPE rfc [ | |||
RFC.0791.xml"> | <!ENTITY nbsp " "> | |||
<!ENTITY RFC2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | <!ENTITY zwsp "​"> | |||
RFC.2119.xml"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY RFC2460 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | <!ENTITY wj "⁠"> | |||
RFC.2460.xml"> | ||||
<!ENTITY RFC4021 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.4021.xml"> | ||||
<!ENTITY RFC8422 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.8422.xml"> | ||||
<!ENTITY RFC4944 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.4944.xml"> | ||||
<!ENTITY RFC5246 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5246.xml"> | ||||
<!ENTITY RFC5273 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5273.xml"> | ||||
<!ENTITY RFC5272 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5272.xml"> | ||||
<!ENTITY RFC2585 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.2585.xml"> | ||||
<!ENTITY RFC5705 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5705.xml"> | ||||
<!ENTITY RFC5958 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5958.xml"> | ||||
<!ENTITY RFC5967 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5967.xml"> | ||||
<!ENTITY RFC6402 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.6402.xml"> | ||||
<!ENTITY RFC6090 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.6090.xml"> | ||||
<!ENTITY RFC6347 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.6347.xml"> | ||||
<!ENTITY RFC6690 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.6690.xml"> | ||||
<!ENTITY RFC7030 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7030.xml"> | ||||
<!ENTITY RFC7049 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7049.xml"> | ||||
<!ENTITY RFC7230 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7230.xml"> | ||||
<!ENTITY RFC7251 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7251.xml"> | ||||
<!ENTITY RFC7252 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7252.xml"> | ||||
<!ENTITY RFC7925 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7925.xml"> | ||||
<!ENTITY RFC7959 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7959.xml"> | ||||
<!ENTITY RFC4919 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.4919.xml"> | ||||
<!ENTITY RFC5929 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.5929.xml"> | ||||
<!-- <!ENTITY RFC7525 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/refer | ||||
ence.RFC.7525.xml"> --> | ||||
<!ENTITY RFC7228 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7228.xml"> | ||||
<!ENTITY RFC7299 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7299.xml"> | ||||
<!ENTITY RFC7627 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7627.xml"> | ||||
<!ENTITY RFC7748 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.7748.xml"> | ||||
<!ENTITY RFC8075 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.8075.xml"> | ||||
<!ENTITY RFC8174 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.8174.xml"> | ||||
<!ENTITY RFC8446 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. | ||||
RFC.8446.xml"> | ||||
<!ENTITY I-D.ietf-anima-bootstrapping-keyinfra SYSTEM "http://xml.resource.org/p | ||||
ublic/rfc/bibxml3/reference.I-D.ietf-anima-bootstrapping-keyinfra.xml"> | ||||
<!ENTITY I-D.ietf-tls-dtls13 SYSTEM "http://xml.resource.org/public/rfc/bibxml3/ | ||||
reference.I-D.ietf-tls-dtls13.xml"> | ||||
<!ENTITY I-D.ietf-tls-dtls-connection-id SYSTEM "https://xml2rfc.tools.ietf.org/ | ||||
public/rfc/bibxml3/reference.I-D.ietf-tls-dtls-connection-id.xml"> | ||||
<!ENTITY I-D.moskowitz-ecdsa-pki SYSTEM "https://xml2rfc.tools.ietf.org/public/r | ||||
fc/bibxml3/reference.I-D.moskowitz-ecdsa-pki.xml"> | ||||
<!ENTITY I-D.ietf-core-multipart-ct SYSTEM "https://xml2rfc.tools.ietf.org/publi | ||||
c/rfc/bibxml3/reference.I-D.ietf-core-multipart-ct.xml"> | ||||
<!ENTITY I-D.ietf-lamps-rfc5751-bis SYSTEM "https://xml2rfc.tools.ietf.org/publi | ||||
c/rfc/bibxml3/reference.I-D.ietf-lamps-rfc5751-bis.xml"> | ||||
<!ENTITY I-D.draft-ietf-core-resource-directory-19 SYSTEM "https://xml2rfc.tools | ||||
.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-core-resource-directory-19 | ||||
.xml"> | ||||
<!ENTITY I-D.josefsson-sasl-tls-cb SYSTEM "https://xml2rfc.tools.ietf.org/public | ||||
/rfc/bibxml3/reference.I-D.josefsson-sasl-tls-cb.xml"> | ||||
]> | ]> | |||
<?rfc strict="no" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" consensus="true" | |||
<?rfc toc="yes"?> | category="std" ipr="trust200902" docName="draft-ietf-ace-coap-est-18" numbe | |||
<?rfc tocdepth="4"?> | r="9148" | |||
<?rfc symrefs="yes"?> | obsoletes="" updates="" submissionType="IETF" xml:lang="en" | |||
<?rfc sortrefs="yes" ?> | tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" | |||
<?rfc compact="yes" ?> | version="3"> | |||
<?rfc subcompact="no" ?> | ||||
<rfc category="std" ipr="trust200902" docName="draft-ietf-ace-coap-est-18"> | ||||
<front> | <front> | |||
<title abbrev="EST-coaps">EST over secure CoAP (EST-coaps)</title> | <title abbrev="EST-coaps">EST-coaps: Enrollment over Secure Transport with | |||
the Secure Constrained Application Protocol</title> | ||||
<seriesInfo name="RFC" value="9148"/> | ||||
<author fullname="Peter van der Stok" initials="P." surname="van der Stok"> | <author fullname="Peter van der Stok" initials="P." surname="van der Stok"> | |||
<organization>Consultant</organization> | <organization>Consultant</organization> | |||
<address> | <address> | |||
<email>consultancy@vanderstok.org</email> | <email>stokcons@bbhmail.nl</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Panos Kampanakis" initials="P" surname="Kampanakis"> | <author fullname="Panos Kampanakis" initials="P" surname="Kampanakis"> | |||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<email>pkampana@cisco.com</email> | <email>pkampana@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<!-- <author initials="S.S." surname="Kumar" fullname="Sandeep S. Kumar"> | ||||
<organization>Philips Lighting Research</organization> | <author fullname="Michael C. Richardson" initials="M." surname="Richardson"> | |||
<organization abbrev="SSW">Sandelman Software Works | ||||
</organization> | ||||
<address> | <address> | |||
<postal> | ||||
<street>High Tech Campus 7</street> | ||||
<city>Eindhoven</city> | ||||
<region></region> | ||||
<code>5656 AE</code> | ||||
<country>NL</country> | ||||
</postal> | ||||
<email>ietf@sandeep.de</email> | ||||
</address> | ||||
</author> --> | ||||
<author fullname="Michael C. Richardson" initials="M." | ||||
surname="Richardson"> | ||||
<organization abbrev="SSW">Sandelman Software Works | ||||
</organization> | ||||
<address> | ||||
<email>mcr+ietf@sandelman.ca</email> | <email>mcr+ietf@sandelman.ca</email> | |||
<uri>http://www.sandelman.ca/</uri> | <uri>https://www.sandelman.ca/</uri> | |||
</address> | </address> | |||
</author> | </author> | |||
<!-- <author fullname="Martin Furuhed" initials="M" surname="Furuhed"> | ||||
<organization>Nexus Group</organization> | ||||
<address> | ||||
<email>martin.furuhed@nexusgroup.com</email> | ||||
</address> | ||||
</author> --> | ||||
<author fullname="Shahid Raza" initials="S" surname="Raza"> | <author fullname="Shahid Raza" initials="S" surname="Raza"> | |||
<organization>RISE SICS </organization> | <organization>RISE Research Institutes of Sweden</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Isafjordsgatan 22</street> | <street>Isafjordsgatan 22</street> | |||
<city>Kista</city> | <city>Kista, Stockholm</city> | |||
<region>Stockholm</region> | ||||
<code>16440</code> | ||||
<country>SE</country> | ||||
</postal> | ||||
<email>shahid@sics.se</email> | ||||
</address> | ||||
</author> | ||||
<date/> | <code>16440</code> | |||
<country>SE</country> | ||||
</postal> | ||||
<email>shahid.raza@ri.se</email> | ||||
</address> | ||||
</author> | ||||
<date month="March" year="2022"/> | ||||
<area>Security</area> | <area>Security</area> | |||
<workgroup>ACE</workgroup> | <workgroup>ACE</workgroup> | |||
<keyword>EST</keyword> | ||||
<keyword>CoAPS</keyword> | ||||
<keyword>Constrained-Voucher</keyword> | ||||
<keyword>Constrained-Enrollment</keyword> | ||||
<keyword>BRSKI</keyword> | ||||
<abstract> | <abstract> | |||
<t>Enrollment over Secure Transport (EST) is used as a certificate provisi oning | <t>Enrollment over Secure Transport (EST) is used as a certificate provisi oning | |||
protocol over HTTPS. Low-resource devices often use the lightweight Con strained | protocol over HTTPS. Low-resource devices often use the lightweight Con strained | |||
Application Protocol (CoAP) for message exchanges. This document define s how to | Application Protocol (CoAP) for message exchanges. This document define s how to | |||
transport EST payloads over secure CoAP (EST-coaps), which allows | transport EST payloads over secure CoAP (EST-coaps), which allows | |||
constrained devices to use existing EST functionality for provisioning certificates. | constrained devices to use existing EST functionality for provisioning certificates. | |||
<!-- Example low-resource use-cases for EST are: secure bootstrapping a | ||||
nd certificate enrollment. --> </t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | ||||
<middle> | <section anchor="intro" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<section anchor="changes" title="Change Log"> | <t>"Classical" Enrollment over Secure Transport (EST) <xref target="RFC703 | |||
<t>EDNOTE: Remove this section before publication</t> | 0" format="default"/> | |||
<t> -18 | ||||
<list style="empty"> | ||||
<t>IESG Reviews fixes. </t> | ||||
<t>Removed spurious lines introduced in v-17 due to xml2rfc v3.</t> | ||||
</list> | ||||
</t> | ||||
<t> -17 | ||||
<list style="empty"> | ||||
<t>v16 remnants by Ben K.</t> | ||||
<t>Typos.</t> | ||||
</list> | ||||
</t> | ||||
<t> -16 | ||||
<list style="empty"> | ||||
<t>Updates to address Yaron S.'s Secdir review.</t> | ||||
<t>Updates to address David S.'s Gen-ART review.</t> | ||||
</list> | ||||
</t> | ||||
<t> -15 | ||||
<list style="empty"> | ||||
<t>Updates to addressed Ben's AD follow up feedback.</t> | ||||
</list> | ||||
</t> | ||||
<t> -14 | ||||
<list style="empty"> | ||||
<t>Updates to complete Ben's AD review feedback and discussions.</t> | ||||
</list> | ||||
</t> | ||||
<t> -13 | ||||
<list style="empty"> | ||||
<t>Updates based on AD's review and discussions </t> | ||||
<t>Examples redone without password </t> | ||||
</list> | ||||
</t> | ||||
<t> -12 | ||||
<list style="empty"> | ||||
<t>Updated section 5 based on Esko's comments and nits identified. </t | ||||
> | ||||
<t>Nits and some clarifications for Esko's new review from 5/21/2019. </t | ||||
> | ||||
<t>Nits and some clarifications for Esko's new review from 5/28/2019. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> -11 | ||||
<list style="empty"> | ||||
<t>Updated Server-side keygen to simplify motivation and added paragraphs | ||||
in Security considerations to point out that random numbers are still needed (f | ||||
eedback from Hannes).</t> | ||||
</list> | ||||
</t> | ||||
<t> -10 | ||||
<list style="empty"> | ||||
<t>Addressed WGLC comments</t> | ||||
<t>More consistent request format in the examples. </t> | ||||
<t>Explained root resource difference when there is resource discovery | ||||
</t> | ||||
<t>Clarified when the client is supposed to do discovery</t> | ||||
<t>Fixed nits and minor Option length inaccurracies in the examples. < | ||||
/t> | ||||
</list> | ||||
</t> | ||||
<t> -09 | ||||
<list style="empty"> | ||||
<t> WGLC comments taken into account </t> | ||||
<t> consensus about discovery of content-format </t> | ||||
<t> added additional path for content-format selection</t> | ||||
<t> merged DTLS sections </t> | ||||
</list> | ||||
</t> | ||||
<t> -08 | ||||
<list style="empty"> | ||||
<t>added application/pkix-cert Content-Format TBD287.</t> | ||||
<t> discovery text clarified </t> | ||||
<t> Removed text on ct negotiation in connection to multipart-core </t> | ||||
<t> removed text that duplicates or contradicts RFC7252 (thanks Klaus) < | ||||
/t> | ||||
<t> Stated that well-known/est is compulsory</t> | ||||
<t> Use of response codes clarified.</t> | ||||
<t> removed bugs: Max-Age and Content-Format Options in Request</t> | ||||
<t> Accept Option explained for est/skg and added in enroll example </t> | ||||
<t> Added second URI /skc for server-side key gen and a simple ce | ||||
rt (not PKCS#7)</t> | ||||
<t> Persistence of DTLS connection clarified. </t> | ||||
<t> Minor text fixes. </t> | ||||
</list> | ||||
</t> | ||||
<t> -07: | ||||
<list style="empty"> | ||||
<t> redone examples from scratch with openssl </t> | ||||
<t>Updated authors.</t> | ||||
<t>Added CoAP RST as a MAY for an equivalent to an HTTP 204 messa | ||||
ge.</t> | ||||
<t>Added serialization example of the /skg CBOR response. </t> | ||||
<t>Added text regarding expired IDevIDs and persistent DTLS conne | ||||
ction that will start using the Explicit TA Database in the new DTLS connection. | ||||
</t> | ||||
<t>Nits and fixes</t> | ||||
<t>Removed CBOR envelop for binary data</t> | ||||
<t>Replaced TBD8 with 62. </t> | ||||
<t>Added RFC8174 reference and text. </t> | ||||
<t>Clarified MTI for server-side key generation and Content-Forma | ||||
ts. Defined the /skg MTI (PKCS#8) and the cases where CMS encryption will be use | ||||
d. </t> | ||||
<t>Moved Fragmentation section up because it was referenced in se | ||||
ctions above it.</t> | ||||
</list> | ||||
</t> | ||||
<t> -06: | ||||
<list style="empty"> | ||||
<t>clarified discovery section, by specifying that no discovery may be n | ||||
eeded for /.well-known/est URI.</t> | ||||
<t>added resource type values for IANA</t> | ||||
<t>added list of compulsory to implement and optional functions. </t> | ||||
<t>Fixed issues pointed out by the idnits tool.</t> | ||||
<t>Updated CoAP response codes section with more mappings between | ||||
EST HTTP codes and EST-coaps CoAP codes.</t> | ||||
<t>Minor updates to the MTI EST Functions section.</t> | ||||
<t>Moved Change Log section higher.</t> | ||||
</list> | ||||
</t> | ||||
<t> -05: | ||||
<list style="empty"> | ||||
<t>repaired again</t> | ||||
<t>TBD8 = 62 removed from C-F registration, to be done in CT draf | ||||
t.</t> | ||||
</list> | ||||
</t> | ||||
<t> -04: | ||||
<list style="empty"> | ||||
<t> Updated Delayed response section to reflect short and long delay | ||||
options.</t> | ||||
</list> | ||||
</t> | ||||
<t> -03: | ||||
<list style="empty"> | ||||
<t>Removed observe and simplified long waits</t> | ||||
<t>Repaired Content-Format specification</t> | ||||
</list> | ||||
</t> | ||||
<t> -02: | ||||
<list style="empty"> | ||||
<t>Added parameter discussion in section 8</t> | ||||
<t>Concluded Content-Format specification using multipart-ct draft</t> | ||||
<t>examples updated </t> | ||||
</list> | ||||
</t> | ||||
<t> -01: | ||||
<list style="empty"> | ||||
<t>Editorials done.</t> | ||||
<t>Redefinition of proxy to Registrar in <xref target="proxy"/>. Explained | ||||
better the role of https-coaps Registrar, instead of "proxy"</t> | ||||
<t>Provide "observe" Option examples </t> | ||||
<t> extended block message example. </t> | ||||
<t>inserted new server key generation text in <xref target="serverkey"/> a | ||||
nd motivated server key generation.</t> | ||||
<t>Broke down details for DTLS 1.3 </t> | ||||
<t>New Media-Type uses CBOR array for multiple Content-Format payloads</t> | ||||
<t>provided new Content-Format tables</t> | ||||
<t> new media format for IANA </t> | ||||
</list> | ||||
</t> | ||||
<t> -00 | ||||
<list style="empty"> | ||||
<t> copied from vanderstok-ace-coap-04</t> | ||||
</list> | ||||
</t> | ||||
</section> <!-- Change Log --> | ||||
<section anchor="intro" title="Introduction"> | ||||
<t>"Classical" Enrollment over Secure Transport (EST) <xref target="RFC70 | ||||
30"/> | ||||
is used for authenticated/authorized endpoint certificate enrollment (and | is used for authenticated/authorized endpoint certificate enrollment (and | |||
optionally key provisioning) through a Certificate Authority (CA) or | optionally key provisioning) through a Certification Authority (CA) or | |||
Registration Authority (RA). EST transports messages over HTTPS.</t> | Registration Authority (RA). EST transports messages over HTTPS.</t> | |||
<t>This document defines a new transport for EST based on the Constrained | ||||
<t>This document defines a new transport for EST based on the Constrained | ||||
Application Protocol (CoAP) since some Internet of Things (IoT) devices | Application Protocol (CoAP) since some Internet of Things (IoT) devices | |||
use CoAP instead of HTTP. Therefore, this specification utilizes DTLS | use CoAP instead of HTTP. Therefore, this specification utilizes DTLS | |||
<xref target="RFC6347"/> and CoAP <xref target="RFC7252"/> instead of | <xref target="RFC6347" format="default"/> and CoAP <xref target="RFC7252" for | |||
TLS <xref target="RFC8446"/> and HTTP <xref target="RFC7230"/>. </t> | mat="default"/> instead of | |||
TLS <xref target="RFC8446" format="default"/> and HTTP <xref target="RFC7230" | ||||
<t>EST responses can be relatively large and for this reason this | format="default"/>. </t> | |||
specification also uses CoAP Block-Wise Transfer <xref target="RFC7959"/> to | <t>EST responses can be relatively large, and for this reason, this | |||
specification also uses CoAP Block-Wise Transfer <xref target="RFC7959" forma | ||||
t="default"/> to | ||||
offer a fragmentation mechanism of EST messages at the CoAP layer. | offer a fragmentation mechanism of EST messages at the CoAP layer. | |||
</t> | </t> | |||
<t>This document also profiles the use of EST to support | ||||
<t>This document also profiles the use of EST to only support | certificate-based client authentication only. Neither HTTP Basic nor Diges | |||
certificate-based client authentication. HTTP Basic or Digest | t | |||
authentication (as described in Section 3.2.3 of | authentication (as described in <xref target="RFC7030" | |||
<xref target="RFC7030"/>) are not supported. </t> | sectionFormat="of" section="3.2.3"/>) is supported. </t> | |||
<!-- <t>IPv6 over Low-power Wireless Personal Area Networks (6LoWPANs) <xref target="RFC4944" /> on IEEE 802.15.4 <xref target="ieee802.15.4" /> wireless net works are becoming common in many industry application domains such as lighting controls. Although IEEE 802.15.4 defines how security can be enabled between nod es within a single mesh network, it does not specify the provisioning and manage ment of the keys. Therefore, securing a 6LoWPAN network with devices from multip le manufacturers with different provisioning techniques is often tedious and tim e consuming. An example use-case is the application of Bootstrapping of Remote S ecure Infrastructures (BRSKI) <xref target="I-D.ietf-anima-bootstrapping-keyinfr a"/> </t> --> | </section> | |||
<!-- <section anchor="scenario" title="EST operational differences"> | <section anchor="terminology" numbered="true" toc="default"> | |||
<t>Only the differences to EST with respect to operational scenarios are d | <name>Terminology</name> | |||
escribed in this section. EST-coaps server differs from EST server as follows: | ||||
<list style="symbols"> | ||||
<t>Replacement of TLS by DTLS and HTTP by CoAP, resulting in: | ||||
<list> | ||||
<t>DTLS-secured CoAP sessions between EST-coaps client and EST-coaps | ||||
server.</t> | ||||
</list></t> | ||||
<t>Only certificate-based client authentication is supported, which re | ||||
sults in: | ||||
<list> | ||||
<t>The EST-coaps client does not support HTTP Basic authentication | ||||
(as described in Section 3.2.3 of <xref target="RFC7030"/>).</t> | ||||
<t>The EST-coaps client does not support authentication at the app | ||||
lication layer (as described in Section 3.2.3 of <xref target="RFC7030"/>).</t> | ||||
</list></t> | ||||
</list></t> | ||||
</section> --> <!-- EST operational differences --> | ||||
</section> <!-- Introduction --> | ||||
<section anchor="terminology" title="Terminology"> | <t> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
when, and only when, they appear in all capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>Many of the concepts in this document are taken from <xref target="RFC703 | <t>Many of the concepts in this document are taken from <xref target="RFC7 | |||
0"/>. Consequently, much text is directly traceable to <xref target="RFC7030"/>. | 030" format="default"/>. Consequently, much text is directly traceable to <xref | |||
</t><!-- The same document structure is followed to point out the differences a | target="RFC7030" format="default"/>. </t> | |||
nd commonalities between EST and EST-coaps. --> | ||||
</section> <!-- Terminology --> | ||||
<section anchor="profile7925" title="DTLS and conformance to RFC7925 profiles" | </section> | |||
> | ||||
<t>This section describes how EST-coaps conforms to the profiles of low-reso | ||||
urce | ||||
devices described in <xref target="RFC7925"/>. | ||||
EST-coaps can transport certificates and private keys. Certificates | ||||
are responses to (re-)enrollment requests or requests for a trusted certi | ||||
ficate | ||||
list. Private keys can be transported as responses to a | ||||
server-side key generation request as described in Section 4.4 of | ||||
<xref target="RFC7030"/> (and subsections) and discussed in | ||||
<xref target="serverkey"/> of this document. </t> | ||||
<t>EST-coaps depends on a secure transport mechanism that secures the exc | <section anchor="profile7925" numbered="true" toc="default"> | |||
hanged CoAP messages. DTLS is one such secure protocol. No other changes are nec | <name>DTLS and Conformance to RFC 7925 Profiles</name> | |||
essary regarding the secure transport of EST messages. </t><!-- DTLS handshakes | <t>This section describes how EST-coaps conforms to the profiles of | |||
use a retramsit times to handle packet loss in lossy environments. as explained | low-resource devices described in <xref target="RFC7925" | |||
in https://tools.ietf.org/html/rfc6347#section-3.2.1 --> | format="default"/>. EST-coaps can transport certificates and private | |||
keys. Certificates are responses to (re-)enrollment requests or requests | ||||
for a trusted certificate list. Private keys can be transported as | ||||
responses to a server-side key generation request as described in <xref | ||||
target="RFC7030" sectionFormat="of" section="4.4"/> (and subsections) | ||||
and discussed in <xref target="serverkey" format="default"/> of this | ||||
document. </t> | ||||
<t>EST-coaps depends on a secure transport mechanism that secures the exch | ||||
anged CoAP messages. DTLS is one such secure protocol. No other changes are nece | ||||
ssary regarding the secure transport of EST messages. </t> | ||||
<figure align="center" title="EST-coaps protocol layers" anchor="fig-est- | <figure align="center" anchor="est-coaps-layers"> | |||
coaps-layers"><artwork><![CDATA[ | <name>EST-coaps Protocol Layers</name> | |||
<artwork align="center"><![CDATA[ | ||||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| EST request/response messages | | | EST request/response messages | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| CoAP for message transfer and signaling | | | CoAP for message transfer and signaling | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| Secure Transport | | | Secure Transport | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t> | <t> | |||
In accordance with sections 3.3 and 4.4 of <xref target="RFC7925" />, the | In accordance with Sections <xref target="RFC7925" section="3.3" | |||
sectionFormat="bare"/> and <xref target="RFC7925" section="4.4" sectionForma | ||||
t="bare"/> of <xref target="RFC7925" format="default"/>, the | ||||
mandatory cipher suite for DTLS in EST-coaps is | mandatory cipher suite for DTLS in EST-coaps is | |||
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 <xref target="RFC7251"/>. | TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 <xref target="RFC7251" format="default"/> | |||
Curve secp256r1 MUST | . | |||
be supported <xref target="RFC8422"/>; this curve is equivalent to the | Curve secp256r1 <bcp14>MUST</bcp14> | |||
NIST P-256 curve. After the publication of <xref target="RFC7748" />, | be supported <xref target="RFC8422" format="default"/>; this curve is equiva | |||
lent to the | ||||
NIST P-256 curve. After the publication of <xref target="RFC7748" format="de | ||||
fault"/>, | ||||
support for Curve25519 will likely be required in the future by | support for Curve25519 will likely be required in the future by | |||
(D)TLS Profiles for the Internet of Things <xref target="RFC7925" />. | (D)TLS profiles for the Internet of Things <xref target="RFC7925" format= | |||
</t> | "default"/>. | |||
</t> | ||||
<!-- Removed DTLS normative language for DTLS. Keeping lowercase wording jus | ||||
t to serve as non-normative reminders --> | ||||
<!-- <xref target="RFC6090"/> includes a summary of the ECC algorithms.-- | ||||
> | ||||
<t>DTLS 1.2 implementations must use the Supported Elliptic Curves and Su pported | <t>DTLS 1.2 implementations must use the Supported Elliptic Curves and Su pported | |||
Point Formats Extensions in <xref target="RFC8422"/>. Uncompressed point | Point Formats Extensions in <xref target="RFC8422" format="default"/>. Uncom | |||
format must also be supported. DTLS 1.3 <xref target="I-D.ietf-tls-dtls13"/> | pressed point | |||
format must also be supported. DTLS 1.3 <xref target="RFC9147" format="defau | ||||
lt"/> | ||||
implementations differ from DTLS 1.2 | implementations differ from DTLS 1.2 | |||
because they do not support point format negotiation in favor of a single | because they do not support point format negotiation in favor of a single | |||
point format for each curve. Thus, support for DTLS 1.3 does not mandate | point format for each curve. Thus, support for DTLS 1.3 does not mandate | |||
point format extensions and negotiation. In addition, in DTLS 1.3 the | point format extensions and negotiation. In addition, in DTLS 1.3, the | |||
Supported Elliptic Curves extension has been renamed to Supported Groups. | Supported Elliptic Curves extension has been renamed to Supported Groups. | |||
</t> | </t> | |||
<t>CoAP was designed to avoid IP fragmentation. DTLS is used to secure CoAP | ||||
messages. However, fragmentation is still possible at the DTLS layer during the | ||||
DTLS handshake when using ECC ciphersuites. If fragmentation is necessary, "DTLS | ||||
provides a mechanism for fragmenting a handshake message over several records, | ||||
each of which can be transmitted separately, thus avoiding IP fragmentation" <xr | ||||
ef target="RFC6347"/>.</t> | ||||
<t>The authentication of the EST-coaps server by the EST-coaps | ||||
client is based on certificate authentication in the DTLS handshake. | ||||
The EST-coaps client MUST be configured with at least an Implicit TA | ||||
database which will enable the authentication of the server the | ||||
first time before updating its trust anchor (Explicit TA) <xref target="R | ||||
FC7030"/>.</t> | ||||
<t>The authentication of the EST-coaps client MUST be with a client certific | ||||
ate | ||||
in the DTLS handshake. This can either be | ||||
<list style="symbols"> | ||||
<t>a previously issued client certificate (e.g., an existing certificate | ||||
issued | ||||
by the EST CA); this could be a common case for simple re-enrollm | ||||
ent of clients. </t> | ||||
<t>a previously installed certificate (e.g., manufacturer IDevID | ||||
<xref target="ieee802.1ar"/> or a certificate issued by some othe | ||||
r party). IDevID's are expected to have | ||||
a very long life, as long as the device, but under some conditions | ||||
could expire. In that case, the server MAY authenticate | ||||
a client certificate against its trust store although the certifi | ||||
cate | ||||
is expired (<xref target="sec"/>). </t> | ||||
</list></t> | ||||
<t>EST-coaps supports the certificate types and Trust Anchors (TA) that a | ||||
re specified for EST in Section 3 of <xref target="RFC7030"/>. | ||||
</t> | ||||
<t>As described in Section 2.1 of <xref target="RFC5272"/> proof-of-identity | ||||
refers to | ||||
a value that can be used to prove that an end-entity or client | ||||
is in the possession of and can use the private key corresponding | ||||
to the certified public key. Additionally, channel-binding | ||||
information can link proof-of-identity with an established connection. | ||||
Connection-based proof-of-possession is OPTIONAL for EST-coaps clients an | ||||
d servers. When proof-of-possession is desired, a set of actions are required re | ||||
garding the use of tls-unique, described in Section 3.5 in <xref target="RFC7030 | ||||
"/>. The tls-unique information consists of the contents of the first "Finished" | ||||
message in the (D)TLS handshake between server and client <xref target="RFC5929 | ||||
"/>. The client adds the "Finished" message as a ChallengePassword in the attrib | ||||
utes section of the PKCS#10 Request <xref target="RFC5967"/> to prove that the c | ||||
lient is indeed in control of the private key at the time of the (D)TLS session | ||||
establishment. </t> | ||||
<t>In the case of handshake message fragmentation, if proof-of-possession | ||||
is desired, the Finished | ||||
message added as the ChallengePassword in the CSR is calculated as specified | ||||
by the DTLS standards. We summarize it here for convenience. For DTLS 1.2, in t | ||||
he event of handshake message fragmentation, the Hash of the handshake messages | ||||
used in the MAC calculation of the Finished message must be computed on each rea | ||||
ssembled message, as if each message had not been fragmented (Section 4.2.6 of < | ||||
xref target="RFC6347"/>). The Finished message is calculated as shown in Section | ||||
7.4.9 of <xref target="RFC5246"/>. Similarly, for DTLS 1.3, the Finished messag | ||||
e must be computed as if each | ||||
handshake message had been sent as a single fragment (Section 5.8 of | ||||
<xref target="I-D.ietf-tls-dtls13"/>) following the algorithm described | ||||
in 4.4.4 of <xref target="RFC8446"/>. </t> | ||||
<!--<figure align="left"><artwork><![CDATA[ | ||||
PRF(master_secret, finished_label, Hash(handshake_messages)) | ||||
[0..verify_data_length-1]; | ||||
]]></artwork></figure> --> | ||||
<!-- <figure align="left"><artwork><![CDATA[ | ||||
HMAC(finished_key, | ||||
Transcript-Hash(Handshake Context, | ||||
Certificate*, CertificateVerify*)) | ||||
* Only included if present. | <t>CoAP was designed to avoid IP fragmentation. DTLS is used to secure | |||
]]></artwork></figure> --> | CoAP messages. However, fragmentation is still possible at the DTLS | |||
layer during the DTLS handshake even when using Elliptic Curve | ||||
Cryptography (ECC) cipher suites. If fragmentation is necessary, "DTLS | ||||
provides a mechanism for fragmenting a handshake message over a number | ||||
of records, each of which can be transmitted separately, thus avoiding | ||||
IP fragmentation" <xref target="RFC6347" format="default"/>.</t> | ||||
<t>The authentication of the EST-coaps server by the EST-coaps client is | ||||
based on certificate authentication in the DTLS handshake. The | ||||
EST-coaps client <bcp14>MUST</bcp14> be configured with at least an | ||||
Implicit Trust Anchor database, which will enable the authentication | ||||
of the server the first time before updating its trust anchor (Explicit | ||||
TA) <xref target="RFC7030" format="default"/>.</t> | ||||
<t>The authentication of the EST-coaps client <bcp14>MUST</bcp14> be with | ||||
a client certificate | ||||
in the DTLS handshake. This can either be: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>A previously issued client certificate (e.g., an existing | ||||
certificate issued by the EST CA); this could be a common case for | ||||
simple re-enrollment of clients. </li> | ||||
<li>A previously installed certificate (e.g., manufacturer IDevID | ||||
<xref target="IEEE802.1AR" format="default"/> or a certificate issued | ||||
by some other party). IDevID's are expected to have a very long life, | ||||
as long as the device, but under some conditions could expire. In that | ||||
case, the server <bcp14>MAY</bcp14> authenticate a client certificate | ||||
against its trust store though the certificate is expired (<xref | ||||
target="sec" format="default"/>). </li> | ||||
</ul> | ||||
<t>EST-coaps supports the certificate types and TAs that | ||||
are specified for EST in <xref target="RFC7030" | ||||
sectionFormat="of" section="3"/>. | ||||
</t> | ||||
<t>As described in <xref target="RFC5272" sectionFormat="of" | ||||
section="2.1"/>, proof-of-identity refers to a value that can be used to | ||||
prove that an end entity or client is in the possession of and can use | ||||
the private key corresponding to the certified public key. Additionally, | ||||
channel-binding information can link proof-of-identity with an | ||||
established connection. Connection-based proof-of-possession is | ||||
<bcp14>OPTIONAL</bcp14> for EST-coaps clients and servers. When | ||||
proof-of-possession is desired, a set of actions are required regarding | ||||
the use of tls-unique, described in <xref target="RFC7030" | ||||
sectionFormat="of" section="3.5"/>. The tls-unique information consists | ||||
of the contents of the first Finished message in the (D)TLS handshake | ||||
between server and client <xref target="RFC5929" format="default"/>. The | ||||
client adds the Finished message as a challengePassword in the | ||||
attributes section of the PKCS #10 CertificationRequest <xref | ||||
target="RFC5967" format="default"/> to prove that the client is indeed | ||||
in control of the private key at the time of the (D)TLS session | ||||
establishment. In the case of handshake message fragmentation, if | ||||
proof-of-possession is desired, the Finished message added as the | ||||
challengePassword in the Certificate Signing Request (CSR) is calculated | ||||
as specified by (D)TLS. We summarize it here for convenience. For DTLS | ||||
1.2, in the event of handshake message fragmentation, the hash of the | ||||
handshake messages used in the Message Authentication Code (MAC) | ||||
calculation of the Finished message must be computed on each reassembled | ||||
message, as if each message had not been fragmented (<xref | ||||
target="RFC6347" sectionFormat="of" section="4.2.6"/>). The Finished | ||||
message is calculated as shown in <xref target="RFC5246" | ||||
sectionFormat="of" section="7.4.9"/>. </t> | ||||
<t>In a constrained CoAP environment, endpoints can't always afford to establ | <t>For (D)TLS 1.3, <xref target="RFC8446" sectionFormat="of" | |||
ish a DTLS connection for every EST transaction. An EST-coaps DTLS connection MA | section="C.5"/> describes the lack of channel bindings similar to | |||
Y remain open for sequential EST transactions, which was not the case with <xref | tls-unique. | |||
target="RFC7030"/>. | <xref target="I-D.ietf-kitten-tls-channel-bindings-for-tls13" format="d | |||
For example, if a /crts request is followed by a /sen request, both can use t | efault"/> | |||
he same authenticated DTLS connection. However, when a /crts request is included | can be used instead to derive a 32-byte tls-exporter binding from | |||
in the set of sequential EST transactions, some additional security considerati | the (D)TLS 1.3 master secret by using a PRF negotiated in the (D)TLS | |||
ons apply regarding the use of the Implicit and Explicit TA database as explaine | 1.3 handshake, "EXPORTER-Channel-Binding" with no terminating NUL as | |||
d in <xref target="sec-est"/>.</t> | the label, the ClientHello.random and ServerHello.random, and a | |||
zero-length context string. When proof-of-possession is desired, the | ||||
client adds the tls-exporter value as a challengePassword in the | ||||
attributes section of the PKCS #10 CertificationRequest <xref | ||||
target="RFC5967" format="default"/> to prove that the client is | ||||
indeed in control of the private key at the time of the (D)TLS | ||||
session establishment. </t> | ||||
<t>Given that after a successful enrollment, it is more likely that a new EST | <t>In a constrained CoAP environment, endpoints can't always afford to | |||
transaction will not take place for a significant amount of time, the DTLS conn | establish a DTLS connection for every EST transaction. An EST-coaps DTLS | |||
ections SHOULD only be kept alive for EST messages that are relatively close to | connection <bcp14>MAY</bcp14> remain open for sequential EST transactions, | |||
each other. These could include a /sen immediatelly following a /crts when a dev | which was not the case with <xref target="RFC7030" format="default"/>. For | |||
ice is getting bootstrapped. In some cases, like NAT rebinding, keeping the stat | example, if a /crts request is followed by a /sen request, both can use the | |||
e of a connection is not possible when devices sleep for extended periods of tim | same authenticated DTLS connection. However, when a /crts request is | |||
e. In such occasions, <xref target="I-D.ietf-tls-dtls-connection-id"/> negotiate | included in the set of sequential EST transactions, some additional | |||
s a connection ID that can eliminate the need for new handshake and its addition | security considerations apply regarding the use of the Implicit and | |||
al cost; or DTLS session resumption provides a less costly alternative than re-d | Explicit TA database as explained in <xref target="sec-est" | |||
oing a full DTLS handshake. </t> | format="default"/>.</t> | |||
</section> <!-- 7925 profile --> | <t>Given that after a successful enrollment, it is more likely that a | |||
new EST transaction will not take place for a significant amount of | ||||
time, the DTLS connections <bcp14>SHOULD</bcp14> only be kept alive for | ||||
EST messages that are relatively close to each other. These could | ||||
include a /sen immediately following a /crts when a device is getting | ||||
bootstrapped. In some cases, like NAT rebinding, keeping the state of a | ||||
connection is not possible when devices sleep for extended periods of | ||||
time. In such occasions, <xref target="RFC9146" | ||||
format="default"/> negotiates a connection ID that can eliminate the | ||||
need for a new handshake and its additional cost; or, DTLS session | ||||
resumption provides a less costly alternative than redoing a full DTLS | ||||
handshake. </t> | ||||
</section> | ||||
<section anchor="design" title="Protocol Design"> | <section anchor="design" numbered="true" toc="default"> | |||
<t>EST-coaps uses CoAP to transfer EST messages, aided by Block-Wise Transfe | <name>Protocol Design</name> | |||
r | <t>EST-coaps uses CoAP to transfer EST messages, aided by Block-Wise Trans | |||
<xref target="RFC7959"/> to avoid IP | fer | |||
fragmentation. The use of Blocks for the transfer of larger | <xref target="RFC7959" format="default"/>, to avoid IP | |||
EST messages is specified in <xref target="fragment"/>. | fragmentation. The use of blocks for the transfer of larger | |||
<xref target="fig-est-coaps-layers"/> shows the layered EST-coaps | EST messages is specified in <xref target="fragment" format="default"/>. | |||
<xref target="est-coaps-layers" format="default"/> shows the layered EST- | ||||
coaps | ||||
architecture.</t> | architecture.</t> | |||
<t>The EST-coaps protocol design follows closely the EST design. The suppo | ||||
<t>The EST-coaps protocol design follows closely the EST design. The support | rted | |||
ed | ||||
message types in EST-coaps are: | message types in EST-coaps are: | |||
<list style="symbols"> | </t> | |||
<t>CA certificate retrieval needed to receive the complete set of CA cer | <ul spacing="normal"> | |||
tificates. </t> | <li>CA certificate retrieval needed to receive the complete set of CA ce | |||
<t>Simple enroll and re-enroll for a CA to sign client identity p | rtificates. </li> | |||
ublic key.</t> | <li>Simple enroll and re-enroll for a CA to sign client identity public | |||
<t>Certificate Signing Request (CSR) attribute messages that informs the | keys.</li> | |||
client | <li>Certificate Signing Request (CSR) attribute messages that informs th | |||
of the fields to include in a CSR.</t> | e client | |||
<t>Server-side key generation messages to provide a client identity priv | of the fields to include in a CSR.</li> | |||
ate key when the client chooses so. </t> | <li>Server-side key generation messages to provide a client identity pri | |||
</list></t> | vate key when the client chooses so. </li> | |||
<t> | </ul> | |||
While <xref target="RFC7030" /> permits a number of the EST functions to be us | <t> | |||
ed without | While <xref target="RFC7030" format="default"/> permits a number of the EST fu | |||
authentication, this specification requires that the client MUST be authentica | nctions to be used without | |||
ted | authentication, this specification requires that the client <bcp14>MUST</bcp14 | |||
for all functions. </t><!-- because allowing unauthenticated requests introduc | > be authenticated | |||
es security concerns and amplification attacks --> | for all functions. </t> | |||
<section anchor="discovery" title = "Discovery and URIs"> | ||||
<t>EST-coaps is targeted for low-resource networks with small packets. Two t | ||||
ypes of installations are possible: (1) rigid ones, where the address and the su | ||||
pported functions of the EST server(s) are known, and (2) a flexible one, where | ||||
the EST server and its supported functions need to be discovered.</t> | ||||
<t>For both types of installations, saving header space is important and sho | <section anchor="discovery" numbered="true" toc="default"> | |||
rt EST-coaps URIs are specified in this document. These URIs are shorter than th | <name>Discovery and URIs</name> | |||
e ones in <xref target="RFC7030"/>. Two example EST-coaps resource path names ar | <t>EST-coaps is targeted for low-resource networks with small packets. T | |||
e: </t> | wo types of installations are possible: (1) a rigid one, where the address and t | |||
he supported functions of the EST server(s) are known, and (2) a flexible one, w | ||||
here the EST server and its supported functions need to be discovered.</t> | ||||
<t>For both types of installations, saving header space is important and | ||||
short EST-coaps URIs are specified in this document. These URIs are shorter tha | ||||
n the ones in <xref target="RFC7030" format="default"/>. Two example EST-coaps r | ||||
esource path names are: </t> | ||||
<figure align="left"><artwork><![CDATA[ | <artwork><![CDATA[ | |||
coaps://example.com:<port>/.well-known/est/<short-est> | coaps://example.com:<port>/.well-known/est/<short-est> | |||
coaps://example.com:<port>/.well-known/est/ArbitraryLabel/<short-est> | coaps://example.com:<port>/.well-known/est/ArbitraryLabel/<short-est> | |||
]]></artwork></figure> | ]]></artwork> | |||
<!-- The ArbitraryLabel path-segment, if used, SHOULD be of the shortes | <t>The short-est strings are defined in <xref target="est-uri" format="def | |||
t length | ault"/>. | |||
possible (Sections 3.1 and 3.2.2 of <xref target="RFC7030"/>. --> | ||||
<t>The short-est strings are defined in <xref target="est-uri"/>. | ||||
Arbitrary Labels are usually defined and used by EST CAs in order | Arbitrary Labels are usually defined and used by EST CAs in order | |||
to route client requests to the appropriate certificate profile. | to route client requests to the appropriate certificate profile. | |||
Implementers should consider using short labels to minimize | Implementers should consider using short labels to minimize | |||
transmission overhead.</t> | transmission overhead.</t> | |||
<t>The EST-coaps server URIs, obtained through discovery of the | ||||
<t>The EST-coaps server URIs, obtained through discovery of the | ||||
EST-coaps resource(s) as shown below, are of the form: </t> | EST-coaps resource(s) as shown below, are of the form: </t> | |||
<figure align="left"><artwork><![CDATA[ | <artwork><![CDATA[ | |||
coaps://example.com:<port>/<root-resource>/<short-est> | coaps://example.com:<port>/<root-resource>/<short-est> | |||
coaps://example.com:<port>/<root-resource>/ArbitraryLabel/<short-est> | coaps://example.com:<port>/<root-resource>/ArbitraryLabel/<short-est> | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>Figure 5 in <xref target="RFC7030" sectionFormat="of" | ||||
<t>Figure 5 in Section 3.2.2 of <xref target="RFC7030"/> enumerates the op | section="3.2.2"/> enumerates the operations and corresponding paths | |||
erations and corresponding paths which are supported by EST. <xref target="est-u | that are supported by EST. <xref target="est-uri" format="default"/> | |||
ri"/> provides the mapping from the EST URI path to the shorter EST-coaps URI pa | provides the mapping from the EST URI path to the shorter EST-coaps | |||
th.</t> | URI path.</t> | |||
<texttable anchor="est-uri" title="Short EST-coaps URI path"> | <table anchor="est-uri" align="center"> | |||
<ttcol align="left">EST</ttcol> | <name>Short EST-coaps URI Path</name> | |||
<ttcol align="left">EST-coaps</ttcol> | <thead> | |||
<tr> | ||||
<c> /cacerts </c> <c> /crts </c> | <th align="left">EST</th> | |||
<c> /simpleenroll </c> <c> /sen </c> | <th align="left">EST-coaps</th> | |||
<c> /simplereenroll </c> <c> /sren </c> | </tr> | |||
<c> /serverkeygen </c> <c> /skg (PKCS#7) </c> | </thead> | |||
<c> /serverkeygen </c> <c> /skc (application/pkix-cert)</c> | <tbody> | |||
<c> /csrattrs </c> <c> /att </c> | <tr> | |||
</texttable> | <td align="left"> /cacerts </td> | |||
<td align="left"> /crts </td> | ||||
<t>The /skg message is the EST /serverkeygen equivalent where the client | </tr> | |||
requests a certificate in PKCS#7 format and a private key. If the | <tr> | |||
client prefers a single application/pkix-cert certificate instead of PK | <td align="left"> /simpleenroll </td> | |||
CS#7, | <td align="left"> /sen </td> | |||
it will make an /skc request. In both cases (i.e., /skg, /skc) a privat | </tr> | |||
e key MUST be returned.</t> | <tr> | |||
<td align="left"> /simplereenroll </td> | ||||
<td align="left"> /sren </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /serverkeygen </td> | ||||
<td align="left"> /skg (PKCS #7) </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /serverkeygen </td> | ||||
<td align="left"> /skc (application/pkix-cert)</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /csrattrs </td> | ||||
<td align="left"> /att </td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>The /skg message is the EST /serverkeygen equivalent where the | ||||
client requests a certificate in PKCS #7 format and a private key. If | ||||
the client prefers a single application/pkix-cert certificate instead | ||||
of PKCS #7, it will make an /skc request. In both cases (i.e., /skg, | ||||
/skc), a private key <bcp14>MUST</bcp14> be returned.</t> | ||||
<t>Clients and servers <bcp14>MUST</bcp14> support the short resource ES | ||||
T-coaps URIs. </t> | ||||
<t>Clients and servers MUST support the short resource EST-coaps URIs. </t | <t>In the context of CoAP, the presence and location of (path to) the | |||
> | EST resources are discovered by sending a GET request to | |||
<!-- Panos: Commented this out after a review from Carsten that pointed | "/.well-known/core" including a resource type (RT) parameter with the | |||
out that we can't make our minds what to use and we let the implementers use wh | value "ace.est*" <xref target="RFC6690" format="default"/>. The example | |||
at they want. So we decided to be more specific and pick short URIs only. --> | below shows the discovery over CoAPS of the presence and location of | |||
<!--The corresponding longer URIs from <xref target="RFC7030"/> MAY be | EST-coaps resources. Linefeeds are included only for readability.</t> | |||
supported.--> | ||||
<!-- Upon success, the return payload will contain the root resource of th | <sourcecode type="core-link-format"><![CDATA[ | |||
e EST resources. The server MAY return all available resource paths and the used | ||||
content types. This is useful when multiple content types are supported by the | ||||
EST-coaps server and optional functions are available. --> | ||||
<t>In the context of CoAP, the presence and location of (path to) the EST | ||||
resources are discovered by sending a GET request to "/.well-known/core" includi | ||||
ng a resource type (RT) parameter with the value "ace.est*" <xref target="RFC669 | ||||
0"/>. The example below shows the discovery over CoAPS of the presence and locat | ||||
ion of EST-coaps resources. Linefeeds are included only for readability.</t> | ||||
<figure><artwork align="left"><![CDATA[ | ||||
REQ: GET /.well-known/core?rt=ace.est* | REQ: GET /.well-known/core?rt=ace.est* | |||
RES: 2.05 Content | RES: 2.05 Content | |||
</est/crts>;rt="ace.est.crts";ct="281 TBD287", | </est/crts>;rt="ace.est.crts";ct="281 287", | |||
</est/sen>;rt="ace.est.sen";ct="281 TBD287", | </est/sen>;rt="ace.est.sen";ct="281 287", | |||
</est/sren>;rt="ace.est.sren";ct="281 TBD287", | </est/sren>;rt="ace.est.sren";ct="281 287", | |||
</est/att>;rt="ace.est.att";ct=285, | </est/att>;rt="ace.est.att";ct=285, | |||
</est/skg>;rt="ace.est.skg";ct=62, | </est/skg>;rt="ace.est.skg";ct=62, | |||
</est/skc>;rt="ace.est.skc";ct=62 | </est/skc>;rt="ace.est.skc";ct=62 | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t>The first three lines, describing ace.est.crts, ace.est.sen, and | |||
<!-- Used quotes when multiple cts are returned as shown in draft-ietf-core- | ace.est.sren, of the discovery response above <bcp14>MUST</bcp14> be | |||
resource-directory-19 --> | returned if the server supports resource discovery. The last three lines | |||
<t>The first three lines, describing ace.est.crts, ace.est.sen, and ace.es | are only included if the corresponding EST functions are implemented | |||
t.sren, of the discovery response above MUST be returned if the server supports | (see <xref target="est-implementation" format="default"/>). The | |||
resource discovery. The last three lines are only included if the corresponding | Content-Formats in the response allow the client to request one that is | |||
EST functions are implemented (see <xref target="est-implementation"/>). The Con | supported by the server. These are the values that would be sent in the | |||
tent-Formats in the response allow the client to request one that is supported b | client request with an Accept Option. </t> | |||
y the server. These are the values that would be sent in the client request with | ||||
an Accept option. </t><!--This approach allows future servers to incorporate cu | ||||
rrently not specified content-formats and resources.--> | ||||
<!--Port numbers, not returned in the example, are assumed to be the defau | ||||
lt numbers 5683 and 5684 for CoAP and CoAPS respectively (Sections 12.6 and 12.7 | ||||
of <xref target="RFC7252"/>). --> | ||||
<t>Discoverable port numbers can be returned in the response payload. A n example response payload for non-default CoAPS server port 61617 follows below . Linefeeds are included only for readability.</t> | <t>Discoverable port numbers can be returned in the response payload. A n example response payload for non-default CoAPS server port 61617 follows below . Linefeeds are included only for readability.</t> | |||
<figure><artwork align="left"><![CDATA[ | ||||
<sourcecode type="core-link-format"><![CDATA[ | ||||
REQ: GET /.well-known/core?rt=ace.est* | REQ: GET /.well-known/core?rt=ace.est* | |||
RES: 2.05 Content | RES: 2.05 Content | |||
<coaps://[2001:db8:3::123]:61617/est/crts>;rt="ace.est.crts"; | <coaps://[2001:db8:3::123]:61617/est/crts>;rt="ace.est.crts"; | |||
ct="281 TBD287", | ct="281 287", | |||
<coaps://[2001:db8:3::123]:61617/est/sen>;rt="ace.est.sen"; | <coaps://[2001:db8:3::123]:61617/est/sen>;rt="ace.est.sen"; | |||
ct="281 TBD287", | ct="281 287", | |||
<coaps://[2001:db8:3::123]:61617/est/sren>;rt="ace.est.sren"; | <coaps://[2001:db8:3::123]:61617/est/sren>;rt="ace.est.sren"; | |||
ct="281 TBD287", | ct="281 287", | |||
<coaps://[2001:db8:3::123]:61617/est/att>;rt="ace.est.att"; | <coaps://[2001:db8:3::123]:61617/est/att>;rt="ace.est.att"; | |||
ct=285, | ct=285, | |||
<coaps://[2001:db8:3::123]:61617/est/skg>;rt="ace.est.skg"; | <coaps://[2001:db8:3::123]:61617/est/skg>;rt="ace.est.skg"; | |||
ct=62, | ct=62, | |||
<coaps://[2001:db8:3::123]:61617/est/skc>;rt="ace.est.skc"; | <coaps://[2001:db8:3::123]:61617/est/skc>;rt="ace.est.skc"; | |||
ct=62 | ct=62 | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | ||||
<!--on port 5684--> | <t>The server <bcp14>MUST</bcp14> support the default /.well-known/est | |||
<t>The server MUST support the default /.well-known/est | root resource. The server <bcp14>SHOULD</bcp14> support | |||
root resource. The server SHOULD support | ||||
resource discovery when it supports non-default URIs | resource discovery when it supports non-default URIs | |||
(like /est or /est/ArbitraryLabel) or ports. The client | (like /est or /est/ArbitraryLabel) or ports. The client | |||
SHOULD use resource discovery when it is unaware | <bcp14>SHOULD</bcp14> use resource discovery when it is unaware | |||
of the available EST-coaps resources.</t><!-- or considers | of the available EST-coaps resources.</t> | |||
sending two Uri-Path Options to convey the resource | ||||
wasteful.--> | ||||
<t>Throughout this document the example root resource of /est is used.< | ||||
/t> | ||||
</section> <!-- discovery and URIs --> | ||||
<section anchor="implementation" title="Mandatory/optional EST Functions"> | ||||
<t> | ||||
This specification contains a set of required-to-implement functions, optional f | ||||
unctions, and not specified functions. The unspecified functions are deemed too | ||||
expensive for low-resource devices in payload and calculation times.</t> | ||||
<t> <xref target="est-implementation"/> specifies the mandatory-to-implement or | ||||
optional implementation of the EST-coaps functions. Discovery of the existence o | ||||
f optional functions is described in <xref target="discovery"/>.</t> | ||||
<texttable anchor="est-implementation" title="List of EST-coaps functions"> | ||||
<ttcol align="left">EST Functions</ttcol> | ||||
<ttcol align="left">EST-coaps implementation</ttcol> | ||||
<c> /cacerts </c> <c> MUST </c> | ||||
<c> /simpleenroll </c> <c> MUST </c> | ||||
<c> /simplereenroll </c> <c> MUST </c> | ||||
<c> /fullcmc </c> <c> Not specified </c> | ||||
<c> /serverkeygen </c> <c> OPTIONAL </c> | ||||
<c> /csrattrs </c> <c> OPTIONAL </c> | ||||
</texttable> | ||||
</section> <!-- Required/optional Functions --> | <t>Throughout this document, the example root resource of /est is used. | |||
</t> | ||||
</section> | ||||
<section anchor="format" title ="Payload formats"> | <section anchor="implementation" numbered="true" toc="default"> | |||
<name>Mandatory/Optional EST Functions</name> | ||||
<t> | ||||
This specification contains a set of required-to-implement functions, optional | ||||
functions, and not-specified functions. The unspecified functions are deemed | ||||
too expensive for low-resource devices in payload and calculation times.</t> | ||||
<t> <xref target="est-implementation" format="default"/> specifies the | ||||
mandatory-to-implement or optional implementation of the EST-coaps | ||||
functions. Discovery of the existence of optional functions is | ||||
described in <xref target="discovery" format="default"/>.</t> | ||||
<table anchor="est-implementation" align="center"> | ||||
<name>List of EST-coaps Functions</name> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">EST Functions</th> | ||||
<th align="left">EST-coaps Implementation</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left"> /cacerts </td> | ||||
<td align="left"> <bcp14>MUST</bcp14> </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /simpleenroll </td> | ||||
<td align="left"> <bcp14>MUST</bcp14> </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /simplereenroll </td> | ||||
<td align="left"> <bcp14>MUST</bcp14> </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /fullcmc </td> | ||||
<td align="left"> Not specified </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /serverkeygen </td> | ||||
<td align="left"> <bcp14>OPTIONAL</bcp14> </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /csrattrs </td> | ||||
<td align="left"> <bcp14>OPTIONAL</bcp14> </td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<t>EST-coaps is designed for low-resource devices and hence does not need | <section anchor="format" numbered="true" toc="default"> | |||
<name>Payload Formats</name> | ||||
<t>EST-coaps is designed for low-resource devices; hence, it does not ne | ||||
ed | ||||
to send Base64-encoded data. Simple binary is more efficient (30% small er payload for DER-encoded ASN.1) and | to send Base64-encoded data. Simple binary is more efficient (30% small er payload for DER-encoded ASN.1) and | |||
well supported by CoAP. Thus, the payload for a given Media-Type follow | well supported by CoAP. Thus, the payload for a given media type follow | |||
s the ASN.1 | s the ASN.1 | |||
structure of the Media-Type and is transported in binary format.</t> | structure of the media type and is transported in binary format.</t> | |||
<!-- <xref target="cborpair"/> <xref target="format"/> specifies the paylo | ||||
ad | ||||
structure when multiple Media-Types | ||||
are present in the payload.--> | ||||
<t>The Content-Format (HTTP Content-Type equivalent) of the CoAP message d | <t>The Content-Format (HTTP Content-Type equivalent) of the CoAP message | |||
etermines which | determines which EST message is transported in the CoAP payload. The | |||
EST message is transported in the CoAP payload. The Media-Types specifi | media types specified in the HTTP Content-Type header field (<xref | |||
ed in the HTTP | target="RFC7030" sectionFormat="of" section="3.2.4"/>) are specified by | |||
Content-Type header field (Section 3.2.2 of <xref target="RFC7030"/>) a | the Content-Format Option (12) of CoAP. The combination of URI-Path and | |||
re | Content-Format in EST-coaps <bcp14>MUST</bcp14> map to an allowed | |||
specified by the Content-Format Option (12) of CoAP. The combination of | combination of URI and media type in EST. The required Content-Formats | |||
URI-Path | for these requests and response messages are defined in <xref | |||
and Content-Format in EST-coaps MUST map to an allowed combination of U | target="Content-Formats" format="default"/>. The CoAP response codes are | |||
RI and | defined in <xref target="codes" format="default"/>.</t> | |||
Media-Type in EST. The required Content-Formats for these requests and | ||||
response messages are defined in <xref target="Content-Formats"/>. The | ||||
CoAP response | ||||
codes are defined in <xref target="codes"/>.</t> | ||||
<!-- CoAP doesn't have a mechanism for negotiating the | <t>Content-Format 287 can be used in place of 281 to carry a single | |||
content formats of representations embedded in application/multipart-core | certificate instead of a PKCS #7 container | |||
representations. --> | in a /crts, /sen, /sren, or /skg response. | |||
<t>Content-Format TBD287 can be used in place of 281 to carry a single | Content-Format 281 <bcp14>MUST</bcp14> be supported by EST-coaps servers. | |||
certificate instead of a PKCS#7 container | Servers <bcp14>MAY</bcp14> also support Content-Format 287. | |||
in a /crts, /sen, /sren or /skg response. | ||||
Content-Format 281 MUST be supported by EST-coaps servers. | ||||
Servers MAY also support Content-Format TBD287. | ||||
It is up to the client to support only Content-Format 281, | It is up to the client to support only Content-Format 281, | |||
TBD287 or both. | 287 or both. | |||
The client will use | The client will use | |||
a COAP Accept Option in the request to express the | a CoAP Accept Option in the request to express the | |||
preferred response Content-Format. If an Accept Option is | preferred response Content-Format. If an Accept Option is | |||
not included in the request, the client is not expressing | not included in the request, the client is not expressing | |||
any preference and the server SHOULD choose format 281.</t> | any preference and the server <bcp14>SHOULD</bcp14> choose format 281.</t> | |||
<!--If the | ||||
preferred Content-Format cannot be returned, the server | ||||
MUST send a 4.06 (Not Acceptable) response, unless another | ||||
error code takes precedence for the response | ||||
<xref target="RFC7252"/>. --> | ||||
<t>Content-Format 286 is used in /sen, /sren and /skg requests | <t>Content-Format 286 is used in /sen, /sren, and /skg requests | |||
and 285 in /att responses. </t> | and 285 in /att responses. </t> | |||
<!-- <Section anchor="cborpair" title="Content-Format application/multipar | ||||
t-core"> --> | ||||
<!-- <t><spanx style="strong">application/multipart-core</spanx> </t>-- | ||||
> | ||||
<!--The collection is encoded as a <xref target="RFC7049">CBOR array</x | ||||
ref> with | ||||
an even number of elements. The second, fourth, sixth, etc. element is a | ||||
binary | ||||
string containing a representation. The first, third, fifth, etc. element | ||||
is an | ||||
unsigned integer specifying the Content-Format identifier of the consecut | ||||
ive representation. --> | ||||
<t> | <t> | |||
A representation with Content-Format identifier 62 contains a collection o | A representation with Content-Format identifier 62 contains a collection | |||
f representations | of representations along with their respective Content-Format. The | |||
along with their respective Content-Format. The Content-Format identifies | Content-Format identifies the media type application/multipart-core | |||
the | specified in <xref target="RFC8710" | |||
Media-Type application/multipart-core specified in <xref target="I-D.ietf | format="default"/>. For example, a collection, containing two | |||
-core-multipart-ct"/>. | representations in response to an EST-coaps server-side key generation | |||
For example, a collection, containing two representations in response to | /skg request, could include a private key in PKCS #8 <xref | |||
a EST-coaps server-side | target="RFC5958" format="default"/> with Content-Format identifier 284 | |||
key generation /skg request, could include a private key in PKCS#8 <xref | (0x011C) and a single certificate in a PKCS #7 container with | |||
target="RFC5958"/> | Content-Format identifier 281 (0x0119). Such a collection would look | |||
with Content-Format identifier 284 (0x011C) and a single certificate in a | like [284,h'0123456789abcdef', 281,h'fedcba9876543210'] in diagnostic | |||
PKCS#7 container | Concise Binary Object Representation (CBOR) notation. The serialization of | |||
with Content-Format identifier 281 (0x0119). | such CBOR content would be:</t> | |||
Such a collection would look like [284,h'0123456789abcdef', 281,h'fedcba9 | <figure> | |||
876543210'] | <name>Multipart /skg Response Serialization</name> | |||
in diagnostic CBOR notation. The serialization of such CBOR content would | <sourcecode type="cbor-pretty"><![CDATA[ | |||
be </t> | ||||
<figure title="Multipart /skg response serialization"><artwork> | ||||
<![CDATA[ | ||||
84 # array(4) | 84 # array(4) | |||
19 011C # unsigned(284) | 19 011C # unsigned(284) | |||
48 # bytes(8) | 48 # bytes(8) | |||
0123456789ABCDEF # "\x01#Eg\x89\xAB\xCD\xEF" | 0123456789ABCDEF # "\x01#Eg\x89\xAB\xCD\xEF" | |||
19 0119 # unsigned(281) | 19 0119 # unsigned(281) | |||
48 # bytes(8) | 48 # bytes(8) | |||
FEDCBA9876543210 # "\xFE\xDC\xBA\x98vT2\x10" | FEDCBA9876543210 # "\xFE\xDC\xBA\x98vT2\x10" | |||
]]></artwork></figure> | ]]></sourcecode> | |||
</figure> | ||||
<t>When the client makes an /skc request the certificate returned with | <t>When the client makes an /skc request, the certificate returned | |||
the private key | with the private key is a single X.509 certificate (not a PKCS #7 | |||
is a single X.509 certificate (not a PKCS#7 container) with Content-For | container) with Content-Format identifier 287 (0x011F) instead of | |||
mat identifier | 281. In cases where the private key is encrypted with Cryptographic | |||
TBD287 (0x011F) instead of 281. | Message Syntax (CMS) (as explained in <xref target="serverkey" | |||
In cases where the private key is encrypted with CMS (as | format="default"/>), the Content-Format identifier is 280 (0x0118) | |||
explained in <xref target="serverkey"/>) the Content-Format identifier | instead of 284. The Content-Format used in the response is summarized | |||
is | in <xref target="skg-skc" format="default"/>.</t> | |||
280 (0x0118) instead of 284. The content format used in the response is | <table anchor="skg-skc" align="center"> | |||
summarized in <xref target="skg-skc"/>.</t> | <name>Response Content-Formats for /skg and /skc</name> | |||
<thead> | ||||
<texttable anchor="skg-skc" title="response content formats for skg and skc"> | <tr> | |||
<ttcol align="left">Function</ttcol> | <th align="left">Function</th> | |||
<ttcol align="left">Response part 1</ttcol> | <th align="left">Response, Part 1</th> | |||
<ttcol align="left">Response part 2</ttcol> | <th align="left">Response, Part 2</th> | |||
</tr> | ||||
<c> /skg </c> <c> 284 </c> <c> 281</c> | </thead> | |||
<c> /skc </c> <c> 280 </c> <c> TBD287</c> | <tbody> | |||
</texttable> | <tr> | |||
<td align="left"> /skg </td> | ||||
<td align="left"> 284 </td> | ||||
<td align="left"> 281</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left"> /skc </td> | ||||
<td align="left"> 280 </td> | ||||
<td align="left"> 287</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>The key and certificate representations are DER-encoded ASN.1, | ||||
in its binary form. An example is shown in <xref target="appskg" format="defa | ||||
ult"/>.</t> | ||||
<t>The key and certificate representations are DER-encoded ASN.1, | </section> | |||
in its native binary form. An example is shown in <xref target="appskg"/>.</t | ||||
> | ||||
<!-- </section> --> <!--Content-Format application/multipart-core --> | <section numbered="true" toc="default"> | |||
<name>Message Bindings</name> | ||||
<t>The general EST-coaps message characteristics are: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
</section> <!-- Payload format --> | <li>EST-coaps servers sometimes need to provide delayed | |||
responses, which are preceded by an immediately returned | ||||
empty ACK or an ACK containing response code 5.03 as | ||||
explained in <xref target="pending" format="default"/>. | ||||
Thus, it is <bcp14>RECOMMENDED</bcp14> for implementers to | ||||
send EST-coaps requests in Confirmable (CON) CoAP | ||||
messages.</li> | ||||
<li>The CoAP Options used are Uri-Host, Uri-Path, Uri-Port, | ||||
Content-Format, Block1, Block2, and Accept. These CoAP Options are | ||||
used to communicate the HTTP fields specified in the EST REST | ||||
messages. The Uri-host and Uri-Port Options can be omitted from the | ||||
CoAP message sent on the wire. When omitted, they are logically | ||||
assumed to be the transport protocol destination address and port, | ||||
respectively. Explicit Uri-Host and Uri-Port Options are typically | ||||
used when an endpoint hosts multiple virtual servers and uses the | ||||
Options to route the requests accordingly. Other CoAP Options | ||||
should be handled in accordance with <xref target="RFC7252" | ||||
format="default"/>.</li> | ||||
<section title="Message Bindings"> | <li>EST URLs are HTTPS based (https://); in CoAP, these are assumed | |||
<t>The general EST-coaps message characteristics are: | to be translated to CoAPS (coaps://).</li> | |||
<list style="symbols"> | </ul> | |||
<!-- <t>The Ver, TKL, Token, and Message ID values of the CoAP header | <t><xref target="est-uri" format="default"/> provides the mapping from t | |||
are not affected by EST.</t> --> | he EST URI path to the EST-coaps URI path. | |||
<t>EST-coaps servers sometimes need to provide delayed response | <xref target="messagebindings" format="default"/> includes some | |||
s which are preceded by an immediately returned empty ACK | practical examples of EST messages | |||
or an ACK containing response code 5.03 as explained in <xref t | ||||
arget="pending"/>. | ||||
Thus, it is RECOMMENDED for implementers to send EST-coaps requ | ||||
ests in confirmable CON CoAP messages.</t> | ||||
<t>The CoAP Options used are Uri-Host, Uri-Path, Uri-Port, Content-For | ||||
mat, | ||||
Block1, Block2, and Accept. | ||||
These CoAP Options are used to communicate the HTTP fields spec | ||||
ified in the EST | ||||
REST messages. The Uri-host and Uri-Port Options can be omitted | ||||
from the COAP | ||||
message sent on the wire. When omitted, they are logically assu | ||||
med to be the transport protocol destination address and port respectively. Expl | ||||
icit Uri-Host and Uri-Port Options are typically used when an endpoint hosts mul | ||||
tiple virtual | ||||
servers and uses the Options to route the requests accordingly. | ||||
Other COAP Options should be handled in | ||||
accordance with <xref target="RFC7252"/>.</t> | ||||
<!-- Alternatively, if a UDP port to a server is blocked, | ||||
someone could send the DTLS packets to a known open port | ||||
on the server and use the Uri-Port to convey the intended port | ||||
he is attempting to reach. --> | ||||
<t>EST URLs are HTTPS based (https://), in CoAP these are assum | ||||
ed to be translated | ||||
to CoAPS (coaps://)</t> | ||||
</list></t> | ||||
<t><xref target="est-uri"/> provides the mapping from the EST URI path t | ||||
o the EST-coaps URI path. | ||||
<xref target="messagebindings"/> includes some practical example | ||||
s of EST messages | ||||
translated to CoAP.</t> | translated to CoAP.</t> | |||
</section> <!-- Message bindings --> | </section> | |||
<section anchor="codes" title="CoAP response codes"> | <section anchor="codes" numbered="true" toc="default"> | |||
<t>Section 5.9 of <xref target="RFC7252"/> and Section 7 of <xref target=" | <name>CoAP Response Codes</name> | |||
RFC8075"/> | <t><xref target="RFC7252" sectionFormat="of" section="5.9"/> and <xref | |||
specify the mapping of HTTP response codes to CoAP response codes. | target="RFC8075" sectionFormat="of" section="7"/> specify the mapping | |||
The success code in response to an EST-coaps GET request (/crts, /att), | of HTTP response codes to CoAP response codes. The success code in | |||
is 2.05. Similarly, 2.04 is used in successful response to EST-coaps PO | response to an EST-coaps GET request (/crts, /att) is 2.05. Similarly, | |||
ST requests (/sen, /sren, /skg, /skc).</t> | 2.04 is used in successful response to EST-coaps POST requests (/sen, | |||
<!--2.01 Making 2.04 based on comment from Esko https://github.com/SanK | /sren, /skg, /skc).</t> | |||
umar2015/EST-coaps/issues/145#issuecomment-497029846 --> | ||||
<!-- Removing because we now use 2.04 based on comment | ||||
from Esko https://github.com/SanKumar2015/EST-coaps/issues/145#issuecommen | ||||
t-497029846 | ||||
Section 7 of | ||||
<xref target="RFC8075"/> maps 2.02 (Deleted) or 2.04 (Changed) to an HT | ||||
TP | ||||
200 OK response, but 2.01 (Created) is more suitable for the creation | ||||
of certificates in the context of EST-coaps. --> | ||||
<t>EST makes use of HTTP 204 or 404 responses when a resource is not av ailable | <t>EST makes use of HTTP 204 or 404 responses when a resource is not av ailable | |||
for the client. In EST-coaps 2.04 is used in response to | for the client. In EST-coaps, 2.04 is used in response to | |||
a POST (/sen, /sren, /skg, /skc). 4.04 is | a POST (/sen, /sren, /skg, /skc). 4.04 is | |||
used when the resource is not available for the client. </t> | used when the resource is not available for the client. </t> | |||
<t>HTTP response code 202 with a Retry-After header field | ||||
<t>HTTP response code 202 with a Retry-After header field | in <xref target="RFC7030" format="default"/> has no equivalent in CoAP. | |||
in <xref target="RFC7030"/> has no equivalent in CoAP. | ||||
HTTP 202 with Retry-After is used in EST for delayed server | HTTP 202 with Retry-After is used in EST for delayed server | |||
responses. <xref target="pending"/> specifies how EST-coaps | responses. <xref target="pending" format="default"/> specifies how EST- coaps | |||
handles delayed messages with 5.03 responses with a Max-Age Option.</t> | handles delayed messages with 5.03 responses with a Max-Age Option.</t> | |||
<!-- In case a CoAP Option is unrecognized and | <t>Additionally, EST's HTTP 400, 401, 403, 404, and 503 status codes ha | |||
critical, the server is expected to return a 4.02 (Bad Option). | ve | |||
Moreover, if the Content-Format requested in the client | their equivalent CoAP 4.00, 4.01, 4.03, 4.04, and 5.03 response codes | |||
Accept Option, is not supported the server MUST return a 4.06 (Not Acce | ||||
ptable), | ||||
unless another error code takes precedence for the response.--> | ||||
<t>Additionally, EST's HTTP 400, 401, 403, 404 and 503 status codes hav | ||||
e | ||||
their equivalent CoAP 4.00, 4.01, 4.03, 4.04 and 5.03 response codes | ||||
in EST-coaps. | in EST-coaps. | |||
<xref target="estcoaps-codes"/> summarizes the EST-coaps response codes | <xref target="estcoaps-codes" format="default"/> summarizes the EST-coa | |||
. </t> | ps response codes. </t> | |||
<table anchor="estcoaps-codes" align="center"> | ||||
<texttable anchor="estcoaps-codes" title="EST-coaps response codes"> | <name>EST-coaps Response Codes</name> | |||
<ttcol align="left">operation</ttcol> | <thead> | |||
<ttcol align="left">EST-coaps response code</ttcol> | <tr> | |||
<ttcol align="left">Description</ttcol> | <th align="left">Operation</th> | |||
<th align="left">EST-coaps Response Code</th> | ||||
<c>/crts, /att</c> <c>2.05</c> <c>Success. Certs included in the re | <th align="left">Description</th> | |||
sponse payload.</c> | </tr> | |||
<c> </c> <c>4.xx / 5.xx</c> <c>Failure.</c> | </thead> | |||
<c>/sen, /skg, /sren, /skc</c> <c>2.04 | <tbody> | |||
<!-- 2.01 Making 2.04 based on comment from Esko https://github. | <tr> | |||
com/SanKumar2015/EST-coaps/issues/145#issuecomment-497029846 --> | <td align="left">/crts, /att</td> | |||
</c> <c>Success. Cert in | <td align="left">2.05</td> | |||
cluded in the response payload.</c> | <td align="left">Success. Certs included in the response payload.< | |||
<!-- Removing because we now always use 2.04 based on comment fr | /td> | |||
om Esko https://github.com/SanKumar2015/EST-coaps/issues/145#issuecomment-497029 | </tr> | |||
846 | <tr> | |||
<c> </c> <c>2.04</c> <c>Success. Cert include | <td align="left"> </td> | |||
d in the delayed separate response payload. </c> --> | <td align="left">4.xx / 5.xx</td> | |||
<c> </c> <c>5.03</c> <c>Retry in Max-Age Opti | <td align="left">Failure.</td> | |||
on time.</c> | </tr> | |||
<c> </c> <c>4.xx / 5.xx</c> <c>Failure.</c> | <tr> | |||
</texttable> | <td align="left">/sen, /skg, /sren, /skc</td> | |||
<td align="left">2.04 | ||||
</section> <!-- CoAP response codes --> | </td> | |||
<td align="left">Success. Cert included in the response payload.</ | ||||
<section anchor="fragment" title="Message fragmentation"> | td> | |||
<t>DTLS defines fragmentation only for the handshake and not for secure da | </tr> | |||
ta exchange (DTLS records). <xref target="RFC6347"/> states that to avoid using | <tr> | |||
IP fragmentation, which involves error-prone datagram reconstitution, invokers o | <td align="left"> </td> | |||
f the DTLS record layer should size DTLS records so that they fit within any Pat | <td align="left">5.03</td> | |||
h MTU estimates obtained from the record layer. In addition, invokers residing o | <td align="left">Retry in Max-Age Option time.</td> | |||
n a 6LoWPAN over IEEE 802.15.4 <xref target="ieee802.15.4"/> network are recomme | </tr> | |||
nded to size CoAP messages such that each DTLS record will fit within one or two | <tr> | |||
IEEE 802.15.4 frames.</t> | <td align="left"> </td> | |||
<td align="left">4.xx / 5.xx</td> | ||||
<td align="left">Failure.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<!-- From <xref target="RFC0791"/> follows that the absolute minimum value | <section anchor="fragment" numbered="true" toc="default"> | |||
of the IP MTU for IPv4 is as low as 68 bytes, which would leave only 40 bytes m | <name>Message Fragmentation</name> | |||
inus security overhead for a UDP payload. --> | <t>DTLS defines fragmentation only for the handshake and not for | |||
<t>That is not always possible in EST-coaps. Even though ECC certificates | secure data exchange (DTLS records). <xref target="RFC6347" | |||
are small in size, they can vary greatly based on signature algorithms, key size | format="default"/> states that to avoid using IP fragmentation, which | |||
s, and Object Identifier (OID) fields used. For 256-bit curves, common ECDSA cer | involves error-prone datagram reconstitution, invokers of the DTLS | |||
t sizes are 500-1000 bytes which could fluctuate further based on the algorithms | record layer should size DTLS records so that they fit within any Path | |||
, OIDs, Subject Alternative Names (SAN) and cert fields. For 384-bit curves, ECD | MTU estimates obtained from the record layer. In addition, invokers | |||
SA certificates increase in size and can sometimes reach 1.5KB. Additionally, th | residing on 6LoWPAN (IPv6 over Low-Power Wireless Personal Area Networks | |||
ere are times when the EST cacerts response from the server can include multiple | ) | |||
certificates that amount to large payloads. Section 4.6 of CoAP <xref target="R | over IEEE 802.15.4 networks <xref target="IEEE802.15.4" | |||
FC7252"/> describes the possible payload sizes: "if nothing is known about the s | format="default"/> are recommended to size CoAP messages such | |||
ize of the headers, good upper bounds are 1152 bytes for the message size and 10 | that each DTLS record will fit within one or two IEEE 802.15.4 | |||
24 bytes for the payload size". Section 4.6 of <xref target="RFC7252"/> also sug | frames.</t> | |||
gests that IPv4 implementations may want to limit themselves to more conservativ | ||||
e IPv4 datagram sizes such as 576 bytes. Even with ECC, EST-coaps messages can s | ||||
till exceed MTU sizes on the Internet or 6LoWPAN <xref target="RFC4919"/> (Secti | ||||
on 2 of <xref target="RFC7959"/>). EST-coaps needs to be able to fragment messag | ||||
es into multiple DTLS datagrams.</t> | ||||
<t>To perform fragmentation in CoAP, <xref target="RFC7959"/> specifies | <t>That is not always possible in EST-coaps. Even though ECC | |||
the Block1 Option for fragmentation of the request payload and the Block2 Optio | certificates are small in size, they can vary greatly based on signature | |||
n for fragmentation of the return payload of a CoAP flow. As explained in Sectio | algorithms, key sizes, and Object Identifier (OID) fields used. For | |||
n 1 of <xref target="RFC7959"/>, block-wise transfers should be used in Confirma | 256-bit curves, common Elliptic Curve Digital Signature Algorithm | |||
ble CoAP messages to avoid the exacerbation of lost blocks. EST-coaps servers MU | (ECDSA) cert sizes are 500-1000 bytes, which could fluctuate further | |||
ST implement Block1 and Block2. EST-coaps clients MUST implement Block2. EST-coa | based on the algorithms, OIDs, Subject Alternative Names (SANs), and cert | |||
ps clients MUST implement Block1 only if they are expecting to send EST-coaps re | fields. For 384-bit curves, ECDSA certificates increase in size and can | |||
quests with a packet size that exceeds the Path MTU. </t><!-- <xref target="RFC7 | sometimes reach 1.5KB. Additionally, there are times when the EST | |||
959"/> defines SZX in the Block Option fields. SZX is used to convey the size of | cacerts response from the server can include multiple certificates that | |||
the blocks in the requests or responses. The EST-coaps client MAY specify the B | amount to large payloads. <xref target="RFC7252" sectionFormat="of" | |||
lock1 and Block2 sizes for the server and MAY process Block2 sizes from the serv | section="4.6"/> (CoAP) describes the possible payload sizes: "if nothing | |||
er. The EST-coaps server MAY specify the Block2 size for the client and MAY proc | is known about the size of the headers, good upper bounds are 1152 bytes | |||
ess Block1 and Block2 sizes from the client.--> | for the message size and 1024 bytes for the payload size". <xref | |||
target="RFC7252" sectionFormat="of" section="4.6"/> also suggests that | ||||
IPv4 implementations may want to limit themselves to more conservative | ||||
IPv4 datagram sizes such as 576 bytes. Even with ECC, EST-coaps messages | ||||
can still exceed MTU sizes on the Internet or 6LoWPAN <xref | ||||
target="RFC4919" format="default"/> (<xref target="RFC7959" | ||||
sectionFormat="of" section="2"/>). EST-coaps needs to be able to | ||||
fragment messages into multiple DTLS datagrams.</t> | ||||
<t>To perform fragmentation in CoAP, <xref target="RFC7959" | ||||
format="default"/> specifies the Block1 Option for fragmentation of | ||||
the request payload and the Block2 Option for fragmentation of the | ||||
return payload of a CoAP flow. As explained in <xref target="RFC7959" | ||||
sectionFormat="of" section="1"/>, block-wise transfers should be used | ||||
in Confirmable CoAP messages to avoid the exacerbation of lost | ||||
blocks. EST-coaps servers <bcp14>MUST</bcp14> implement Block1 and | ||||
Block2. EST-coaps clients <bcp14>MUST</bcp14> implement | ||||
Block2. EST-coaps clients <bcp14>MUST</bcp14> implement Block1 only if | ||||
they are expecting to send EST-coaps requests with a packet size that | ||||
exceeds the path MTU. </t> | ||||
<t><xref target="RFC7959"/> also defines Size1 and Size2 Options to provid | <t><xref target="RFC7959" format="default"/> also defines Size1 and | |||
e size information about the resource representation in a request and response. | Size2 Options to provide size information about the resource | |||
EST-client and server MAY support Size1 and Size2 Options. </t><!-- A Size1 resp | representation in a request and response. The EST-coaps client and server | |||
onse MAY be parsed by the EST-coaps client as a size indication of the resource | <bcp14>MAY</bcp14> support Size1 and Size2 Options. </t> | |||
in the server Block2 responses or by the server as a request for a size estimate | ||||
by the client. Similarly, the Size2 Option defined in <xref target="RFC7959"/> | ||||
MAY be parsed by the server as an indication of the size of the resource carried | ||||
in Block1 Options and by the client in the 4.13 (Request Entity Too Large) resp | ||||
onse as a maximum request size expected by the server.--> | ||||
<t>Examples of fragmented EST-coaps messages are shown in <xref target="bl | <t>Examples of fragmented EST-coaps messages are shown in <xref target="bl | |||
ockexamples"/>.</t> | ockexamples" format="default"/>.</t> | |||
</section> <!-- Message fragmentation --> | </section> | |||
<section anchor="pending" title="Delayed Responses"> | <section anchor="pending" numbered="true" toc="default"> | |||
<t>Server responses can sometimes be delayed. According to Section 5.2.2 o | <name>Delayed Responses</name> | |||
f | <t>Server responses can sometimes be delayed. According to <xref | |||
<xref target="RFC7252" />, a slow server can acknowledge the request | target="RFC7252" sectionFormat="of" section="5.2.2"/>, a slow server | |||
and respond later with the requested resource representation. In partic | can acknowledge the request and respond later with the requested | |||
ular, | resource representation. In particular, a slow server can respond to | |||
a slow server can respond to an EST-coaps enrollment request with an em | an EST-coaps enrollment request with an empty ACK with code 0.00 | |||
pty ACK with code 0.00, | before sending the certificate to the client after a short delay. If | |||
before sending the certificate to the client after a short delay. If the c | the certificate response is large, the server will need more than one | |||
ertificate | Block2 block to transfer it. </t> | |||
response is large, the server will need more than one Block2 block to t | <t>This situation is shown in <xref target="fig-est-short-wait" | |||
ransfer it. </t> | format="default"/>. The client sends an enrollment request that uses | |||
N1+1 Block1 blocks. The server uses an empty 0.00 ACK to announce the | ||||
delayed response, which is provided later with 2.04 messages | ||||
containing N2+1 Block2 Options. The first 2.04 is a Confirmable | ||||
message that is acknowledged by the client. Onwards, the client | ||||
acknowledges all subsequent Block2 blocks. The notation of <xref | ||||
target="fig-est-short-wait" format="default"/> is explained in <xref | ||||
target="cacertsblock" format="default"/>.</t> | ||||
<figure anchor="fig-est-short-wait"> | ||||
<name>EST-coaps Enrollment with Short Wait</name> | ||||
<t>This | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
situation is shown in <xref target="fig-est-short-wait"/>. The client s | POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) | |||
ends an enrollment | {CSR (frag# 1)} --> | |||
request that uses N1+1 Block1 blocks. The server uses an empty 0.00 ACK | ||||
to announce | ||||
the delayed response which is provided later with 2.04 messages contain | ||||
ing N2+1 Block2 Options. | ||||
The first 2.04 is a confirmable message that is acknowledged by the cli | ||||
ent. | ||||
Onwards, the client acknowledges all subsequent Block2 blocks. The nota | ||||
tion of <xref target = "fig-est-short-wait"/> is explained in <xref target="cace | ||||
rtsblock"/>.</t> | ||||
<figure title="EST-COAP enrollment with short wait" | ||||
anchor="fig-est-short-wait"><artwork> | ||||
<![CDATA[ | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) {CSR (frag# 1)} --> | ||||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
{CSR (frag# 2)} --> | ||||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256) | |||
{CSR (frag# N1+1)}--> | ||||
<-- (0.00 empty ACK) | <-- (0.00 empty ACK) | |||
| | | | |||
... Short delay before the certificate is ready ... | ... Short delay before the certificate is ready ... | |||
| | | | |||
<-- (CON) (1:N1/0/256)(2:0/1/256)(2.04 Changed) {Cert resp (frag# 1)} | <-- (CON) (1:N1/0/256)(2:0/1/256)(2.04 Changed) | |||
(ACK) --> | {Cert resp (frag# 1)} | |||
(ACK) --> | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | |||
<-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | <-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | <-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>If the server is very slow (for example, manual intervention | <t>If the server is very slow (for example, manual intervention is | |||
is required which would take minutes), | required, which would take minutes), it <bcp14>SHOULD</bcp14> respond | |||
it SHOULD respond with an ACK containing response code 5.03 (Service unava | with an ACK containing response code 5.03 (Service unavailable) and a | |||
ilable) and a Max-Age | Max-Age Option to indicate the time the client <bcp14>SHOULD</bcp14> | |||
Option to indicate the time the client SHOULD wait before sending another | wait before sending another request to obtain the content. After a | |||
request to obtain the content. After a delay of Max-Age, | delay of Max-Age, the client <bcp14>SHOULD</bcp14> resend the | |||
the client SHOULD resend the identical CSR to the server. | identical CSR to the server. As long as the server continues to | |||
As long as the server continues to respond with response code 5.03 | respond with response code 5.03 (Service Unavailable) with a Max-Age | |||
(Service Unavailable) with a Max-Age Option, the client | Option, the client will continue to delay for Max-Age and then resend | |||
will continue to delay for Max-Age and then resend the | the enrollment request until the server responds with the certificate | |||
enrollment request until the server | or the client abandons the request due to policy or other reasons. </t> | |||
responds with the certificate or the client abandons the request for po | <t>To demonstrate this scenario, <xref target="fig-est-long-wait" | |||
licy or other reasons. </t> | format="default"/> shows a client sending an enrollment request that | |||
uses N1+1 Block1 blocks to send the CSR to the server. The server | ||||
needs N2+1 Block2 blocks to respond but also needs to take a long | ||||
delay (minutes) to provide the response. Consequently, the server uses | ||||
a 5.03 ACK response with a Max-Age Option. The client waits for a | ||||
period of Max-Age as many times as it receives the same 5.03 response | ||||
and retransmits the enrollment request until it receives a certificate | ||||
in a fragmented 2.04 response. </t> | ||||
<t>To demonstrate this scenario, <xref target="fig-est-long-wait"/> shows | <figure anchor="fig-est-long-wait"> | |||
a client sending an enrollment | <name>EST-coaps Enrollment with Long Wait</name> | |||
request that uses N1+1 Block1 blocks to send the CSR to the server. The | ||||
server needs | ||||
N2+1 Block2 blocks to respond, but also needs to take a long delay (minute | ||||
s) to provide | ||||
the response. Consequently, the server uses a 5.03 ACK response with a Max | ||||
-Age Option. The client | ||||
waits for a period of Max-Age as many times as it receives the same 5.0 | ||||
3 response and retransmits | ||||
the enrollment request until it receives a certificate in a fragmented 2.0 | ||||
4 response. </t> <!-- 2.01 Making 2.04 based on comment from Esko https://githu | ||||
b.com/SanKumar2015/EST-coaps/issues/145#issuecomment-497029846 --> | ||||
<figure title="EST-COAP enrollment with long wait" | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
anchor="fig-est-long-wait"><artwork> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) | |||
<![CDATA[ | {CSR (frag# 1)} --> | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) {CSR (frag# 1)} --> | ||||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
{CSR (frag# 2)} --> | ||||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256) | |||
{CSR (frag# N1+1)}--> | ||||
<-- (ACK) (1:N1/0/256) (5.03 Service Unavailable) (Max-Age) | <-- (ACK) (1:N1/0/256) (5.03 Service Unavailable) (Max-Age) | |||
| | | | |||
| | | | |||
... Client tries again after Max-Age with identical payload ... | ... Client tries again after Max-Age with identical payload ... | |||
| | | | |||
| | | | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:0/1/256){CSR (frag# 1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:0/1/256) | |||
{CSR (frag# 1)}--> | ||||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
{CSR (frag# 2)} --> | ||||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256) | |||
{CSR (frag# N1+1)}--> | ||||
| | | | |||
... Immediate response when certificate is ready ... | ... Immediate response when certificate is ready ... | |||
| | | | |||
<-- (ACK) (1:N1/0/256) (2:0/1/256) (2.04 Changed){Cert resp (frag# 1)} | <-- (ACK) (1:N1/0/256) (2:0/1/256) (2.04 Changed) | |||
{Cert resp (frag# 1)} | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | |||
<-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | <-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | <-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<!-- <t>Comparing <xref target="fig-est-multiple-block"/> with <xref targe | </section> | |||
t="fig-est-long-wait"/> we | ||||
can see all the extra requests in the latter case after the Max-Age wai | ||||
t-time.</t> --> | ||||
</section> <!-- Delayed Responses --> | ||||
<section anchor="serverkey" title="Server-side Key Generation"> | <section anchor="serverkey" numbered="true" toc="default"> | |||
<t>Private keys can be generated on the server to support | <name>Server-Side Key Generation</name> | |||
scenarios where serer-side key generation is needed. Such scenarios | <t>Private keys can be generated on the server to support | |||
scenarios where server-side key generation is needed. Such scenarios | ||||
include those where it is considered more secure to generate the | include those where it is considered more secure to generate the | |||
long-lived, random private key that identifies the client at the server , | long-lived, random private key that identifies the client at the server , | |||
or where the resources spent to generate a random private key at the | or where the resources spent to generate a random private key at the | |||
client are considered scarce, or where the security policy requires | client are considered scarce, or where the security policy requires | |||
that the certificate public and corresponding private keys are | that the certificate public and corresponding private keys are | |||
centrally generated and controlled. As always, it is necessary | centrally generated and controlled. As always, it is necessary | |||
to use proper random numbers in various protocols such as (D)TLS (<xref | to use proper random numbers in various protocols such as (D)TLS (<xref | |||
target="sec-est"/>).</t> | target="sec-est" format="default"/>).</t> | |||
<t>When requesting server-side key generation, the client | ||||
<t>When requesting server-side key generation, the client | ||||
asks for the server or proxy to generate the private key and the certifica te, | asks for the server or proxy to generate the private key and the certifica te, | |||
which are transferred back to the client in the server-side key generation | which are transferred back to the client in the server-side key generation | |||
response. In all respects, the server treats the CSR as it would treat any | response. In all respects, the server treats the CSR as it would treat any | |||
enroll or re-enroll CSR; the only distinction here is that the server | enroll or re-enroll CSR; the only distinction here is that the server | |||
MUST ignore the public key values and signature in the CSR. These | <bcp14>MUST</bcp14> ignore the public key values and signature in the CSR. | |||
are included in the request only to allow re-use of existing | These | |||
are included in the request only to allow reuse of existing | ||||
codebases for generating and parsing such requests.</t> | codebases for generating and parsing such requests.</t> | |||
<t>The client /skg request is for a certificate in a PKCS #7 container | ||||
<t>The client /skg request is for a certificate in a PKCS#7 container | ||||
and private key in two application/multipart-core elements. | and private key in two application/multipart-core elements. | |||
Respectively, an /skc request is for a single application/pkix-cert | Respectively, an /skc request is for a single application/pkix-cert | |||
certificate and a private key. | certificate and a private key. | |||
The private key Content-Format requested by the client is indicated in the | The private key Content-Format requested by the client is indicated in the | |||
PKCS#10 CSR request. If the request contains SMIMECapabilities and | PKCS #10 CSR request. If the request contains SMIMECapabilities and | |||
DecryptKeyIdentifier or AsymmetricDecryptKeyIdentifier the client | DecryptKeyIdentifier or AsymmetricDecryptKeyIdentifier, the client | |||
is expecting Content-Format 280 for the private key. | is expecting Content-Format 280 for the private key. | |||
Then this private key is encrypted symmetrically or asymmetrically as | Then, this private key is encrypted symmetrically or asymmetrically | |||
per <xref target="RFC7030" />. | per <xref target="RFC7030" format="default"/>. | |||
The symmetric key or the asymmetric keypair establishment method is | The symmetric key or the asymmetric keypair establishment method is | |||
out of scope of this specification. | out of scope of this specification. | |||
A /skg or /skc request with a CSR without SMIMECapabilities | ||||
expects an application/multipart-core with an unencrypted PKCS#8 privat | An /skg or /skc request with a CSR without SMIMECapabilities | |||
e | expects an application/multipart-core with an unencrypted PKCS #8 priva | |||
te | ||||
key with Content-Format 284.</t> | key with Content-Format 284.</t> | |||
<t> | ||||
The EST-coaps server-side key generation response is returned with | ||||
Content-Format application/multipart-core <xref | ||||
target="RFC8710" format="default"/> containing | ||||
a CBOR array with four items (<xref target="format" | ||||
format="default"/>). The two representations (each consisting of | ||||
two CBOR array items) do not have to be in a particular order | ||||
since each representation is preceded by its Content-Format ID. | ||||
Depending on the request, the private key can be in unprotected | ||||
PKCS #8 format <xref target="RFC5958" format="default"/> | ||||
(Content-Format 284) or protected inside of CMS SignedData | ||||
(Content-Format 280). The SignedData, placed in the outermost | ||||
container, is signed by the party that generated the private key, | ||||
which may be the EST server or the EST CA. SignedData placed | ||||
within the Enveloped Data does not need additional signing as | ||||
explained in <xref target="RFC7030" sectionFormat="of" | ||||
section="4.4.2"/>. In summary, the symmetrically encrypted key is | ||||
included in the encryptedKey attribute in a KEKRecipientInfo | ||||
structure. In the case where the asymmetric encryption key is | ||||
suitable for transport key operations, the generated private key is | ||||
encrypted with a symmetric key. The symmetric key itself is | ||||
encrypted by the client-defined (in the CSR) asymmetric public key | ||||
and is carried in an encryptedKey attribute in a | ||||
KeyTransRecipientInfo structure. Finally, if the asymmetric | ||||
encryption key is suitable for key agreement, the generated | ||||
private key is encrypted with a symmetric key. The symmetric key | ||||
itself is encrypted by the client defined (in the CSR) asymmetric | ||||
public key and is carried in a recipientEncryptedKeys attribute | ||||
in a KeyAgreeRecipientInfo. </t> | ||||
<t> | <t><xref target="RFC7030" format="default"/> recommends the use of | |||
The EST-coaps server-side key generation response is returned with Co | additional encryption of the returned private key. For the context | |||
ntent-Format | of this specification, clients and servers that choose to support | |||
application/multipart-core <xref target="I-D.ietf-core-multipart- | server-side key generation <bcp14>MUST</bcp14> support unprotected | |||
ct"/> | (PKCS #8) private keys (Content-Format 284). Symmetric or asymmetric | |||
containing a CBOR array with four items (<xref target="format"/>) | encryption of the private key (CMS EnvelopedData, Content-Format | |||
. | 280) <bcp14>SHOULD</bcp14> be supported for deployments where | |||
The two representations (each consisting of two CBOR array items) do no | end-to-end encryption is needed between the client and a | |||
t have to be in a particular order since each representation is | server. Such cases could include architectures where an entity | |||
preceded by its Content-Format ID. | between the client and the CA terminates the DTLS connection | |||
Depending on the request, the private key can be in unprotected P | (Registrar in <xref target="RAfig" format="default"/>). Though | |||
KCS#8 <xref target="RFC5958"/> | <xref target="RFC7030" format="default"/> strongly recommends that | |||
format (Content-Format 284) or protected inside of CMS SignedData | clients request the use of CMS encryption on top of the TLS | |||
(Content-Format 280). The SignedData, placed in the outermost con | channel's protection, this document does not make such a | |||
tainer, is signed by the party that | recommendation; CMS encryption can still be used when mandated by | |||
generated the private key, which may be the EST server or | the use case. </t> | |||
the EST CA. SignedData placed within the Enveloped Data does not | ||||
need additional signing as explained in Section 4.4.2 | ||||
of <xref target="RFC7030" />. In summary, the symmetrically encry | ||||
pted key | ||||
is included in the encryptedKey attribute in a KEKRecipientInfo s | ||||
tructure. | ||||
In the case where the asymmetric encryption key is suitable for t | ||||
ransport key | ||||
operations the generated private key is encrypted with a symmetri | ||||
c key. The | ||||
symmetric key itself is encrypted by the client-defined (in the CSR) asy | ||||
mmetric public key | ||||
and is carried in an encryptedKey attribute in a KeyTransRecipien | ||||
tInfo structure. | ||||
Finally, if the asymmetric encryption key is suitable for key agr | ||||
eement, | ||||
the generated private key is encrypted with a symmetric key. The | ||||
symmetric key itself is encrypted by the client defined (in the C | ||||
SR) asymmetric public key and | ||||
is carried in an recipientEncryptedKeys attribute in a KeyAgreeRe | ||||
cipientInfo. </t> | ||||
<!-- The EnvelopedData is | ||||
returned in the response as an "application/pkcs7-mime" or "application-pkix_ | ||||
cert" part with an | ||||
smime-type parameter of "server-generated-key" and a Content- | ||||
Transfer-Encoding of "Base64". --> | ||||
<t><xref target="RFC7030" /> recommends the use of additional encryptio | </section> | |||
n of the | ||||
returned private key. For the context of this specification, clients an | ||||
d servers | ||||
that choose to support server-side key generation MUST support unprotec | ||||
ted (PKCS#8) | ||||
private keys (Content-Format 284). Symmetric or asymmetric encryption of the | ||||
private key (CMS EnvelopedData, Content-Format 280) SHOULD be supported | ||||
for deployments where end-to-end encryption is needed | ||||
between the client and a server. Such cases could include architectures | ||||
where an entity between the client and the CA terminates the DTLS conne | ||||
ction | ||||
(Registrar in <xref target="RAfig"/>). | ||||
Although <xref target="RFC7030"/> strongly recommends that clients req | ||||
uest the use of CMS encryption on top of the TLS channel's protection, this doc | ||||
ument does not make such a recommendation; CMS encryption can still be used whe | ||||
n mandated by the use-case. </t> | ||||
<!-- Panos: Commented this out. EST mandated two layers of encryption but | ||||
did not say how the extra encryption can be established. It is counter-intuitive | ||||
to say we don't trust the DTLS connection and we require more encryption on top | ||||
of it. Due to how hard it is to establish the keys for the extra encryption and | ||||
that if the DTLS channel is not secure we have bigger problems, I do not agree | ||||
this paragraph should be here. --> | ||||
<!--<t>Following <xref target="RFC7030"/>: "It is strongly RECOMMENDED tha | ||||
t the clients request that the returned private key be afforded the additional s | ||||
ecurity of the Cryptographic Message Syntax (CMS) EnvelopedData in addition to t | ||||
he TLS-provided security to protect against unauthorized disclosure."</t> --> | ||||
</section> <!-- Server-side Key Generation --> | </section> | |||
</section> <!-- protocol design--> | ||||
<section anchor="proxy" title="HTTPS-CoAPS Registrar"> | <section anchor="proxy" numbered="true" toc="default"> | |||
<t>In real-world deployments, the EST server will not always reside within | <name>HTTPS-CoAPS Registrar</name> | |||
the CoAP boundary. The EST server can exist outside the constrained netwo | <t>In real-world deployments, the EST server will not always reside within | |||
rk | the CoAP boundary. The EST server can exist outside the constrained netwo | |||
in which case it will support TLS/HTTP instead of CoAPS. In such environm | rk, | |||
ents | in which case it will support TLS/HTTP instead of CoAPS. In such environm | |||
ents, | ||||
EST-coaps is used by the client within the CoAP boundary and TLS is used to | EST-coaps is used by the client within the CoAP boundary and TLS is used to | |||
transport the EST messages outside the CoAP boundary. A Registrar at the edge | transport the EST messages outside the CoAP boundary. A Registrar at the edge | |||
is required to operate between the CoAP environment and the external HTTP | is required to operate between the CoAP environment and the external HTTP | |||
network as shown in | network as shown in | |||
<xref target="RAfig"/>. </t> | <xref target="RAfig" format="default"/>. </t> | |||
<!-- <t>When not explicitly needed, it is RECOMMENDED to use direct connecti | ||||
ons between EST server and client</t> --> | ||||
<figure align="left" anchor="RAfig" title="EST-coaps-to-HTTPS Registrar a | <figure anchor="RAfig"> | |||
t the CoAP boundary."><artwork><![CDATA[ | <name>EST-coaps-to-HTTPS Registrar at the CoAP Boundary</name> | |||
<artwork name="" type="" align="center" alt=""><![CDATA[ | ||||
Constrained Network | Constrained Network | |||
.------. .----------------------------. | .------. .----------------------------. | |||
| CA | |.--------------------------.| | | CA | |.--------------------------.| | |||
'------' || || | '------' || || | |||
| || || | | || || | |||
.------. HTTP .-----------------. CoAPS .-----------. || | .------. HTTP .------------------. CoAPS .-----------. || | |||
| EST |<------->|EST-coaps-to-HTTPS|<------->| EST Client| || | | EST |<------->|EST-coaps-to-HTTPS|<------->| EST Client| || | |||
|Server|over TLS | Registrar | '-----------' || | |Server|over TLS | Registrar | '-----------' || | |||
'------' '-----------------' || | '------' '------------------' || | |||
|| || | || || | |||
|'--------------------------'| | |'--------------------------'| | |||
'----------------------------' | '----------------------------' | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The EST-coaps-to-HTTPS Registrar MUST terminate EST-coaps downstream and | </figure> | |||
initiate EST connections over TLS upstream. The Registrar MUST authentica | <t>The EST-coaps-to-HTTPS Registrar <bcp14>MUST</bcp14> terminate EST-coap | |||
te | s downstream and | |||
and optionally authorize the client requests while it MUST be authenticat | initiate EST connections over TLS upstream. The Registrar <bcp14>MUST</bc | |||
ed | p14> authenticate | |||
and optionally authorize the client requests while it <bcp14>MUST</bcp14> | ||||
be authenticated | ||||
by the EST server or CA. The trust relationship between the Registrar | by the EST server or CA. The trust relationship between the Registrar | |||
and the EST server SHOULD be pre-established for the Registrar to proxy | and the EST server <bcp14>SHOULD</bcp14> be pre-established for the Regis trar to proxy | |||
these connections on behalf of various clients.</t> | these connections on behalf of various clients.</t> | |||
<t>When enforcing Proof-of-Possession (PoP) linking, the DTLS tls-unique | ||||
value of the (D)TLS session is used to prove that the private key | ||||
corresponding to the public key is in the possession of the client and wa | ||||
s used to | ||||
establish the connection as explained in <xref target="profile7925"/>. | ||||
The PoP linking information is lost between the | ||||
EST-coaps client and the EST server when a Registrar is present. | ||||
The EST server becomes aware of the | ||||
presence of a Registrar from its TLS client certificate that includes | ||||
id-kp-cmcRA <xref target="RFC6402"/> extended key usage extension (EKU). | ||||
As | ||||
explained in Section 3.7 of <xref target="RFC7030"/>, the "EST server SHO | ||||
ULD | ||||
apply an authorization policy consistent with a Registrar client. For exa | ||||
mple, | ||||
it could be configured to accept PoP linking information that does not ma | ||||
tch | ||||
the current TLS session because the authenticated EST client Registrar ha | ||||
s | ||||
verified this information when acting as an EST server".</t> | ||||
<t><xref target="est-uri"/> contains the URI mappings between EST-coaps and | ||||
EST | ||||
that the Registrar MUST adhere to. <xref target="codes"/> of this | ||||
specification and Section 7 of <xref target="RFC8075"/> define the mappin | ||||
gs | ||||
between EST-coaps and HTTP response codes, that determine how the Registr | ||||
ar | ||||
MUST translate CoAP response codes from/to HTTP status codes. The mapping | ||||
from | ||||
CoAP Content-Format to HTTP Content-Type is defined in <xref target="Cont | ||||
ent-Formats"/>. | ||||
Additionally, a conversion from CBOR major type 2 to Base64 encoding MUST | ||||
take | ||||
place at the Registrar. If | ||||
CMS end-to-end encryption is employed for the private key, the encrypted | ||||
CMS EnvelopedData blob MUST be converted at the Registrar to binary CBOR | ||||
type 2 downstream to the client. This is a format conversion that does | ||||
not require decryption of the CMS EnvelopedData.</t> | ||||
<t>A deviation from the mappings in <xref target="est-uri"/> could take p | <t>When enforcing Proof-of-Possession (POP) linking, the tls-unique or | |||
lace if | tls-exporter value of the session for DTLS 1.2 and DTLS 1.3, respectively, | |||
clients that leverage server-side key generation preferred for the enroll | is used to prove that the private key corresponding to the public key is | |||
ed | in the possession of the client and was used to establish the connection | |||
keys to be generated by the Registrar in the case the CA does not | as explained in <xref target="profile7925" format="default"/>. The POP | |||
support server-side key generation. Such a Registrar is responsible | linking information is lost between the EST-coaps client and the EST | |||
for generating a new CSR signed by a new key which will be returned to th | server when a Registrar is present. The EST server becomes aware of the | |||
e | presence of a Registrar from its TLS client certificate that includes | |||
client along with the certificate from the CA. In these cases, the Regist | the id-kp-cmcRA extended key usage (EKU) extension <xref | |||
rar | target="RFC6402" format="default"/>. As explained in <xref | |||
MUST use random number generation with proper entropy. </t> | target="RFC7030" sectionFormat="of" section="3.7"/>, the "EST server | |||
<bcp14>SHOULD</bcp14> apply authorization policy consistent with an RA | ||||
client ... the EST server could be configured to accept POP linking | ||||
information that does not match the current TLS session because the | ||||
authenticated EST client RA has verified this information when acting as | ||||
an EST server".</t> | ||||
<t><xref target="est-uri" format="default"/> contains the URI mappings | ||||
between EST-coaps and EST that the Registrar <bcp14>MUST</bcp14> adhere | ||||
to. <xref target="codes" format="default"/> of this specification and | ||||
<xref target="RFC8075" sectionFormat="of" section="7"/> define the | ||||
mappings between EST-coaps and HTTP response codes that determine how | ||||
the Registrar <bcp14>MUST</bcp14> translate CoAP response codes from/to | ||||
HTTP status codes. The mapping from CoAP Content-Format to HTTP | ||||
Content-Type is defined in <xref target="Content-Formats" | ||||
format="default"/>. Additionally, a conversion from CBOR major type 2 | ||||
to Base64 encoding <bcp14>MUST</bcp14> take place at the Registrar. If | ||||
CMS end-to-end encryption is employed for the private key, the encrypted | ||||
CMS EnvelopedData blob <bcp14>MUST</bcp14> be converted at the Registrar | ||||
to binary CBOR type 2 downstream to the client. This is a format | ||||
conversion that does not require decryption of the CMS | ||||
EnvelopedData.</t> | ||||
<t>A deviation from the mappings in <xref target="est-uri" | ||||
format="default"/> could take place if clients that leverage server-side | ||||
key generation preferred for the enrolled keys to be generated by the | ||||
Registrar in the case the CA does not support server-side key | ||||
generation. Such a Registrar is responsible for generating a new CSR | ||||
signed by a new key that will be returned to the client along with the | ||||
certificate from the CA. In these cases, the Registrar | ||||
<bcp14>MUST</bcp14> use random number generation with proper | ||||
entropy. </t> | ||||
<t>Due to fragmentation of large messages into blocks, an | ||||
EST-coaps-to-HTTP Registrar <bcp14>MUST</bcp14> reassemble the blocks | ||||
before translating the binary content to Base64 and consecutively relay | ||||
the message upstream. </t> | ||||
<t>The EST-coaps-to-HTTP Registrar <bcp14>MUST</bcp14> support resource | ||||
discovery according to the rules in <xref target="discovery" | ||||
format="default"/>. </t> | ||||
<t>Due to fragmentation of large messages into blocks, an EST-coaps-to-HT | ||||
TP | ||||
Registrar MUST reassemble the BLOCKs before translating the binary conten | ||||
t to | ||||
Base64, and consecutively relay the message upstream. </t> | ||||
<t>The EST-coaps-to-HTTP Registrar MUST support resource discovery according | ||||
to the rules in <xref target="discovery"/>. </t><!-- The available actions o | ||||
f the Registrars MUST be | ||||
announced with as many resource paths necessary. --> | ||||
<!-- The discovery of the EST server | ||||
in the HTTP environment follow the rules specified in <xref target="RFC70 | ||||
30"/> --> | ||||
<!-- Next paragraph should be removed because e2e encryption is possible. | ||||
No need for the registrar to decrypt --> | ||||
<!-- <t>When server-side key generation is used, if the private key is pr | ||||
otected using symmetric keys then the Registrar needs to encrypt the private key | ||||
down to the client with one symmetric key and decrypt it from the server with a | ||||
nother. If no private key encryption takes place the Registrar will be able to s | ||||
ee the key as it establishes a separate connection to the server. In the case of | ||||
asymmetrically encrypted private key, the Registrar may not be able to decrypt | ||||
it if the server encrypted it with a public key that corresponds to a private ke | ||||
y that belongs to the client. </t> --> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<name>Parameters</name> | ||||
<t>This section addresses transmission parameters described in Sections | ||||
<xref target="RFC7252" sectionFormat="bare" section="4.7"/> and <xref | ||||
target="RFC7252" sectionFormat="bare" section="4.8"/> of <xref target="RFC | ||||
7252"/>. EST does not | ||||
impose any unique values on the CoAP parameters in <xref | ||||
target="RFC7252" format="default"/>, but the setting of the CoAP | ||||
parameter values may have consequence for the setting of the EST | ||||
parameter values. </t> | ||||
<section title="Parameters"> | ||||
<t>This section addresses transmission parameters described | ||||
in sections 4.7 and 4.8 of <xref target="RFC7252"/>. | ||||
EST does not impose any unique values on the CoAP parameters | ||||
in <xref target="RFC7252"/>, but the setting of the CoAP parameter values | ||||
may have consequence for the setting of the EST parameter values. </t> | ||||
<!-- <figure align="center"><artwork><![CDATA[ | ||||
ACK_TIMEOUT | 2 seconds | | ||||
ACK_RANDOM_FACTOR | 1.5 | | ||||
MAX_RETRANSMIT | 4 | | ||||
NSTART | 1 | | ||||
DEFAULT_LEISURE | 5 seconds | | ||||
PROBING_RATE | 1 byte/second | ]]></artwork></figure> --> | ||||
<!-- using Nexus Certificate Manager with Californium for | ||||
CoAP support, communicating with a ContikiOS and tinyDTLS based | ||||
client, from RISE SICS, --> | ||||
<t> | <t> | |||
Implementations should follow the default CoAP configuration | Implementations should follow the default CoAP configuration | |||
parameters <xref target="RFC7252"/>. | parameters <xref target="RFC7252" format="default"/>. However, | |||
However, depending on the implementation scenario, retransmissions | depending on the implementation scenario, retransmissions and timeouts | |||
and timeouts can also occur on other networking layers, | can also occur on other networking layers, governed by other | |||
governed by other configuration parameters. When a change in a | configuration parameters. When a change in a server parameter has | |||
server parameter has taken place, the parameter values in the communicati | taken place, the parameter values in the communicating endpoints | |||
ng endpoints MUST be adjusted as necessary. Examples of how parameters | <bcp14>MUST</bcp14> be adjusted as necessary. Examples of how | |||
could be adjusted include higher layer congestion protocols, | parameters could be adjusted include higher-layer congestion | |||
provisioning agents and configurations included in firmware updates.</t> | protocols, provisioning agents, and configurations included in | |||
firmware updates.</t> | ||||
<t>Some further comments about some specific parameters, mainly from | ||||
Table 2 in <xref target="RFC7252" format="default"/>, include the followi | ||||
ng: | ||||
</t> | ||||
<t>Some further comments about some specific parameters, mainly from | <dl> | |||
Table 2 in <xref target="RFC7252"/>: | ||||
<list style="symbols"> | ||||
<t>NSTART: A parameter that controls the number of simultaneous | ||||
outstanding interactions that a client maintains to a given server. | ||||
An EST-coaps client is expected to control at most one interaction with | ||||
a given server, which is the default NSTART value | ||||
defined in <xref target="RFC7252"/>.</t> | ||||
<t>DEFAULT_LEISURE: This setting is only relevant in multicast scenarios, | ||||
outside the scope of EST-coaps.</t> | ||||
<t>PROBING_RATE: A parameter which specifies the rate of re-sending | ||||
non-confirmable messages. In the rare situations that non-confirmable m | ||||
essages are used, the default PROBING_RATE value defined in <xref target="RFC725 | ||||
2"/> applies.</t> | ||||
</list></t> | ||||
<t>Finally, the Table 3 parameters in <xref target="RFC7252"/> are mainly | ||||
derived from Table 2. Directly changing parameters on one table would | ||||
affect parameters on the other.</t> | ||||
</section> | ||||
<section anchor="deploy-limit" title = "Deployment limitations"> | ||||
<t>Although EST-coaps paves the way for the utilization of EST by constraine | ||||
d devices in constrained networks, some classes of devices <xref target="RFC7228 | ||||
" /> will not have enough resources to handle the payloads that come with EST-co | ||||
aps. The specification of EST-coaps is intended to ensure that EST works for net | ||||
works of constrained devices that choose to limit their communications stack to | ||||
DTLS/CoAP. It is up to the network designer to decide which devices execute the | ||||
EST protocol and which do not.</t> | ||||
</section> <!-- Deployment limits --> | ||||
<section anchor="iana" title="IANA Considerations"> | <dt>NSTART: | |||
</dt> | ||||
<dd>A parameter that controls the number of simultaneous outstanding | ||||
interactions that a client maintains to a given server. An EST-coaps client | ||||
is expected to control at most one interaction with a given server, which is | ||||
the default NSTART value defined in <xref target="RFC7252" format="default"/>. | ||||
</dd> | ||||
<section anchor="Content-Formats" title="Content-Format Registry"> | <dt>DEFAULT_LEISURE: | |||
<t>Additions to the sub-registry "CoAP Content-Formats", within the "CoRE Pa | </dt> | |||
rameters" | <dd>A setting that is only relevant in multicast scenarios and is outside the sc | |||
registry <xref target="COREparams"/> are specified in <xref target="Conte | ope of | |||
nt-Format"/>. | EST-coaps. | |||
These have been registered provisionally in the IETF Review or IESG Appro | </dd> | |||
val range (256-9999).</t> | ||||
<texttable anchor="Content-Format" title="New CoAP Content-Formats"> | <dt>PROBING_RATE: | |||
<ttcol align="left">HTTP Content-Type</ttcol> | </dt> | |||
<ttcol align="right">ID</ttcol> | <dd>A parameter that specifies the rate of resending Non-confirmable | |||
<ttcol align="left">Reference</ttcol> | messages. In the rare situations that Non-confirmable messages are used, the | |||
default PROBING_RATE value defined in <xref target="RFC7252" | ||||
format="default"/> applies. | ||||
</dd> | ||||
<c>application/pkcs7-mime; smime-type=server-generated-key</c><c>280</c> <c><x | </dl> | |||
ref target="RFC7030"/> <xref target="I-D.ietf-lamps-rfc5751-bis"/> [ThisRFC]</c> | ||||
<c>application/pkcs7-mime; smime-type=certs-only</c> <c>281</c> <c><x | ||||
ref target="I-D.ietf-lamps-rfc5751-bis"/> [ThisRFC]</c> | ||||
<c>application/pkcs8</c> <c>284</c> <c><x | ||||
ref target="RFC5958"/> <xref target="I-D.ietf-lamps-rfc5751-bis"/> [ThisRFC]</c> | ||||
<c>application/csrattrs</c> <c>285</c> <c><x | ||||
ref target="RFC7030"/> </c> | ||||
<c>application/pkcs10</c> <c>286</c> <c><x | ||||
ref target="RFC5967"/> <xref target="I-D.ietf-lamps-rfc5751-bis"/> [ThisRFC]</c> | ||||
<c>application/pkix-cert</c> <c>TBD287</c> < | ||||
c> <xref target="RFC2585"/> [ThisRFC]</c> | ||||
</texttable> | ||||
<t>It is suggested that 287 is allocated to TBD287.</t> | <t>Finally, the Table 3 parameters in <xref target="RFC7252" format="defau | |||
lt"/> are mainly | ||||
derived from Table 2. Directly changing parameters on one table would | ||||
affect parameters on the other.</t> | ||||
</section> | ||||
<section anchor="deploy-limit" numbered="true" toc="default"> | ||||
<name>Deployment Limitations</name> | ||||
<t>Although EST-coaps paves the way for the utilization of EST by constrai | ||||
ned devices in constrained networks, some classes of devices <xref target="RFC72 | ||||
28" format="default"/> will not have enough resources to handle the payloads tha | ||||
t come with EST-coaps. The specification of EST-coaps is intended to ensure that | ||||
EST works for networks of constrained devices that choose to limit their commun | ||||
ications stack to DTLS/CoAP. It is up to the network designer to decide which de | ||||
vices execute the EST protocol and which do not.</t> | ||||
</section> | ||||
</section> <!-- Content-Format registry --> | <section anchor="iana" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
<section anchor="Content-Formats" numbered="true" toc="default"> | ||||
<name>Content-Formats Registry</name> | ||||
<t>IANA has registered the following Content-Formats given in <xref targ | ||||
et="Content-Format" format="default"/> in the "CoAP Content-Formats" subregistry | ||||
within the "CoRE Parameters" | ||||
registry <xref target="CORE-PARAMS" format="default"/>. | ||||
These have been registered in the IETF Review or IESG Approval range (256 | ||||
-9999).</t> | ||||
<section anchor="resource-type" title="Resource Type registry"> | <table anchor="Content-Format" align="center"> | |||
<t>This memo registers new Resource Type (rt=) Link Target Attributes | <name>New CoAP Content-Formats</name> | |||
in the "Resource Type (rt=) Link Target Attribute Values" | <thead> | |||
<tr> | ||||
<th align="left">Media Type</th> | ||||
<th align="right">ID</th> | ||||
<th align="left">Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">application/pkcs7-mime; smime-type=server-generat | ||||
ed-key</td> | ||||
<td align="right">280</td> | ||||
<td align="left"> | ||||
<xref target="RFC7030" format="default"/> <xref target="RFC8551" | ||||
format="default"/> RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">application/pkcs7-mime; smime-type=certs-only</td | ||||
> | ||||
<td align="right">281</td> | ||||
<td align="left"> | ||||
<xref target="RFC8551" format="default"/> RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">application/pkcs8</td> | ||||
<td align="right">284</td> | ||||
<td align="left"> | ||||
<xref target="RFC5958" format="default"/> <xref target="RFC8551" | ||||
format="default"/> RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">application/csrattrs</td> | ||||
<td align="right">285</td> | ||||
<td align="left"> | ||||
<xref target="RFC7030" format="default"/> RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">application/pkcs10</td> | ||||
<td align="right">286</td> | ||||
<td align="left"> | ||||
<xref target="RFC5967" format="default"/> <xref target="RFC8551" | ||||
format="default"/> RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">application/pkix-cert</td> | ||||
<td align="right">287</td> | ||||
<td align="left"> | ||||
<xref target="RFC2585" format="default"/> RFC 9148</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="resource-type" numbered="true" toc="default"> | ||||
<name>Resource Type Registry</name> | ||||
<t>IANA has registered the following Resource Type (rt=) Link Target Att | ||||
ributes | ||||
given in <xref target="rt-table"/> in the "Resource Type (rt=) Link Target At | ||||
tribute Values" | ||||
subregistry under the "Constrained RESTful Environments (CoRE) | subregistry under the "Constrained RESTful Environments (CoRE) | |||
Parameters" registry. | Parameters" registry. | |||
<list style="symbols"> | </t> | |||
<t>rt="ace.est.crts". This resource depicts the support | ||||
of EST get cacerts.</t> | ||||
<t>rt="ace.est.sen". This resource depicts the support | ||||
of EST simple enroll.</t> | ||||
<t>rt="ace.est.sren". This resource depicts the support | ||||
of EST simple reenroll.</t> | ||||
<t>rt="ace.est.att". This resource depicts the support | ||||
of EST get CSR attributes.</t> | ||||
<t>rt="ace.est.skg". This resource depicts the support | ||||
of EST server-side key generation with the returned | ||||
certificate in a PKCS#7 container.</t> | ||||
<t>rt="ace.est.skc". This resource depicts the support | ||||
of EST server-side key generation with the returned | ||||
certificate in application/pkix-cert format.</t> | ||||
</list> | ||||
</t> | ||||
<t></t> | ||||
</section> <!-- Resource Type registry --> | ||||
<section anchor="well-known-uris" title="Well-Known URIs Registry"> | <table anchor="rt-table"> | |||
<t>A new additional reference is requested for | <name>New Resource Type (rt=) Link Target Attributes</name> | |||
the est URI in the Well-Known URIs registry: </t> | <thead> | |||
<texttable> | <tr> | |||
<ttcol align='center'>URI Suffix</ttcol> | <th>Value</th> | |||
<ttcol align='center'>Change Controller</ttcol> | <th>Description</th> | |||
<ttcol align='center'>References</ttcol> | <th>Reference</th> | |||
<ttcol align='center'>Status</ttcol> | </tr> | |||
<ttcol align='center'>Related Information</ttcol> | </thead> | |||
<ttcol align='center'>Date Registered</ttcol> | <tbody> | |||
<ttcol align='center'>Date Modified</ttcol> | <tr> | |||
<c>est</c> | <td>ace.est.crts</td> | |||
<c>IETF</c> | <td>This resource depicts the support of EST GET cacerts.</td> | |||
<c>[RFC7030] [THIS RFC]</c> | <td>RFC 9148</td> | |||
<c>permanent</c> | </tr> | |||
<c></c> | <tr> | |||
<c>2013-08-16</c> | <td>ace.est.sen</td> | |||
<c>[THIS RFC's publication date]</c> | <td>This resource depicts the support of EST simple enroll.</td> | |||
</texttable> | <td>RFC 9148</td> | |||
</section> <!-- Well Known URIs registry --> | </tr> | |||
<tr> | ||||
<td>ace.est.sren</td> | ||||
<td>This resource depicts the support of EST simple reenroll.</td> | ||||
<td>RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ace.est.att</td> | ||||
<td>This resource depicts the support of EST GET CSR attributes.</td> | ||||
<td>RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ace.est.skg</td> | ||||
<td>This resource depicts the support of EST server-side key generation wi | ||||
th the returned certificate in a PKCS #7 container.</td> | ||||
<td>RFC 9148</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ace.est.skc</td> | ||||
<td>This resource depicts the support of EST server-side key generation wi | ||||
th the returned certificate in application/pkix-cert format.</td> | ||||
<td>RFC 9148</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> <!-- IANA consideration --> | <section anchor="well-known-uris" numbered="true" toc="default"> | |||
<name>Well-Known URIs Registry</name> | ||||
<t>IANA has added an additional reference to | ||||
the est URI in the "Well-Known URIs" registry: </t> | ||||
<section anchor="sec" title="Security Considerations"> | <dl> | |||
<section anchor="sec-est" title="EST server considerations"> | <dt>URI Suffix:</dt> <dd>est</dd> | |||
<t>The security considerations of Section 6 of <xref target="RFC7030"/> ar | <dt>Change Controller:</dt> <dd>IETF</dd> | |||
e only | <dt>References:</dt> <dd><xref target="RFC7030" format="default"/> RFC 9148</d | |||
partially valid for the purposes of this document. As HTTP Basic Authen | d> | |||
tication is | <dt>Status:</dt> <dd>permanent</dd> | |||
not supported, the considerations expressed for using passwords do not | <dt>Related Information:</dt> <dd></dd> | |||
apply. The other portions of the | <dt>Date Registered:</dt> <dd>2013-08-16</dd> | |||
security considerations of <xref target="RFC7030"/> continue to apply.</t> | <dt>Date Modified:</dt> <dd>2020-04-29</dd> | |||
</dl> | ||||
</section> | ||||
<t>Modern security protocols require random numbers to be available dur | </section> | |||
ing | ||||
the protocol run, for example for nonces and ephemeral (EC) Diffie-Hellman | ||||
key | ||||
generation. This capability to generate random numbers is also needed | ||||
when the constrained device generates the private key (that corresponds | ||||
to the public key enrolled in the CSR). When server-side key generation is | ||||
used, the constrained device depends on the server to generate the | ||||
private key randomly, but it still needs locally generated random numbers | ||||
for use in security protocols, as explained in Section 12 of <xref targ | ||||
et="RFC7925"/>. | ||||
Additionally, the transport of keys generated at the server is inherent | ||||
ly risky. | ||||
For those deploying server-side key generation, analysis SHOULD be done | ||||
to establish whether server-side key generation increases | ||||
or decreases the probability of digital identity theft.</t> | ||||
<t>It is important to note that, as pointed out in <xref target="PsQs"/>, | <section anchor="sec" numbered="true" toc="default"> | |||
sources contributing to the randomness | <name>Security Considerations</name> | |||
<section anchor="sec-est" numbered="true" toc="default"> | ||||
<name>EST Server Considerations</name> | ||||
<t>The security considerations in <xref target="RFC7030" | ||||
sectionFormat="of" section="6"/> are only partially valid for the | ||||
purposes of this document. As HTTP Basic Authentication is not | ||||
supported, the considerations expressed for using passwords do not | ||||
apply. The other portions of the security considerations in <xref | ||||
target="RFC7030" format="default"/> continue to apply.</t> | ||||
<t>Modern security protocols require random numbers to be available | ||||
during the protocol run, for example, for nonces and ephemeral (EC) | ||||
Diffie-Hellman key generation. This capability to generate random | ||||
numbers is also needed when the constrained device generates the | ||||
private key (that corresponds to the public key enrolled in the | ||||
CSR). When server-side key generation is used, the constrained device | ||||
depends on the server to generate the private key randomly, but it | ||||
still needs locally generated random numbers for use in security | ||||
protocols, as explained in <xref target="RFC7925" | ||||
sectionFormat="of" section="12"/>. Additionally, the transport of keys | ||||
generated at | ||||
the server is inherently risky. For those deploying server-side key | ||||
generation, analysis <bcp14>SHOULD</bcp14> be done to establish | ||||
whether server-side key generation increases or decreases the | ||||
probability of digital identity theft.</t> | ||||
<t>It is important to note that, as pointed out in <xref target="PsQs" f | ||||
ormat="default"/>, sources contributing to the randomness | ||||
pool used to generate random numbers on laptops or desktop PCs, | pool used to generate random numbers on laptops or desktop PCs, | |||
such as mouse movement, timing of keystrokes, or air turbulence | such as mouse movement, timing of keystrokes, or air turbulence | |||
on the movement of hard drive heads, | on the movement of hard drive heads, | |||
are not available on many constrained devices. | are not available on many constrained devices. | |||
Other sources have to be used or dedicated hardware has to be added. | Other sources have to be used or dedicated hardware has to be added. | |||
Selecting hardware for an IoT device that is capable of producing | Selecting hardware for an IoT device that is capable of producing | |||
high-quality random numbers is therefore important <xref target="RSAfact"/ >.</t> | high-quality random numbers is therefore important <xref target="RSA-FACT" format="default"/>.</t> | |||
<!--Remark that the initial /crts request uses the implicit database, and | <t>As discussed in <xref target="RFC7030" sectionFormat="of" | |||
that a compromised implicit database has as consequence that all subsequent exch | section="6"/>, it is | |||
anges from that client are jeopardized. --> | </t> | |||
<t>As discussed in Section 6 of <xref target="RFC7030"/>, it is | ||||
"RECOMMENDED that the Implicit Trust Anchor database used for | <blockquote> | |||
EST server authentication is carefully managed to reduce the chance of | <bcp14>RECOMMENDED</bcp14> that the Implicit Trust Anchor database used for | |||
a | EST server authentication be carefully managed to reduce the chance of a | |||
third-party CA with poor certification practices jeopardizing authentic | third-party CA with poor certification practices from being trusted. | |||
ation. | Disabling the Implicit Trust Anchor database after successfully receiving the | |||
Disabling the Implicit Trust Anchor database after successfuly receivin | Distribution of CA certificates response (<xref target="RFC7030" | |||
g the | format="default" sectionFormat="comma" section="6"/>) | |||
Distribution of CA certificates response (Section 4.1.3) | limits any vulnerability to the first TLS exchange. | |||
limits any risk to the first TLS exchange". Alternatively, in a case | </blockquote> | |||
where a /sen request immediately follows a /crts, a client | ||||
MAY choose to keep the connection authenticated by the Implicit | <t> | |||
TA open for efficiency reasons (<xref target="profile7925"/>). A client | ||||
that interleaves | Alternatively, in a case where a /sen request immediately follows a /crts, a | |||
EST-coaps /crts request with other requests in the same DTLS connection | client <bcp14>MAY</bcp14> choose to keep the connection authenticated by the | |||
SHOULD | Implicit TA open for efficiency reasons (<xref target="profile7925" | |||
revalidate the server certificate chain against the updated Explicit TA | format="default"/>). A client that interleaves EST-coaps /crts request with | |||
from | other requests in the same DTLS connection <bcp14>SHOULD</bcp14> revalidate | |||
the /crts response before proceeding with the subsequent requests. If t | the server certificate chain against the updated Explicit TA from the /crts | |||
he | response before proceeding with the subsequent requests. If the server | |||
server certificate chain does not authenticate against the database, th | certificate chain does not authenticate against the database, the client | |||
e client SHOULD close the | <bcp14>SHOULD</bcp14> close the connection without completing the rest of | |||
connection without completing the rest of the requests. The updated Exp | the requests. The updated Explicit TA <bcp14>MUST</bcp14> continue to be | |||
licit | used in new DTLS connections.</t> | |||
TA MUST continue to be used in new DTLS connections.</t> | <t>In cases where the Initial Device Identifier (IDevID) used to authent | |||
<t>In cases where the IDevID used to authenticate the client is expired th | icate the client is | |||
e server | expired, the server <bcp14>MAY</bcp14> still authenticate the client bec | |||
MAY still authenticate the client because IDevIDs are expected to live | ause IDevIDs | |||
as long | are expected to live as long as the device itself (<xref | |||
as the device itself (<xref target="profile7925"/>). In such occasions, | target="profile7925" format="default"/>). In such occasions, checking | |||
checking | the certificate revocation status or authorizing the client using | |||
the certificate revocation status or authorizing the client using anoth | another method is important for the server to raise its confidence | |||
er method | that the client can be trusted. </t> | |||
is important for the server to raise its confidence that the client can | <t>In accordance with <xref target="RFC7030" format="default"/>, TLS | |||
be trusted. </t> | cipher suites that include "_EXPORT_" and "_DES_" in their names <bcp14> | |||
<t>In accordance with <xref target="RFC7030"/>, TLS cipher suites that | MUST | |||
include | NOT</bcp14> be used. More recommendations for secure use of TLS and DTLS | |||
"_EXPORT_" and "_DES_" in their names MUST NOT be used. More | are | |||
recommendations for secure use of TLS and DTLS are included in <xref ta | included in <xref target="BCP195" format="default"/>.</t> | |||
rget="BCP195"/>.</t><!--<xref target="RFC7525"/>--> | ||||
<t>As described in CMC, Section 6.7 of <xref target="RFC5272"/>, "For keys | <t>As described in Certificate Management over CMS (CMC), <xref | |||
that can | target="RFC5272" sectionFormat="of" section="6.7"/>, "For keys that can | |||
be used as signature keys, signing the certification request with the p | be used as signature keys, signing the certification request with the | |||
rivate key | private key serves as a POP on that key pair". In (D)TLS 1.2, the | |||
serves as a PoP on that key pair". The inclusion of tls-unique in the c | inclusion of tls-unique in the certificate request links the | |||
ertificate | proof-of-possession to the (D)TLS proof-of-identity. This implies but | |||
request links the proof-of-possession to the TLS proof-of-identity. Thi | does not prove that only the authenticated client currently has access | |||
s implies | to the private key.</t> | |||
but does not prove that only the authenticated client currently has acc | ||||
ess to the | <t>What's more, CMC POP linking uses tls-unique as it is defined in | |||
private key.</t> | <xref target="RFC5929" format="default"/>. The 3SHAKE attack <xref | |||
<t>What's more, CMC PoP linking uses tls-unique as it is defined in | target="TRIPLESHAKE" format="default"/> poses a risk by allowing an | |||
<xref target="RFC5929"/>. The 3SHAKE attack <xref target="tripleshake"/ | on-path active attacker to leverage session resumption and | |||
> | renegotiation to inject itself between a client and server even when | |||
poses a risk by allowing a man-in-the-middle to | channel binding is in use. Implementers should use the Extended Master | |||
leverage session resumption and renegotiation to | Secret Extension in DTLS <xref target="RFC7627" format="default"/> to | |||
inject himself between a client and server even when channel binding is | prevent such attacks. In the context of this specification, an | |||
in use. Implementers should use the Extended Master Secret | attacker could invalidate the purpose of the POP linking | |||
Extension in DTLS <xref target="RFC7627"/> to prevent such attacks. | challengePassword in the client request by resuming an EST-coaps | |||
In the context of this specification, an attacker could | connection. Even though the practical risk of such an attack to | |||
invalidate the purpose of the PoP linking ChallengePassword in the clie | EST-coaps is not devastating, we would rather use a more secure | |||
nt | channel-binding mechanism. | |||
request by resuming an EST-coaps connection. Even though the practical | In this specification, we still depend on the tls-unique | |||
risk of such an attack to EST-coaps is not devastating, | mechanism defined in <xref target="RFC5929" format="default"/> for DTLS 1. | |||
we would rather use a more secure channel binding mechanism. | 2 | |||
Such a mechanism could include an updated tls-unique value generation | because a 3SHAKE attack does not expose messages exchanged | |||
like the tls-unique-prf defined in <xref target="I-D.josefsson-sasl-tls | with EST-coaps. But for DTLS 1.3, | |||
-cb"/> | <xref target="I-D.ietf-kitten-tls-channel-bindings-for-tls13" format="d | |||
by using a TLS exporter <xref target="RFC5705"/> in TLS 1.2 or TLS 1.3' | efault"/> | |||
s | is used instead to derive a 32-byte tls-exporter binding | |||
updated exporter (Section 7.5 of <xref target="RFC8446"/>) value in | in place of the tls-unique value in the CSR. That would alleviate the r | |||
place of the tls-unique value in the CSR. Such mechanism | isks | |||
has not been standardized yet. Adopting a channel | from the 3SHAKE attack <xref target="TRIPLESHAKE" format="default"/>. | |||
binding value generated from an exporter would break backwards compatib | </t> | |||
ility for an RA that proxies through to a classic EST server. | ||||
Thus, in this specification we still depend on the tls-unique mechanism | <t>Interpreters of ASN.1 structures should be aware of the use of inval | |||
defined in <xref target="RFC5929"/>, especially since a 3SHAKE attack | id ASN.1 | |||
does not expose messages exchanged with EST-coaps.</t> | ||||
<t>Interpreters of ASN.1 structures should be aware of the use of invalid | ||||
ASN.1 | ||||
length fields and should take appropriate measures to guard against buf fer overflows, | length fields and should take appropriate measures to guard against buf fer overflows, | |||
stack overruns in particular, and malicious content in general.</t> | stack overruns in particular, and malicious content in general.</t> | |||
</section> | ||||
</section> <!-- EST server considerations --> | <section anchor="sec-proxy" numbered="true" toc="default"> | |||
<name>HTTPS-CoAPS Registrar Considerations</name> | ||||
<section anchor="sec-proxy" title="HTTPS-CoAPS Registrar considerations"> | <t>The Registrar proposed in <xref target="proxy" format="default"/> | |||
<t>The Registrar proposed in <xref target="proxy"/> must be deployed with | must be deployed with care and only when direct client-server | |||
care, | connections are not possible. When POP linking is used, the Registrar | |||
and only when direct client-server connections are not possible. When | terminating the DTLS connection establishes a new TLS connection with | |||
PoP linking is used the | the upstream CA. Thus, it is impossible for POP linking to be enforced | |||
Registrar terminating the DTLS connection establishes a new TLS conne | end to end for the EST transaction. The EST server could be configured | |||
ction with the upstream | to accept POP linking information that does not match the current TLS | |||
CA. Thus, it is impossible for PoP linking to be enforced end-to- | session because the authenticated EST Registrar is assumed to have | |||
end for the EST | verified POP linking downstream to the client.</t> | |||
transaction. The EST server could be configured to accept PoP lin | <t>The introduction of an EST-coaps-to-HTTP Registrar assumes the | |||
king information | ||||
that does not match the current TLS session because the authentic | ||||
ated EST Registrar is assumed to have verified PoP linking downstream to the cli | ||||
ent.</t> | ||||
<t>The introduction of an EST-coaps-to-HTTP Registrar assumes the | ||||
client can authenticate | client can authenticate | |||
the Registrar using its implicit or explicit TA database. It also assumes | the Registrar using its implicit or explicit TA database. It also assumes | |||
the Registrar has a trust relationship with the upstream EST serv er in order | the Registrar has a trust relationship with the upstream EST serv er in order | |||
to act on behalf of the clients. When a client uses the Implicit TA | to act on behalf of the clients. When a client uses the Implicit TA | |||
database for certificate validation, it SHOULD confirm if the ser ver | database for certificate validation, it <bcp14>SHOULD</bcp14> con firm if the server | |||
is acting as an RA by the presence of the id-kp-cmcRA EKU | is acting as an RA by the presence of the id-kp-cmcRA EKU | |||
<xref target="RFC6402"/> in the server certificate. </t><!-- If t | <xref target="RFC6402" format="default"/> in the server certifica | |||
he server certificate does not include | te. </t> | |||
the EKU, it is RECOMMENDED that the client includes Identity and | ||||
PoP Information" (<xref target="profile7925"/>) in requests.--> | ||||
<t>In a server-side key generation case, if no end-to-end encryption is | ||||
used, the Registrar may be able see the private key as it acts as a m | ||||
an-in-the-middle. | ||||
Thus, the client puts its trust on the Registrar not exposing the | ||||
private key. </t> | ||||
<t>Clients that leverage server-side key generation without end-to-end enc | ||||
ryption | ||||
of the private key (<xref target="serverkey"/>) have no knowledge | ||||
if the Registrar will be generating the private key and enrolling the | ||||
certificates | ||||
with the CA or if the CA will be responsible for generating the key. | ||||
In such cases, the existence of a Registrar requires the client to pu | ||||
t | ||||
its trust on the registrar when it is generating the | ||||
private key. </t> | ||||
</section> <!-- proxy considerations --> | ||||
</section> <!-- Security considerations --> | ||||
<section anchor="contrib" title="Contributors"> | <t>In a server-side key generation case, if no end-to-end encryption | |||
<!-- Nexus has participated in interoperability tests which resulted in n | is used, the Registrar may be able see the private key as it acts as | |||
ew | a man in the middle. Thus, the client puts its trust on the | |||
insights that were added in the draft. --> | Registrar not exposing the private key. </t> | |||
<t>Martin Furuhed contributed to the EST-coaps specification by providing fe | <t>Clients that leverage server-side key generation without end-to-end | |||
edback | encryption of the private key (<xref target="serverkey" | |||
based on the Nexus EST over CoAPS server implementation that started in 2 | format="default"/>) have no knowledge as to whether the Registrar will b | |||
015. | e | |||
Sandeep Kumar kick-started this specification and was instrumental in | generating the private key and enrolling the certificates with the CA | |||
drawing attention to the importance of the subject. </t> | or if the CA will be responsible for generating the key. In such | |||
</section> <!-- Contributors --> | cases, the existence of a Registrar requires the client to put its | |||
trust on the Registrar when it is generating the private key. </t> | ||||
</section> | ||||
</section> | ||||
<section anchor="ack" title="Acknowledgements"> | ||||
<t>The authors are very grateful to Klaus Hartke for his detailed explanatio | ||||
ns on | ||||
the use of Block with DTLS and his support for the Content-Format specifi | ||||
cation. | ||||
The authors would like to thank Esko Dijk and Michael Verschoor for the v | ||||
aluable | ||||
discussions that helped in shaping the solution. They would also like to | ||||
thank Peter | ||||
Panburana for his feedback on technical details of the solution. Construc | ||||
tive comments | ||||
were received from Benjamin Kaduk, Eliot Lear, Jim Schaad, Hannes Tschofe | ||||
nig, Julien | ||||
Vermillard, John Manuel, Oliver Pfaff, Pete Beal and Carsten Bormann.</t> | ||||
<t>Interop tests were done by Oliver Pfaff, Thomas Werner, Oskar Camezind, | ||||
Bjorn Elmers and Joel Hoglund.</t> | ||||
<t>Robert Moskowitz provided code to create the examples.</t> | ||||
</section> <!-- Acknowledgements --> | ||||
</middle> | </middle> | |||
<back> | ||||
<back> | <displayreference target="I-D.ietf-kitten-tls-channel-bindings-for-tls13" to="T | |||
<references title="Normative References"> | LS13-CHANNEL-BINDINGS"/> | |||
&RFC2119; | <displayreference target="I-D.moskowitz-ecdsa-pki" to="PKI-GUIDE"/> | |||
&RFC2585; | <references> | |||
&RFC5246; | <name>References</name> | |||
&RFC5958; | <references> | |||
&RFC5967; | <name>Normative References</name> | |||
&RFC6347; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC6690; | FC.2119.xml"/> | |||
&RFC7030; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<!--&RFC7049;--> | FC.2585.xml"/> | |||
&RFC7252; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC7925; | FC.5246.xml"/> | |||
&RFC7959; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC8075; | FC.5958.xml"/> | |||
&RFC8174; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC8422; | FC.5967.xml"/> | |||
&RFC8446; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&I-D.ietf-tls-dtls13; | FC.6347.xml"/> | |||
&I-D.ietf-core-multipart-ct; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&I-D.ietf-lamps-rfc5751-bis; | FC.6690.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7030.xml"/> | ||||
</references> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<references title="Informative References"> | FC.7252.xml"/> | |||
<!-- &RFC0791; --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC5272; | FC.7925.xml"/> | |||
<!-- &RFC4944; --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<!--&RFC5273;--> | FC.7959.xml"/> | |||
&RFC5705; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<!-- &RFC6090; --> | FC.8075.xml"/> | |||
&RFC6402; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC7230; | FC.8174.xml"/> | |||
<!-- &RFC7231; --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC7228; | FC.8422.xml"/> | |||
&RFC7251; | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
&RFC7299; | FC.8446.xml"/> | |||
&RFC7627; | ||||
&RFC4919; | <!-- reference.I-D.ietf-tls-dtls13 RFC 9147 | |||
&RFC5929; | --> | |||
&RFC7748; | <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147"> | |||
<!-- &RFC7525; --> | <front> | |||
<!-- &I-D.ietf-anima-bootstrapping-keyinfra; --> | <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title> | |||
&I-D.ietf-tls-dtls-connection-id; | <author initials='E' surname='Rescorla' fullname='Eric Rescorla'/> | |||
<!-- &I-D.draft-ietf-core-resource-directory-19; --> | <author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'/> | |||
&I-D.moskowitz-ecdsa-pki; | <author initials='N' surname='Modadugu' fullname='Nagendra Modadugu'/> | |||
&I-D.josefsson-sasl-tls-cb; | <date month='August' year='2021'/> | |||
<reference anchor="BCP195" target="https://www.rfc-editor.org/info/bcp195">< | </front> | |||
front> | <seriesInfo name="RFC" value="9147"/> | |||
<title>Recommendations for Secure Use of Transport Layer Security (TLS) an | <seriesInfo name="DOI" value="10.17487/RFC9147"/> | |||
d Datagram Transport Layer Security (DTLS)</title> | </reference> | |||
<author initials="Y." surname="Sheffer" fullname="Yaron Sheffer"/> | ||||
<author initials="R." surname="Holz" fullname="Ralph Holz"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<author initials="P." surname="Saint-Andre" fullname="Saint-Andre"/> | FC.8710.xml"/> | |||
<date year="2015" month="May"/> | ||||
</front><seriesInfo name="BCP" value="195"/><seriesInfo name="RFC" value="75 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
25"/></reference> | FC.8551.xml"/> | |||
<reference anchor="ieee802.15.4"> | ||||
<front> | </references> | |||
<title>IEEE Standard 802.15.4-2006</title> | <references> | |||
<author surname="Institute of Electrical and Electronics Engineers"> | <name>Informative References</name> | |||
</author> | ||||
<date month="" year="2006" /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
</front> | 272.xml"/> | |||
</reference> | ||||
<reference anchor="ieee802.1ar"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<front> | FC.6402.xml"/> | |||
<title>IEEE 802.1AR Secure Device Identifier</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<author surname="Institute of Electrical and Electronics Engineers"> | FC.7230.xml"/> | |||
</author> | ||||
<date month="December" year="2009" /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</front> | FC.7228.xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<reference anchor="PsQs"> | FC.7251.xml"/> | |||
<front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<title>Mining Your Ps and Qs: Detection of Widespread Weak Keys in Netwo | FC.7299.xml"/> | |||
rk Devices</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<author surname="Nadia Heninger, Zakir Durumeric, Eric Wustrow, J. Alex | FC.7627.xml"/> | |||
Halderman"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</author> | FC.4919.xml"/> | |||
<date month="August" year="2012" /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</front> | FC.5929.xml"/> | |||
<seriesInfo name="USENIX Security Symposium 2012" value="ISBN 978-93197 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
1-95-9"/> | FC.7748.xml"/> | |||
</reference> | ||||
<reference anchor="tripleshake"> | <!-- I-D.ietf-tls-dtls-connection-id companion document RFC 9146 --> | |||
<front> | <reference anchor="RFC9146" target="https://www.rfc-editor.org/info/rfc9146"> | |||
<title>Triple Handshakes and Cookie Cutters: Breaking and Fixing Authent | <front> | |||
ication over TLS</title> | <title>Connection Identifiers for DTLS 1.2</title> | |||
<author surname="Karthikeyan Bhargavan, Antoine Delignat-Lavaud, Cedric | <author initials='E' surname='Rescorla' fullname='Eric Rescorla' role="editor"/> | |||
Fournet, Alfredo Pironti, Pierre-Yves Strub"> | <author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig' role="edi | |||
tor"/> | ||||
<author initials='T' surname='Fossati' fullname='Thomas Fossati'/> | ||||
<author initials='A' surname='Kraus' fullname='Achim Kraus'/> | ||||
<date month='August' year='2021'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9146"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9146"/> | ||||
</reference> | ||||
<!-- I-D.moskowitz-ecdsa-pki expired 2021 Aug 4. Explicit verion number used to | ||||
get author initials correct. --> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
.moskowitz-ecdsa-pki-10.xml"/> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/refere | ||||
nce.I-D.ietf-kitten-tls-channel-bindings-for-tls13.xml"/> | ||||
<referencegroup anchor="BCP195" target="https://www.rfc-editor.org/info/bcp195"> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7525.xml"/> | ||||
</referencegroup> | ||||
<reference anchor="IEEE802.15.4"> | ||||
<front> | ||||
<title>IEEE 802.15.4-2020 - IEEE Standard for Low-Rate Wireless | ||||
Networks</title> | ||||
<author> | ||||
<organization>IEEE</organization> | ||||
</author> | </author> | |||
<date month="May" year="2014" /> | <date month="May" year="2020"/> | |||
</front> | </front> | |||
<seriesInfo name="IEEE Security and Privacy" value="ISBN 978-1-4799-468 | </reference> | |||
6-0"/> | ||||
</reference> | <reference anchor="IEEE802.1AR"> | |||
<reference anchor="RSAfact"> | <front> | |||
<front> | <title>IEEE Standard for Local and metropolitan area networks - | |||
<title>Factoring RSA keys from certified smart cards: Coppersmith in the | Secure Device Identity</title> | |||
wild</title> | <author> | |||
<author surname="Daniel J. Bernstein1, Yun-An Chang, Chen-Mou Cheng, Li- | <organization>IEEE | |||
Ping Chou, Nadia Heninger, Tanja Lange, Nicko van Someren"> | </organization> | |||
</author> | </author> | |||
<date month="August" year="2013" /> | <date month="December" year="2009"/> | |||
</front> | </front> | |||
<seriesInfo name="Advances in Cryptology - " value="ASIACRYPT 2013"/> | </reference> | |||
</reference> | ||||
<reference anchor="COREparams" target="https://www.iana.org/assignments/core | ||||
-parameters/core-parameters.xhtml"> | ||||
<front> | ||||
<title>Constrained RESTful Environments (CoRE) Parameters</title> | ||||
<author surname="IANA"/> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<section anchor="messagebindings" title="EST messages to EST-coaps"> | <reference anchor="PsQs"> | |||
<t>This section shows similar examples to the ones presented in Appendix A o | <front> | |||
f | <title>Mining Your Ps and Qs: Detection of Widespread Weak Keys in N | |||
<xref target="RFC7030"/>. The payloads in the examples are the hex encode | etwork Devices</title> | |||
d binary, | <author initials="N." surname="Heninger" fullname="Nadia Heninger"/> | |||
generated with 'xxd -p', of the PKI certificates created following | <author initials="Z." surname="Durumeric" fullname="Zakir Durumeric"/> | |||
<xref target="I-D.moskowitz-ecdsa-pki"/>. Hex is used for visualization | <author initials="E." surname="Wustrow" fullname="Eric Wustrow"/> | |||
purposes because a binary representation cannot be rendered well in text. | <author initials="J." surname="Alex Halderman" fullname="J. Alex Halderman"/> | |||
The hexadecimal representations would not be transported in hex, but in b | <date month="August" year="2012"/> | |||
inary. | </front> | |||
The payloads are shown unencrypted. In practice the message content would | <refcontent>USENIX Security Symposium 2012</refcontent> | |||
be | <seriesInfo name="ISBN" value="978-931971-95-9"/> | |||
transferred over an encrypted DTLS channel. </t> | </reference> | |||
<!-- [EDNOTE: No need for these details of how these were generated from | ||||
I-D.moskowitz-ecdsa-pki. ] | <reference anchor="TRIPLESHAKE"> | |||
In particular, the shell scripts from section 4.2 (create root certificat | <front> | |||
e), section 6.2 (Create the 802.1AR intermediate certificate) and section 6.3 (C | <title>Triple Handshakes and Cookie Cutters: Breaking and Fixing Aut | |||
reate an 802.1AR IdevID certificate) have been used. The 802.1AR IdevID certific | hentication over TLS</title> | |||
ate is signed by the 802.1AR intermediate certificate that is signed by the auto | ||||
-signed root certificate.--> | <author initials="B." surname="Bhargavan" fullname="Karthikeyan Bhargavan"/> | |||
<t>The certificate responses included in the examples contain Content-Format | <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavau | |||
281 (application/pkcs7). If the client had requested Content-Format | d"/> | |||
TBD287 (application/pkix-cert) by querying /est/skc, the | <author initials="C." surname="Fournet" fullname="Cedric Fournet"/> | |||
server would respond with a single DER binary certificate in the multipar | <author initials="A." surname="Pironti" fullname="Alfredo Pironti"/> | |||
t-core container.</t> | <author initials="P." surname="Strub" fullname="Pierre-Yves Strub"/> | |||
<t>These examples assume a short resource path of "/est". Even though omi | <date month="May" year="2014"/> | |||
tted | </front> | |||
from the examples for brevity, before making the EST-coaps requests, a cl | <seriesInfo name="ISBN" value="978-1-4799-4686-0"/> | |||
ient | <seriesInfo name="DOI" value="10.1109/SP.2014.14"/> | |||
would learn about the server supported EST-coaps resources with a GET req | </reference> | |||
uest | ||||
for /.well-known/core?rt=ace.est* as explained in <xref target="discovery | <reference anchor="RSA-FACT"> | |||
"/>.</t> | <front> | |||
<t>The corresponding CoAP headers are only shown in <xref target="cacerts"/> | <title>Factoring RSA keys from certified smart cards: Coppersmith in | |||
. | the wild</title> | |||
<author initials="D." surname="Bernstein" fullname="Daniel J. Bernstein"/> | ||||
<author initials="Y." surname="Chang" fullname="Yun-An Chang"/> | ||||
<author initials="C." surname="Cheng" fullname="Chen-Mou Cheng"/> | ||||
<author initials="L." surname="Chou" fullname="Li-Ping Chou"/> | ||||
<author initials="N." surname="Heninger" fullname="Nadia Heninger"/> | ||||
<author initials="T." surname="Lange" fullname="Tanja Lange"/> | ||||
<author initials="N." surname="Someren" fullname="Nicko van Someren"/> | ||||
<date month="August" year="2013"/> | ||||
</front> | ||||
<refcontent>Advances in Cryptology - ASIACRYPT 2013</refcontent> | ||||
</reference> | ||||
<reference anchor="CORE-PARAMS" target="https://www.iana.org/assignments | ||||
/core-parameters/"> | ||||
<front> | ||||
<title>Constrained RESTful Environments (CoRE) Parameters</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="messagebindings" numbered="true" toc="default"> | ||||
<name>EST Messages to EST-coaps</name> | ||||
<t>This section shows similar examples to the ones presented in <xref | ||||
target="RFC7030" sectionFormat="of" section="A"/>. The payloads in the | ||||
examples are the hex-encoded binary, generated with 'xxd -p', of the PKI | ||||
certificates created following <xref target="I-D.moskowitz-ecdsa-pki" | ||||
format="default"/>. Hex is used for visualization purposes because a | ||||
binary representation cannot be rendered well in text. The hexadecimal | ||||
representations would not be transported in hex, but in binary. The | ||||
payloads are shown unencrypted. In practice, the message content would be | ||||
transferred over an encrypted DTLS channel. </t> | ||||
<t>The certificate responses included in the examples contain | ||||
Content-Format 281 (application/pkcs7). If the client had requested | ||||
Content-Format 287 (application/pkix-cert), the server would respond with | ||||
a single DER binary certificate. That certificate would be in a | ||||
multipart-core container specifically in the case of a response to a | ||||
/est/skc query.</t> | ||||
<t>These examples assume a short resource path of "/est". Even though | ||||
omitted from the examples for brevity, before making the EST-coaps | ||||
requests, a client would learn about the server supported EST-coaps | ||||
resources with a GET request for /.well-known/core?rt=ace.est* as | ||||
explained in <xref target="discovery" format="default"/>.</t> | ||||
<t>The corresponding CoAP headers are only shown in <xref target="cacerts" | ||||
format="default"/>. | ||||
Creating CoAP headers is assumed to be generally understood.</t> | Creating CoAP headers is assumed to be generally understood.</t> | |||
<t>The message content breakdown is presented in <xref target="cont_break down"/>.</t> | ||||
<section title="cacerts" anchor="cacerts"> | <t>The message content is presented in plain text in <xref | |||
<t>In EST-coaps, a cacerts message can be:</t> | target="cont_breakdown" format="default"/>.</t> | |||
<figure align="left"><artwork><![CDATA[ | <section anchor="cacerts" numbered="true" toc="default"> | |||
<name>cacerts</name> | ||||
<t>In EST-coaps, a cacerts message can be the following:</t> | ||||
<artwork><![CDATA[ | ||||
GET example.com:9085/est/crts | GET example.com:9085/est/crts | |||
(Accept: 281) | (Accept: 281) | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The corresponding CoAP header fields are shown below. The | ||||
use of block and DTLS are worked out in <xref target= "blockexamples"/> | <t>The corresponding CoAP header fields are shown below. The use of | |||
.</t> | block and DTLS are shown in <xref target="blockexamples" | |||
<figure><artwork> | format="default"/>.</t> | |||
<![CDATA[ Ver = 1 | ||||
<sourcecode type="coap"><![CDATA[ | ||||
Ver = 1 | ||||
T = 0 (CON) | T = 0 (CON) | |||
Code = 0x01 (0.01 is GET) | Code = 0x01 (0.01 is GET) | |||
Token = 0x9a (client generated) | Token = 0x9a (client generated) | |||
Options | Options | |||
Option (Uri-Host) | Option (Uri-Host) | |||
Option Delta = 0x3 (option# 3) | Option Delta = 0x3 (option# 3) | |||
Option Length = 0xB | Option Length = 0xB | |||
Option Value = "example.com" | Option Value = "example.com" | |||
Option (Uri-Port) | Option (Uri-Port) | |||
Option Delta = 0x4 (option# 3+4=7) | Option Delta = 0x4 (option# 3+4=7) | |||
skipping to change at line 1431 ¶ | skipping to change at line 1552 ¶ | |||
Option Value = "est" | Option Value = "est" | |||
Option (Uri-Path) | Option (Uri-Path) | |||
Option Delta = 0x0 (option# 11+0=11) | Option Delta = 0x0 (option# 11+0=11) | |||
Option Length = 0x4 | Option Length = 0x4 | |||
Option Value = "crts" | Option Value = "crts" | |||
Option (Accept) | Option (Accept) | |||
Option Delta = 0x6 (option# 11+6=17) | Option Delta = 0x6 (option# 11+6=17) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Payload = [Empty] | Payload = [Empty] | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>As specified in <xref target="RFC7252" sectionFormat="of" | ||||
section="5.10.1"/>, the Uri-Host and Uri-Port Options can be omitted | ||||
if they coincide with the transport protocol destination address and | ||||
port, respectively.</t> | ||||
<t>As specified in Section 5.10.1 of <xref target="RFC7252"/>, | <t>A 2.05 Content response with a cert in EST-coaps will then be the follo | |||
the Uri-Host and Uri-Port Options can be omitted if they | wing:</t> | |||
coincide with the transport protocol destination address | <artwork><![CDATA[ | |||
and port respectively.</t> | ||||
<!-- | ||||
The Uri-Host and Uri-Port Options can be omitted if they | ||||
coincide with the transport protocol destination address and | ||||
port respectively. Explicit Uri-Host and Uri-Port Options | ||||
are typically used when an endpoint hosts multiple virtual | ||||
servers and uses the Options to route the requests accordingly. | ||||
Alternatively, if a UDP port to a server is blocked, | ||||
someone could send the DTLS packets to a known open port | ||||
on the server and use the Uri-Port to convey the intended port | ||||
he is attempting to reach.--> | ||||
<t>A 2.05 Content response with a cert in EST-coaps will then be </t> | ||||
<figure align="left"><artwork><![CDATA[ | ||||
2.05 Content (Content-Format: 281) | 2.05 Content (Content-Format: 281) | |||
{payload with certificate in binary format} | {payload with certificate in binary format} | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>with CoAP fields </t> | <t>With the following CoAP fields:</t> | |||
<figure><artwork> | ||||
<![CDATA[ | <sourcecode type="coap"><![CDATA[ | |||
Ver = 1 | Ver = 1 | |||
T = 2 (ACK) | T = 2 (ACK) | |||
Code = 0x45 (2.05 Content) | Code = 0x45 (2.05 Content) | |||
Token = 0x9a (copied from request by server) | Token = 0x9a (copied from request by server) | |||
Options | Options | |||
Option (Content-Format) | Option (Content-Format) | |||
Option Delta = 0xC (option# 12) | Option Delta = 0xC (option# 12) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
skipping to change at line 1492 ¶ | skipping to change at line 1603 ¶ | |||
97edb8a0c72ab0d405f05d4fe29b997a14ccce89008313d09666b6ce375c | 97edb8a0c72ab0d405f05d4fe29b997a14ccce89008313d09666b6ce375c | |||
595fcc8e37f8e4354497011be90e56794bd91ad951ab45a3818430818130 | 595fcc8e37f8e4354497011be90e56794bd91ad951ab45a3818430818130 | |||
1d0603551d0e041604141df1208944d77b5f1d9dcb51ee244a523f3ef5de | 1d0603551d0e041604141df1208944d77b5f1d9dcb51ee244a523f3ef5de | |||
301f0603551d230418301680141df1208944d77b5f1d9dcb51ee244a523f | 301f0603551d230418301680141df1208944d77b5f1d9dcb51ee244a523f | |||
3ef5de300f0603551d130101ff040530030101ff300e0603551d0f0101ff | 3ef5de300f0603551d130101ff040530030101ff300e0603551d0f0101ff | |||
040403020106301e0603551d110417301581136365727469667940657861 | 040403020106301e0603551d110417301581136365727469667940657861 | |||
6d706c652e636f6d300a06082a8648ce3d040302034800304502202b891d | 6d706c652e636f6d300a06082a8648ce3d040302034800304502202b891d | |||
d411d07a6d6f621947635ba4c43165296b3f633726f02e51ecf464bd4002 | d411d07a6d6f621947635ba4c43165296b3f633726f02e51ecf464bd4002 | |||
2100b4be8a80d08675f041fbc719acf3b39dedc85dc92b3035868cb2daa8 | 2100b4be8a80d08675f041fbc719acf3b39dedc85dc92b3035868cb2daa8 | |||
f05db196a1003100 | f05db196a1003100 | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>The breakdown of the payload is shown in <xref target="cacertsdis"/>. < | <t>The payload is shown in plain text in <xref target="cacertsdis" | |||
/t> | format="default"/>. </t> | |||
</section> <!-- cacerts --> | </section> | |||
<section title="enroll / reenroll"> | <section numbered="true" toc="default"> | |||
<t> | <name>enroll / reenroll</name> | |||
During the (re-)enroll exchange the EST-coaps client uses a CSR | ||||
(Content-Format 286) request in the POST request payload. | ||||
The Accept option tells the server that the client is expecting | ||||
Content-Format 281 (PKCS#7) in the response. | ||||
As shown in <xref target="enrolldis"/>, the CSR contains a | ||||
ChallengePassword which is used for PoP linking (<xref target="pr | ||||
ofile7925"/>). | ||||
</t> | ||||
<figure align="left"><artwork><![CDATA[ | <t> | |||
During the (re-)enroll exchange, the EST-coaps client uses a CSR | ||||
(Content-Format 286) request in the POST request payload. The | ||||
Accept Option tells the server that the client is expecting | ||||
Content-Format 281 (PKCS #7) in the response. As shown in <xref | ||||
target="enrolldis" format="default"/>, the CSR contains a | ||||
challengePassword, which is used for POP linking (<xref | ||||
target="profile7925" format="default"/>). | ||||
</t> | ||||
<artwork><![CDATA[ | ||||
POST [2001:db8::2:321]:61616/est/sen | POST [2001:db8::2:321]:61616/est/sen | |||
(Token: 0x45) | (Token: 0x45) | |||
(Accept: 281) | (Accept: 281) | |||
(Content-Format: 286) | (Content-Format: 286) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
3082018b30820131020100305c310b3009060355040613025553310b3009 | 3082018b30820131020100305c310b3009060355040613025553310b3009 | |||
skipping to change at line 1530 ¶ | skipping to change at line 1644 ¶ | |||
2a8648ce3d03010703420004c8b421f11c25e47e3ac57123bf2d9fdc494f | 2a8648ce3d03010703420004c8b421f11c25e47e3ac57123bf2d9fdc494f | |||
028bc351cc80c03f150bf50cff958d75419d81a6a245dffae790be95cf75 | 028bc351cc80c03f150bf50cff958d75419d81a6a245dffae790be95cf75 | |||
f602f9152618f816a2b23b5638e59fd9a073303406092a864886f70d0109 | f602f9152618f816a2b23b5638e59fd9a073303406092a864886f70d0109 | |||
0731270c2576437630292a264a4b4a3bc3a2c280c2992f3e3c2e2c3d6b6e | 0731270c2576437630292a264a4b4a3bc3a2c280c2992f3e3c2e2c3d6b6e | |||
7634332323403d204e787e60303b06092a864886f70d01090e312e302c30 | 7634332323403d204e787e60303b06092a864886f70d01090e312e302c30 | |||
2a0603551d1104233021a01f06082b06010505070804a013301106092b06 | 2a0603551d1104233021a01f06082b06010505070804a013301106092b06 | |||
010401b43b0a01040401020304300a06082a8648ce3d0403020348003045 | 010401b43b0a01040401020304300a06082a8648ce3d0403020348003045 | |||
02210092563a546463bd9ecff170d0fd1f2ef0d3d012160e5ee90cffedab | 02210092563a546463bd9ecff170d0fd1f2ef0d3d012160e5ee90cffedab | |||
ec9b9a38920220179f10a3436109051abad17590a09bc87c4dce5453a6fc | ec9b9a38920220179f10a3436109051abad17590a09bc87c4dce5453a6fc | |||
1135a1e84eed754377 | 1135a1e84eed754377 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t> | ||||
<t> | ||||
After verification of the CSR by the server, a 2.04 Changed response | After verification of the CSR by the server, a 2.04 Changed response | |||
with the issued certificate will be returned to the client. | with the issued certificate will be returned to the client. | |||
</t> | </t> | |||
<artwork><![CDATA[ | ||||
<figure align="left"><artwork><![CDATA[ | ||||
2.04 Changed | 2.04 Changed | |||
(Token: 0x45) | (Token: 0x45) | |||
(Content-Format: 281) | (Content-Format: 281) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
3082026e06092a864886f70d010702a082025f3082025b0201013100300b | 3082026e06092a864886f70d010702a082025f3082025b0201013100300b | |||
06092a864886f70d010701a08202413082023d308201e2a0030201020208 | 06092a864886f70d010701a08202413082023d308201e2a0030201020208 | |||
skipping to change at line 1567 ¶ | skipping to change at line 1679 ¶ | |||
c8b421f11c25e47e3ac57123bf2d9fdc494f028bc351cc80c03f150bf50c | c8b421f11c25e47e3ac57123bf2d9fdc494f028bc351cc80c03f150bf50c | |||
ff958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b56 | ff958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b56 | |||
38e59fd9a3818a30818730090603551d1304023000301d0603551d0e0416 | 38e59fd9a3818a30818730090603551d1304023000301d0603551d0e0416 | |||
041496600d8716bf7fd0e752d0ac760777ad665d02a0301f0603551d2304 | 041496600d8716bf7fd0e752d0ac760777ad665d02a0301f0603551d2304 | |||
183016801468d16551f951bfc82a431d0d9f08bc2d205b1160300e060355 | 183016801468d16551f951bfc82a431d0d9f08bc2d205b1160300e060355 | |||
1d0f0101ff0404030205a0302a0603551d1104233021a01f06082b060105 | 1d0f0101ff0404030205a0302a0603551d1104233021a01f06082b060105 | |||
05070804a013301106092b06010401b43b0a01040401020304300a06082a | 05070804a013301106092b06010401b43b0a01040401020304300a06082a | |||
8648ce3d0403020349003046022100c0d81996d2507d693f3c48eaa5ee94 | 8648ce3d0403020349003046022100c0d81996d2507d693f3c48eaa5ee94 | |||
91bda6db214099d98117c63b361374cd86022100a774989f4c321a5cf25d | 91bda6db214099d98117c63b361374cd86022100a774989f4c321a5cf25d | |||
832a4d336a08ad67df20f1506421188a0ade6d349236a1003100 | 832a4d336a08ad67df20f1506421188a0ade6d349236a1003100 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The breakdown of the request and response is shown in | <t>The request and response is shown in plain text in <xref | |||
<xref target="enrolldis"/>.</t> | target="enrolldis" format="default"/>.</t> | |||
<!-- <t>As described in <xref target="pending" />, if | ||||
the server is not able to provide a response | ||||
immediately, it sends an empty ACK with response | ||||
code 5.03 (Service Unavailable) and the Max-Age Option. | ||||
See <xref target="fig-est-long-wait"/> for an example exchange.</ | ||||
t> --> | ||||
</section> <!-- enroll / reenroll --> | ||||
<section anchor="appskg" title="serverkeygen"> | </section> | |||
<t>In a serverkeygen exchange the CoAP POST request looks like </t> | ||||
<figure align="left"><artwork><![CDATA[ | <section anchor="appskg" numbered="true" toc="default"> | |||
<name>serverkeygen</name> | ||||
<t>In a serverkeygen exchange, the CoAP POST request looks like the foll | ||||
owing:</t> | ||||
<artwork><![CDATA[ | ||||
POST 192.0.2.1:8085/est/skg | POST 192.0.2.1:8085/est/skg | |||
(Token: 0xa5) | (Token: 0xa5) | |||
(Accept: 62) | (Accept: 62) | |||
(Content-Format: 286) | (Content-Format: 286) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
3081d03078020100301631143012060355040a0c0b736b67206578616d70 | 3081d03078020100301631143012060355040a0c0b736b67206578616d70 | |||
6c653059301306072a8648ce3d020106082a8648ce3d03010703420004c8 | 6c653059301306072a8648ce3d020106082a8648ce3d03010703420004c8 | |||
b421f11c25e47e3ac57123bf2d9fdc494f028bc351cc80c03f150bf50cff | b421f11c25e47e3ac57123bf2d9fdc494f028bc351cc80c03f150bf50cff | |||
958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b5638 | 958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b5638 | |||
e59fd9a000300a06082a8648ce3d040302034800304502207c553981b1fe | e59fd9a000300a06082a8648ce3d040302034800304502207c553981b1fe | |||
349249d8a3f50a0346336b7dfaa099cf74e1ec7a37a0a760485902210084 | 349249d8a3f50a0346336b7dfaa099cf74e1ec7a37a0a760485902210084 | |||
79295398774b2ff8e7e82abb0c17eaef344a5088fa69fd63ee611850c34b | 79295398774b2ff8e7e82abb0c17eaef344a5088fa69fd63ee611850c34b | |||
0a | 0a | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The response would follow <xref target="RFC8710" format="default"/> a | ||||
<t>The response would follow <xref target="I-D.ietf-core-multipart-ct"/> | nd could look like the following:</t> | |||
and could look like </t> | <artwork><![CDATA[ | |||
<figure align="left"><artwork><![CDATA[ | ||||
2.04 Changed | 2.04 Changed | |||
(Token: 0xa5) | (Token: 0xa5) | |||
(Content-Format: 62) | (Content-Format: 62) | |||
[ The hexadecimal representations below would NOT be transported | [ The hexadecimal representations below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
84 # array(4) | 84 # array(4) | |||
19 011C # unsigned(284) | 19 011C # unsigned(284) | |||
skipping to change at line 1639 ¶ | skipping to change at line 1743 ¶ | |||
3d03010703420004c8b421f11c25e47e3ac57123bf2d9fdc494f028bc351 | 3d03010703420004c8b421f11c25e47e3ac57123bf2d9fdc494f028bc351 | |||
cc80c03f150bf50cff958d75419d81a6a245dffae790be95cf75f602f915 | cc80c03f150bf50cff958d75419d81a6a245dffae790be95cf75f602f915 | |||
2618f816a2b23b5638e59fd9a37b307930090603551d1304023000302c06 | 2618f816a2b23b5638e59fd9a37b307930090603551d1304023000302c06 | |||
096086480186f842010d041f161d4f70656e53534c2047656e6572617465 | 096086480186f842010d041f161d4f70656e53534c2047656e6572617465 | |||
64204365727469666963617465301d0603551d0e0416041496600d8716bf | 64204365727469666963617465301d0603551d0e0416041496600d8716bf | |||
7fd0e752d0ac760777ad665d02a0301f0603551d2304183016801496600d | 7fd0e752d0ac760777ad665d02a0301f0603551d2304183016801496600d | |||
8716bf7fd0e752d0ac760777ad665d02a0300a06082a8648ce3d04030203 | 8716bf7fd0e752d0ac760777ad665d02a0300a06082a8648ce3d04030203 | |||
48003045022100e95bfa25a08976652246f2d96143da39fce0dc4c9b26b9 | 48003045022100e95bfa25a08976652246f2d96143da39fce0dc4c9b26b9 | |||
cce1f24164cc2b12b602201351fd8eea65764e3459d324e4345ff5b2a915 | cce1f24164cc2b12b602201351fd8eea65764e3459d324e4345ff5b2a915 | |||
38c04976111796b3698bf6379ca1003100 | 38c04976111796b3698bf6379ca1003100 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The private key in the response above is without CMS EnvelopedData | ||||
<t>The private key in the response above is without CMS EnvelopedData | and has no additional encryption beyond DTLS (<xref target="serverkey" | |||
and has no additional encryption beyond DTLS (<xref target="serverkey"/ | format="default"/>).</t> | |||
>).</t> | <t>The request and response is shown in plain text in <xref | |||
<t>The breakdown of the request and response is shown | target="disskgrequest" format="default"/>.</t> | |||
in <xref target="disskgrequest"/></t> | </section> | |||
</section> <!-- serverkeygen --> | ||||
<section title="csrattrs"> | <section numbered="true" toc="default"> | |||
<t>Below is a csrattrs exchange </t> | <name>csrattrs</name> | |||
<figure align="left"><artwork><![CDATA[ | <t>The following is a csrattrs exchange:</t> | |||
<artwork><![CDATA[ | ||||
REQ: | REQ: | |||
GET example.com:61616/est/att | GET example.com:61616/est/att | |||
RES: | RES: | |||
2.05 Content | 2.05 Content | |||
(Content-Format: 285) | (Content-Format: 285) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
307c06072b06010101011630220603883701311b131950617273652053455 | 307c06072b06010101011630220603883701311b131950617273652053455 | |||
420617320322e3939392e31206461746106092a864886f70d010907302c06 | 420617320322e3939392e31206461746106092a864886f70d010907302c06 | |||
0388370231250603883703060388370413195061727365205345542061732 | 0388370231250603883703060388370413195061727365205345542061732 | |||
0322e3939392e32206461746106092b240303020801010b06096086480165 | 0322e3939392e32206461746106092b240303020801010b06096086480165 | |||
03040202 | 03040202 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>A 2.05 Content response should contain attributes which are relevant | <t>A 2.05 Content response should contain attributes that are | |||
for the authenticated client. This example is copied from Section A.2 | relevant for the authenticated client. This example is copied from | |||
in <xref target="RFC7030"/>, where the base64 representation is replace | <xref target="RFC7030" sectionFormat="of" section="A.2"/>, where the | |||
d | base64 representation is replaced with a hexadecimal representation of | |||
with a hexadecimal representation of the equivalent binary format. | the equivalent binary format. The EST-coaps server returns attributes | |||
The EST-coaps server returns attributes that the client can ignore | that the client can ignore if they are unknown to the client.</t> | |||
if they are unknown to him.</t> | </section> | |||
</section> <!-- csrattrs --> | ||||
</section> <!-- EST messages to EST-coaps --> | ||||
<section anchor="blockexamples" title="EST-coaps Block message examples"> | </section> | |||
<t>Two examples are presented in this section: | ||||
<list style="numbers"> | <section anchor="blockexamples" numbered="true" toc="default"> | |||
<t>a cacerts exchange shows the use of Block2 and the block headers</t> | <name>EST-coaps Block Message Examples</name> | |||
<t>an enroll exchange shows the Block1 and Block2 size negotiatio | <t>Two examples are presented in this section: | |||
n for request and | </t> | |||
response payloads.</t> | <ol spacing="normal" type="1"> | |||
</list> </t> | <li>A cacerts exchange shows the use of Block2 and the block headers.</l | |||
<t>The payloads are shown unencrypted. In practice the message contents | i> | |||
<li>An enroll exchange shows the Block1 and Block2 size negotiation | ||||
for request and response payloads.</li> | ||||
</ol> | ||||
<t>The payloads are shown unencrypted. In practice, the message contents | ||||
would be binary formatted and transferred over an encrypted DTLS tunnel. | would be binary formatted and transferred over an encrypted DTLS tunnel. | |||
The corresponding CoAP headers are only shown in <xref target="cacertsblo ck"/>. | The corresponding CoAP headers are only shown in <xref target="cacertsblo ck" format="default"/>. | |||
Creating CoAP headers is assumed to be generally known.</t> | Creating CoAP headers is assumed to be generally known.</t> | |||
<section anchor="cacertsblock" numbered="true" toc="default"> | ||||
<name>cacerts</name> | ||||
<section anchor="cacertsblock" title="cacerts"> | <t>This section provides a detailed example of the messages using DTLS | |||
<t>This section provides a detailed example of the messages using DTLS and B | and CoAP Option Block2. The example block length is taken as 64, | |||
LOCK | which gives an SZX value of 2.</t> | |||
option Block2. The example block length is taken as 64 which gives an | <t>The following is an example of a cacerts exchange over DTLS. The | |||
SZX value of 2.</t> | content length of the cacerts response in <xref target="RFC7030" | |||
<t>The following is an example of a cacerts exchange over DTLS. The content | sectionFormat="of" section="A.1"/> contains 639 bytes in binary in | |||
length of | this example. The CoAP message adds around 10 bytes in this example, | |||
the cacerts response in appendix A.1 of <xref target="RFC7030"/> contains | and the DTLS record around 29 bytes. To avoid IP fragmentation, the | |||
639 | CoAP Block Option is used and an MTU of 127 is assumed to stay within | |||
bytes in binary in this example. The CoAP message adds around 10 bytes in | one IEEE 802.15.4 packet. To stay below the MTU of 127, the payload is | |||
this exmple, | split in 9 packets with a payload of 64 bytes each, followed by a | |||
the DTLS record around 29 bytes. To avoid IP fragmentation, the CoAP Bloc | last tenth packet of 63 bytes. The client sends an IPv6 packet | |||
k Option | containing a UDP datagram with DTLS record protection that | |||
is used and an MTU of 127 is assumed to stay within one IEEE 802.15.4 pac | encapsulates a CoAP request 10 times (one fragment of the request per | |||
ket. To stay | block). The server returns an IPv6 packet containing a UDP datagram | |||
below the MTU of 127, the payload is split in 9 packets with a payload of | with the DTLS record that encapsulates the CoAP response. The CoAP | |||
64 bytes | request-response exchange with block option is shown below. Block | |||
each, followed by a last tenth packet of 63 bytes. The client sends an IP | Option is shown in a decomposed way (block-option:NUM/M/size) | |||
v6 packet | indicating the kind of Block Option (2 in this case) followed by a | |||
containing a UDP datagram with DTLS record protection that encapsulates a | colon, and then the block number (NUM), the more bit (M = 0 in Block2 | |||
CoAP | response means it is last block), and block size with exponent | |||
request 10 times (one fragment of the request per block). The server retu | (2<sup>(SZX+4)</sup>) separated by slashes. The Length 64 is used with | |||
rns an IPv6 packet containing a UDP datagram with the | SZX=2. The CoAP Request is sent Confirmable (CON), and the | |||
DTLS record that encapsulates the CoAP response. The CoAP request-respons | Content-Format of the response, even though not shown, is 281 | |||
e exchange with block | (application/pkcs7-mime; smime-type=certs-only). The transfer of the | |||
option is shown below. Block Option is shown in a decomposed way (block-o | 10 blocks with partially filled block NUM=9 is shown below.</t> | |||
ption:NUM/M/size) | ||||
indicating the kind of Block Option (2 in this case) followed by a colon, | <sourcecode type="coap"><![CDATA[ | |||
and then the block | ||||
number (NUM), the more bit (M = 0 in Block2 response means it is last blo | ||||
ck), and block size | ||||
with exponent (2**(SZX+4)) separated by slashes. The Length 64 is used w | ||||
ith SZX=2. The CoAP Request is sent confirmable (CON) and the Content-Format | ||||
of the response, even though not shown, is 281 (application/pkcs7-mime; s | ||||
mime-type=certs-only). | ||||
The transfer of the 10 blocks with partially filled block NUM=9 is shown | ||||
below </t> | ||||
<figure align="left"><artwork><![CDATA[ | ||||
GET example.com:9085/est/crts (2:0/0/64) --> | GET example.com:9085/est/crts (2:0/0/64) --> | |||
<-- (2:0/1/64) 2.05 Content | <-- (2:0/1/64) 2.05 Content | |||
GET example.com:9085/est/crts (2:1/0/64) --> | GET example.com:9085/est/crts (2:1/0/64) --> | |||
<-- (2:1/1/64) 2.05 Content | <-- (2:1/1/64) 2.05 Content | |||
| | | | |||
| | | | |||
| | | | |||
GET example.com:9085/est/crts (2:9/0/64) --> | GET example.com:9085/est/crts (2:9/0/64) --> | |||
<-- (2:9/0/64) 2.05 Content | <-- (2:9/0/64) 2.05 Content | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>The header of the GET request looks like the following:</t> | ||||
<t>The header of the GET request looks like</t> | <sourcecode type="coap"><![CDATA[ | |||
<figure><artwork> | ||||
<![CDATA[ | ||||
Ver = 1 | Ver = 1 | |||
T = 0 (CON) | T = 0 (CON) | |||
Code = 0x01 (0.1 GET) | Code = 0x01 (0.1 GET) | |||
Token = 0x9a (client generated) | Token = 0x9a (client generated) | |||
Options | Options | |||
Option (Uri-Host) | Option (Uri-Host) | |||
Option Delta = 0x3 (option# 3) | Option Delta = 0x3 (option# 3) | |||
Option Length = 0xB | Option Length = 0xB | |||
Option Value = "example.com" | Option Value = "example.com" | |||
Option (Uri-Port) | Option (Uri-Port) | |||
skipping to change at line 1750 ¶ | skipping to change at line 1865 ¶ | |||
Option Value = "est" | Option Value = "est" | |||
Option (Uri-Path)Uri-Path) | Option (Uri-Path)Uri-Path) | |||
Option Delta = 0x0 (option# 11+0=11) | Option Delta = 0x0 (option# 11+0=11) | |||
Option Length = 0x4 | Option Length = 0x4 | |||
Option Value = "crts" | Option Value = "crts" | |||
Option (Accept) | Option (Accept) | |||
Option Delta = 0x6 (option# 11+6=17) | Option Delta = 0x6 (option# 11+6=17) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Payload = [Empty] | Payload = [Empty] | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>The Uri-Host and Uri-Port Options can be omitted if they coincide | ||||
with the transport protocol destination address and port, | ||||
respectively. Explicit Uri-Host and Uri-Port Options are typically | ||||
used when an endpoint hosts multiple virtual servers and uses the | ||||
Options to route the requests accordingly. </t> | ||||
<t>The Uri-Host and Uri-Port Options can be omitted if they | <t>To provide further details on the CoAP headers, the first two and the las | |||
coincide with the transport protocol destination address and | t blocks are | |||
port respectively. Explicit Uri-Host and Uri-Port Options | written out below. The header of the first Block2 response looks like the | |||
are typically used when an endpoint hosts multiple virtual | following:</t> | |||
servers and uses the Options to route the requests accordingly. </t> | ||||
<!-- Alternatively, if a UDP port to a server is blocked, | ||||
someone could send the DTLS packets to a known open port | ||||
on the server and use the Uri-Port to convey the intended port | ||||
he is attempting to reach.--> | ||||
<t>For further detailing the CoAP headers, the first two and the last blocks | <sourcecode type="coap"><![CDATA[ | |||
are | Ver = 1 | |||
written out below. The header of the first Block2 response looks like</t> | ||||
<figure><artwork> | ||||
<![CDATA[ Ver = 1 | ||||
T = 2 (ACK) | T = 2 (ACK) | |||
Code = 0x45 (2.05 Content) | Code = 0x45 (2.05 Content) | |||
Token = 0x9a (copied from request by server) | Token = 0x9a (copied from request by server) | |||
Options | Options | |||
Option | Option | |||
Option Delta = 0xC (option# 12 Content-Format) | Option Delta = 0xC (option# 12 Content-Format) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Option | Option | |||
Option Delta = 0xB (option# 12+11=23 Block2) | Option Delta = 0xB (option# 12+11=23 Block2) | |||
skipping to change at line 1787 ¶ | skipping to change at line 1898 ¶ | |||
Option Value = 0x0A (block#=0, M=1, SZX=2) | Option Value = 0x0A (block#=0, M=1, SZX=2) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
Payload = | Payload = | |||
3082027b06092a864886f70d010702a082026c308202680201013100300b | 3082027b06092a864886f70d010702a082026c308202680201013100300b | |||
06092a864886f70d010701a082024e3082024a308201f0a0030201020209 | 06092a864886f70d010701a082024e3082024a308201f0a0030201020209 | |||
009189bc | 009189bc | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>The header of the second Block2 response looks like the following:</t | ||||
> | ||||
<t>The second Block2:</t> | <sourcecode type="coap"><![CDATA[ | |||
<figure><artwork> | Ver = 1 | |||
<![CDATA[ Ver = 1 | ||||
T = 2 (means ACK) | T = 2 (means ACK) | |||
Code = 0x45 (2.05 Content) | Code = 0x45 (2.05 Content) | |||
Token = 0x9a (copied from request by server) | Token = 0x9a (copied from request by server) | |||
Options | Options | |||
Option | Option | |||
Option Delta = 0xC (option# 12 Content-Format) | Option Delta = 0xC (option# 12 Content-Format) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Option | Option | |||
Option Delta = 0xB (option 12+11=23 Block2) | Option Delta = 0xB (option 12+11=23 Block2) | |||
skipping to change at line 1813 ¶ | skipping to change at line 1924 ¶ | |||
Option Value = 0x1A (block#=1, M=1, SZX=2) | Option Value = 0x1A (block#=1, M=1, SZX=2) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
Payload = | Payload = | |||
df9c99244b300a06082a8648ce3d0403023067310b300906035504061302 | df9c99244b300a06082a8648ce3d0403023067310b300906035504061302 | |||
5553310b300906035504080c024341310b300906035504070c024c413114 | 5553310b300906035504080c024341310b300906035504070c024c413114 | |||
30120603 | 30120603 | |||
]]></sourcecode> | ||||
<t>The header of the tenth and final Block2 response looks like the foll | ||||
owing:</t> | ||||
]]></artwork></figure> | <sourcecode type="coap"><![CDATA[ | |||
Ver = 1 | ||||
<t>The 10th and final Block2:</t> | ||||
<figure><artwork> | ||||
<![CDATA[ Ver = 1 | ||||
T = 2 (means ACK) | T = 2 (means ACK) | |||
Code = 0x45 (2.05 Content) | Code = 0x45 (2.05 Content) | |||
Token = 0x9a (copied from request by server) | Token = 0x9a (copied from request by server) | |||
Options | Options | |||
Option | Option | |||
Option Delta = 0xC (option# 12 Content-Format) | Option Delta = 0xC (option# 12 Content-Format) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Option | Option | |||
Option Delta = 0xB (option# 12+11=23 Block2 ) | Option Delta = 0xB (option# 12+11=23 Block2 ) | |||
skipping to change at line 1840 ¶ | skipping to change at line 1950 ¶ | |||
Option Value = 0x92 (block#=9, M=0, SZX=2) | Option Value = 0x92 (block#=9, M=0, SZX=2) | |||
[ The hexadecimal representation below would NOT be transported | [ The hexadecimal representation below would NOT be transported | |||
in hex, but in binary. Hex is used because a binary representation | in hex, but in binary. Hex is used because a binary representation | |||
cannot be rendered well in text. ] | cannot be rendered well in text. ] | |||
Payload = | Payload = | |||
2ec0b4af52d46f3b7ecc9687ddf267bcec368f7b7f1353272f022047a28a | 2ec0b4af52d46f3b7ecc9687ddf267bcec368f7b7f1353272f022047a28a | |||
e5c7306163b3c3834bab3c103f743070594c089aaa0ac870cd13b902caa1 | e5c7306163b3c3834bab3c103f743070594c089aaa0ac870cd13b902caa1 | |||
003100 | 003100 | |||
]]></artwork></figure> | ]]></sourcecode> | |||
</section> <!-- cacerts block example --> | </section> | |||
<section anchor="enrollblock" title="enroll / reenroll"> | <section anchor="enrollblock" numbered="true" toc="default"> | |||
<t> | <name>enroll / reenroll</name> | |||
In this example, the requested Block2 size of 256 bytes, required by the c | <t> | |||
lient, | In this example, the requested Block2 size of 256 bytes, required by the | |||
is transferred to the server in the very first request message. The blo | client, is transferred to the server in the very first request | |||
ck size | message. The block size of 256 is equal to (2<sup>(SZX+4)</sup>), which | |||
256=(2**(SZX+4)) which gives SZX=4. The notation for block numbering is | gives SZX=4. The notation for block numbering is the same as in <xref | |||
the same | target="cacertsblock" format="default"/>. The header fields and the | |||
as in <xref target="cacertsblock"/>. The header fields and the payload | payload are omitted for brevity. | |||
are | </t> | |||
omitted for brevity. | ||||
</t> | ||||
<figure title="EST-COAP enrollment with multiple blocks" | ||||
anchor="fig-est-multiple-block"><artwork> | ||||
<![CDATA[ | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) {CSR (frag# 1)} --> | <figure anchor="fig-est-multiple-block"> | |||
<name>EST-coaps Enrollment with Multiple Blocks</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:0/1/256) | ||||
{CSR (frag# 1)} --> | ||||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
{CSR (frag# 2)} --> | ||||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:N1/0/256){CSR(frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:N1/0/256) | |||
{CSR(frag# N1+1)}--> | ||||
| | | | |||
...........Immediate response ......... | ...........Immediate response ......... | |||
| | | | |||
<-- (ACK) (1:N1/0/256)(2:0/1/256)(2.04 Changed){Cert resp (frag# 1)} | <-- (ACK) (1:N1/0/256)(2:0/1/256)(2.04 Changed) | |||
{Cert resp (frag# 1)} | ||||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | |||
<-- (ACK) (2:1/1/256)(2.04 Changed) {Cert resp (frag# 2)} | <-- (ACK) (2:1/1/256)(2.04 Changed) | |||
{Cert resp (frag# 2)} | ||||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:321]:61616/est/sen (CON)(2:N2/0/256) --> | POST [2001:db8::2:321]:61616/est/sen (CON)(2:N2/0/256) --> | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | <-- (ACK) (2:N2/0/256) (2.04 Changed) | |||
{Cert resp (frag# N2+1)} | ||||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>N1+1 blocks have been transferred from client to the server and N2+1 bl | <t>N1+1 blocks have been transferred from client to server, and N2+1 blo | |||
ocks have been | cks have been | |||
transferred from server to client.</t> | transferred from server to client.</t> | |||
</section> <!-- enroll block example --> | </section> | |||
</section> <!-- EST-coaps Block message examples --> | ||||
<section anchor="cont_breakdown" title="Message content breakdown"> | </section> | |||
<t>This appendix presents the breakdown of the hexadecimal dumps of the | ||||
binary payloads shown in <xref target="messagebindings"/>. | <section anchor="cont_breakdown" numbered="true" toc="default"> | |||
<name>Message Content Breakdown</name> | ||||
<t>This appendix presents the hexadecimal dumps of the binary payloads | ||||
in plain text shown in <xref target="messagebindings" | ||||
format="default"/>. | ||||
</t> | </t> | |||
<section anchor="cacertsdis" title="cacerts"> | <section anchor="cacertsdis" numbered="true" toc="default"> | |||
<t>The breakdown of cacerts response containing one root CA certificate is | <name>cacerts</name> | |||
</t> | <t>The cacerts response containing one root CA certificate is | |||
<figure align="left"><artwork><![CDATA[ | presented in plain text in the following: </t> | |||
<sourcecode type="asn.1"><![CDATA[ | ||||
Certificate: | Certificate: | |||
Data: | Data: | |||
Version: 3 (0x2) | Version: 3 (0x2) | |||
Serial Number: 831953162763987486 (0xb8bb0fe604f6a1e) | Serial Number: 831953162763987486 (0xb8bb0fe604f6a1e) | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
Issuer: C=US, ST=CA, L=LA, O=Example Inc, | Issuer: C=US, ST=CA, L=LA, O=Example Inc, | |||
OU=certification, CN=Root CA | OU=certification, CN=Root CA | |||
Validity | Validity | |||
Not Before: Jan 31 11:27:03 2019 GMT | Not Before: Jan 31 11:27:03 2019 GMT | |||
Not After : Jan 26 11:27:03 2039 GMT | Not After : Jan 26 11:27:03 2039 GMT | |||
skipping to change at line 1931 ¶ | skipping to change at line 2054 ¶ | |||
CA:TRUE | CA:TRUE | |||
X509v3 Key Usage: critical | X509v3 Key Usage: critical | |||
Certificate Sign, CRL Sign | Certificate Sign, CRL Sign | |||
X509v3 Subject Alternative Name: | X509v3 Subject Alternative Name: | |||
email:certify@example.com | email:certify@example.com | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
30:45:02:20:2b:89:1d:d4:11:d0:7a:6d:6f:62:19:47:63:5b: | 30:45:02:20:2b:89:1d:d4:11:d0:7a:6d:6f:62:19:47:63:5b: | |||
a4:c4:31:65:29:6b:3f:63:37:26:f0:2e:51:ec:f4:64:bd:40: | a4:c4:31:65:29:6b:3f:63:37:26:f0:2e:51:ec:f4:64:bd:40: | |||
02:21:00:b4:be:8a:80:d0:86:75:f0:41:fb:c7:19:ac:f3:b3: | 02:21:00:b4:be:8a:80:d0:86:75:f0:41:fb:c7:19:ac:f3:b3: | |||
9d:ed:c8:5d:c9:2b:30:35:86:8c:b2:da:a8:f0:5d:b1:96 | 9d:ed:c8:5d:c9:2b:30:35:86:8c:b2:da:a8:f0:5d:b1:96 | |||
]]></artwork></figure> | ]]></sourcecode> | |||
</section> | ||||
</section> <!-- cacerts payload breakdown --> | ||||
<section anchor="enrolldis" title="enroll / reenroll"> | ||||
<t>The breakdown of the enrollment request is </t> | ||||
<figure align="left"><artwork><![CDATA[ | <section anchor="enrolldis" numbered="true" toc="default"> | |||
<name>enroll / reenroll</name> | ||||
<t>The enrollment request is presented in plain text in the | ||||
following:</t> | ||||
<sourcecode type="asn.1"><![CDATA[ | ||||
Certificate Request: | Certificate Request: | |||
Data: | Data: | |||
Version: 0 (0x0) | Version: 0 (0x0) | |||
Subject: C=US, ST=CA, L=LA, O=example Inc, | Subject: C=US, ST=CA, L=LA, O=example Inc, | |||
OU=IoT/serialNumber=Wt1234 | OU=IoT/serialNumber=Wt1234 | |||
Subject Public Key Info: | Subject Public Key Info: | |||
Public Key Algorithm: id-ecPublicKey | Public Key Algorithm: id-ecPublicKey | |||
Public-Key: (256 bit) | Public-Key: (256 bit) | |||
pub: | pub: | |||
04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | 04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | |||
9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | 9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | |||
0c:ff:95:8d:75:41:9d:81:a6:a2:45:df:fa:e7:90: | 0c:ff:95:8d:75:41:9d:81:a6:a2:45:df:fa:e7:90: | |||
be:95:cf:75:f6:02:f9:15:26:18:f8:16:a2:b2:3b: | be:95:cf:75:f6:02:f9:15:26:18:f8:16:a2:b2:3b: | |||
56:38:e5:9f:d9 | 56:38:e5:9f:d9 | |||
ASN1 OID: prime256v1 | ASN1 OID: prime256v1 | |||
NIST CURVE: P-256 | NIST CURVE: P-256 | |||
Attributes: | Attributes: | |||
challengePassword: <256-bit PoP linking value> | challengePassword: <256-bit POP linking value> | |||
Requested Extensions: | Requested Extensions: | |||
X509v3 Subject Alternative Name: | X509v3 Subject Alternative Name: | |||
othername:<unsupported> | othername:<unsupported> | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
30:45:02:21:00:92:56:3a:54:64:63:bd:9e:cf:f1:70:d0:fd: | 30:45:02:21:00:92:56:3a:54:64:63:bd:9e:cf:f1:70:d0:fd: | |||
1f:2e:f0:d3:d0:12:16:0e:5e:e9:0c:ff:ed:ab:ec:9b:9a:38: | 1f:2e:f0:d3:d0:12:16:0e:5e:e9:0c:ff:ed:ab:ec:9b:9a:38: | |||
92:02:20:17:9f:10:a3:43:61:09:05:1a:ba:d1:75:90:a0:9b: | 92:02:20:17:9f:10:a3:43:61:09:05:1a:ba:d1:75:90:a0:9b: | |||
c8:7c:4d:ce:54:53:a6:fc:11:35:a1:e8:4e:ed:75:43:77 | c8:7c:4d:ce:54:53:a6:fc:11:35:a1:e8:4e:ed:75:43:77 | |||
]]></sourcecode> | ||||
]]></artwork></figure> | <t>The CSR contains a challengePassword, which is used for POP linking | |||
(<xref target="profile7925" format="default"/>). The CSR also contains | ||||
<t>The CSR contains a ChallengePassword which is used for | an id-on-hardwareModuleName hardware identifier to customize the | |||
PoP linking (<xref target="profile7925"/>). The CSR also contains | returned certificate to the requesting device (See <xref | |||
an id-on-hardwareModuleName hardware identifier to customize the | target="RFC7299" format="default"/> and <xref | |||
returned certificate to the requesting device (See <xref target ="RFC7299"/> and | target="I-D.moskowitz-ecdsa-pki" format="default"/>).</t> | |||
<xref target="I-D.moskowitz-ecdsa-pki"/>).</t> | <t>The issued certificate presented in plain text in the following:</t> | |||
<sourcecode type="asn.1"><![CDATA[ | ||||
<t>The breakdown of the issued certificate is </t> | ||||
<figure align="left"><artwork><![CDATA[ | ||||
Certificate: | Certificate: | |||
Data: | Data: | |||
Version: 3 (0x2) | Version: 3 (0x2) | |||
Serial Number: 9112578475118446130 (0x7e7661d7b54e4632) | Serial Number: 9112578475118446130 (0x7e7661d7b54e4632) | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
Issuer: C=US, ST=CA, O=Example Inc, | Issuer: C=US, ST=CA, O=Example Inc, | |||
OU=certification, CN=802.1AR CA | OU=certification, CN=802.1AR CA | |||
Validity | Validity | |||
Not Before: Jan 31 11:29:16 2019 GMT | Not Before: Jan 31 11:29:16 2019 GMT | |||
Not After : Dec 31 23:59:59 9999 GMT | Not After : Dec 31 23:59:59 9999 GMT | |||
skipping to change at line 2017 ¶ | skipping to change at line 2138 ¶ | |||
X509v3 Key Usage: critical | X509v3 Key Usage: critical | |||
Digital Signature, Key Encipherment | Digital Signature, Key Encipherment | |||
X509v3 Subject Alternative Name: | X509v3 Subject Alternative Name: | |||
othername:<unsupported> | othername:<unsupported> | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
30:46:02:21:00:c0:d8:19:96:d2:50:7d:69:3f:3c:48:ea:a5: | 30:46:02:21:00:c0:d8:19:96:d2:50:7d:69:3f:3c:48:ea:a5: | |||
ee:94:91:bd:a6:db:21:40:99:d9:81:17:c6:3b:36:13:74:cd: | ee:94:91:bd:a6:db:21:40:99:d9:81:17:c6:3b:36:13:74:cd: | |||
86:02:21:00:a7:74:98:9f:4c:32:1a:5c:f2:5d:83:2a:4d:33: | 86:02:21:00:a7:74:98:9f:4c:32:1a:5c:f2:5d:83:2a:4d:33: | |||
6a:08:ad:67:df:20:f1:50:64:21:18:8a:0a:de:6d:34:92:36 | 6a:08:ad:67:df:20:f1:50:64:21:18:8a:0a:de:6d:34:92:36 | |||
]]></artwork></figure> | ]]></sourcecode> | |||
</section> | ||||
</section> <!-- Re-enroll message breakdown --> | ||||
<section anchor="disskgrequest" title="serverkeygen"> | <section anchor="disskgrequest" numbered="true" toc="default"> | |||
<t>The following is the breakdown of the server-side key generation request | <name>serverkeygen</name> | |||
.</t> | <t>The following is the server-side key generation request presented in | |||
<figure align="left"><artwork><![CDATA[ | plain text:</t> | |||
<sourcecode type="asn.1"><![CDATA[ | ||||
Certificate Request: | Certificate Request: | |||
Data: | Data: | |||
Version: 0 (0x0) | Version: 0 (0x0) | |||
Subject: O=skg example | Subject: O=skg example | |||
Subject Public Key Info: | Subject Public Key Info: | |||
Public Key Algorithm: id-ecPublicKey | Public Key Algorithm: id-ecPublicKey | |||
Public-Key: (256 bit) | Public-Key: (256 bit) | |||
pub: | pub: | |||
04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | 04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | |||
9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | 9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | |||
skipping to change at line 2046 ¶ | skipping to change at line 2167 ¶ | |||
56:38:e5:9f:d9 | 56:38:e5:9f:d9 | |||
ASN1 OID: prime256v1 | ASN1 OID: prime256v1 | |||
NIST CURVE: P-256 | NIST CURVE: P-256 | |||
Attributes: | Attributes: | |||
a0:00 | a0:00 | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
30:45:02:20:7c:55:39:81:b1:fe:34:92:49:d8:a3:f5:0a:03: | 30:45:02:20:7c:55:39:81:b1:fe:34:92:49:d8:a3:f5:0a:03: | |||
46:33:6b:7d:fa:a0:99:cf:74:e1:ec:7a:37:a0:a7:60:48:59: | 46:33:6b:7d:fa:a0:99:cf:74:e1:ec:7a:37:a0:a7:60:48:59: | |||
02:21:00:84:79:29:53:98:77:4b:2f:f8:e7:e8:2a:bb:0c:17: | 02:21:00:84:79:29:53:98:77:4b:2f:f8:e7:e8:2a:bb:0c:17: | |||
ea:ef:34:4a:50:88:fa:69:fd:63:ee:61:18:50:c3:4b:0a | ea:ef:34:4a:50:88:fa:69:fd:63:ee:61:18:50:c3:4b:0a | |||
]]></artwork></figure> | ]]></sourcecode> | |||
<t>The following is the private key content of the server-side key | ||||
<t>Following is the breakdown of the private key content | generation response presented in plain text: </t> | |||
of the server-side key generation response. </t> | ||||
<figure align="left"><artwork><![CDATA[ | <artwork><![CDATA[ | |||
Private-Key: (256 bit) | Private-Key: (256 bit) | |||
priv: | priv: | |||
61:33:6a:86:ac:6e:7a:f4:a9:6f:63:28:30:ad:4e: | 61:33:6a:86:ac:6e:7a:f4:a9:6f:63:28:30:ad:4e: | |||
6a:a0:83:76:79:20:60:94:d7:67:9a:01:ca:8c:6f: | 6a:a0:83:76:79:20:60:94:d7:67:9a:01:ca:8c:6f: | |||
0c:37 | 0c:37 | |||
pub: | pub: | |||
04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | 04:c8:b4:21:f1:1c:25:e4:7e:3a:c5:71:23:bf:2d: | |||
9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | 9f:dc:49:4f:02:8b:c3:51:cc:80:c0:3f:15:0b:f5: | |||
0c:ff:95:8d:75:41:9d:81:a6:a2:45:df:fa:e7:90: | 0c:ff:95:8d:75:41:9d:81:a6:a2:45:df:fa:e7:90: | |||
be:95:cf:75:f6:02:f9:15:26:18:f8:16:a2:b2:3b: | be:95:cf:75:f6:02:f9:15:26:18:f8:16:a2:b2:3b: | |||
56:38:e5:9f:d9 | 56:38:e5:9f:d9 | |||
ASN1 OID: prime256v1 | ASN1 OID: prime256v1 | |||
NIST CURVE: P-256 | NIST CURVE: P-256 | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>The following is the certificate in the server-side key generation | ||||
<t>The following is the breakdown of the certificate | response payload presented in plain text:</t> | |||
in the server-side key generation response payload.</t> | ||||
<figure align="left"><artwork><![CDATA[ | <sourcecode type="asn.1"><![CDATA[ | |||
Certificate: | Certificate: | |||
Data: | Data: | |||
Version: 3 (0x2) | Version: 3 (0x2) | |||
Serial Number: | Serial Number: | |||
b3:31:3e:8f:3f:c9:53:8e | b3:31:3e:8f:3f:c9:53:8e | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
Issuer: O=skg example | Issuer: O=skg example | |||
Validity | Validity | |||
Not Before: Sep 4 07:44:03 2019 GMT | Not Before: Sep 4 07:44:03 2019 GMT | |||
Not After : Aug 30 07:44:03 2039 GMT | Not After : Aug 30 07:44:03 2039 GMT | |||
skipping to change at line 2109 ¶ | skipping to change at line 2228 ¶ | |||
96:60:0D:87:16:BF:7F:D0:E7:52:D0:AC:76:07:77:AD:66:5D:02:A0 | 96:60:0D:87:16:BF:7F:D0:E7:52:D0:AC:76:07:77:AD:66:5D:02:A0 | |||
X509v3 Authority Key Identifier: | X509v3 Authority Key Identifier: | |||
keyid: | keyid: | |||
96:60:0D:87:16:BF:7F:D0:E7:52:D0:AC:76:07:77:AD:66:5D:02:A0 | 96:60:0D:87:16:BF:7F:D0:E7:52:D0:AC:76:07:77:AD:66:5D:02:A0 | |||
Signature Algorithm: ecdsa-with-SHA256 | Signature Algorithm: ecdsa-with-SHA256 | |||
30:45:02:21:00:e9:5b:fa:25:a0:89:76:65:22:46:f2:d9:61: | 30:45:02:21:00:e9:5b:fa:25:a0:89:76:65:22:46:f2:d9:61: | |||
43:da:39:fc:e0:dc:4c:9b:26:b9:cc:e1:f2:41:64:cc:2b:12: | 43:da:39:fc:e0:dc:4c:9b:26:b9:cc:e1:f2:41:64:cc:2b:12: | |||
b6:02:20:13:51:fd:8e:ea:65:76:4e:34:59:d3:24:e4:34:5f: | b6:02:20:13:51:fd:8e:ea:65:76:4e:34:59:d3:24:e4:34:5f: | |||
f5:b2:a9:15:38:c0:49:76:11:17:96:b3:69:8b:f6:37:9c | f5:b2:a9:15:38:c0:49:76:11:17:96:b3:69:8b:f6:37:9c | |||
]]></artwork></figure> | ]]></sourcecode> | |||
</section> <!-- serverkey generation breakdown --> | </section> | |||
</section> <!-- Message Content Brakdown --> | </section> | |||
</back> | <section anchor="ack" numbered="false" toc="default"> | |||
<name>Acknowledgements</name> | ||||
<t>The authors are very grateful to <contact fullname="Klaus Hartke"/> | ||||
for his detailed explanations on the use of Block with DTLS and his | ||||
support for the Content-Format specification. The authors would like to | ||||
thank <contact fullname="Esko Dijk"/> and <contact fullname="Michael | ||||
Verschoor"/> for the valuable discussions that helped in shaping the | ||||
solution. They would also like to thank <contact fullname="Peter | ||||
Panburana"/> for his feedback on technical details of the | ||||
solution. Constructive comments were received from <contact | ||||
fullname="Benjamin Kaduk"/>, <contact fullname="Eliot Lear"/>, <contact | ||||
fullname="Jim Schaad"/>, <contact fullname="Hannes Tschofenig"/>, | ||||
<contact fullname="Julien Vermillard"/>, <contact fullname="John | ||||
Manuel"/>, <contact fullname="Oliver Pfaff"/>, <contact fullname="Pete | ||||
Beal"/>, and <contact fullname="Carsten Bormann"/>.</t> | ||||
<t>Interop tests were done by <contact fullname="Oliver Pfaff"/>, | ||||
<contact fullname="Thomas Werner"/>, <contact fullname="Oskar Camezind"/>, | ||||
<contact fullname="Bjorn Elmers"/>, and <contact fullname="Joel Hoglund"/ | ||||
>.</t> | ||||
<t><contact fullname="Robert Moskowitz"/> provided code to create the exam | ||||
ples.</t> | ||||
</section> | ||||
<section anchor="contrib" numbered="false" toc="default"> | ||||
<name>Contributors</name> | ||||
<t><contact fullname="Martin Furuhed"/> contributed to the EST-coaps | ||||
specification by providing feedback based on the Nexus EST-over-CoAPS | ||||
server implementation that started in 2015. <contact fullname="Sandeep | ||||
Kumar"/> kick-started this specification and was instrumental in drawing | ||||
attention to the importance of the subject. </t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 211 change blocks. | ||||
1840 lines changed or deleted | 1629 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |