rfc9148.original | rfc9148.txt | |||
---|---|---|---|---|
ACE P. van der Stok | Internet Engineering Task Force (IETF) P. van der Stok | |||
Internet-Draft Consultant | Request for Comments: 9148 Consultant | |||
Intended status: Standards Track P. Kampanakis | Category: Standards Track P. Kampanakis | |||
Expires: July 9, 2020 Cisco Systems | ISSN: 2070-1721 Cisco Systems | |||
M. Richardson | M. Richardson | |||
SSW | SSW | |||
S. Raza | S. Raza | |||
RISE SICS | RISE Research Institutes of Sweden | |||
January 6, 2020 | March 2022 | |||
EST over secure CoAP (EST-coaps) | EST-coaps: Enrollment over Secure Transport with the Secure Constrained | |||
draft-ietf-ace-coap-est-18 | Application Protocol | |||
Abstract | Abstract | |||
Enrollment over Secure Transport (EST) is used as a certificate | Enrollment over Secure Transport (EST) is used as a certificate | |||
provisioning protocol over HTTPS. Low-resource devices often use the | provisioning protocol over HTTPS. Low-resource devices often use the | |||
lightweight Constrained Application Protocol (CoAP) for message | lightweight Constrained Application Protocol (CoAP) for message | |||
exchanges. This document defines how to transport EST payloads over | exchanges. This document defines how to transport EST payloads over | |||
secure CoAP (EST-coaps), which allows constrained devices to use | secure CoAP (EST-coaps), which allows constrained devices to use | |||
existing EST functionality for provisioning certificates. | existing EST functionality for provisioning certificates. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on July 9, 2020. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9148. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Revised BSD License text as described in Section 4.e of the | |||
the Trust Legal Provisions and are provided without warranty as | Trust Legal Provisions and are provided without warranty as described | |||
described in the Simplified BSD License. | in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. DTLS and Conformance to RFC 7925 Profiles | |||
4. DTLS and conformance to RFC7925 profiles . . . . . . . . . . 7 | 4. Protocol Design | |||
5. Protocol Design . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Discovery and URIs | |||
5.1. Discovery and URIs . . . . . . . . . . . . . . . . . . . 10 | 4.2. Mandatory/Optional EST Functions | |||
5.2. Mandatory/optional EST Functions . . . . . . . . . . . . 13 | 4.3. Payload Formats | |||
5.3. Payload formats . . . . . . . . . . . . . . . . . . . . . 13 | 4.4. Message Bindings | |||
5.4. Message Bindings . . . . . . . . . . . . . . . . . . . . 15 | 4.5. CoAP Response Codes | |||
5.5. CoAP response codes . . . . . . . . . . . . . . . . . . . 15 | 4.6. Message Fragmentation | |||
5.6. Message fragmentation . . . . . . . . . . . . . . . . . . 16 | 4.7. Delayed Responses | |||
5.7. Delayed Responses . . . . . . . . . . . . . . . . . . . . 17 | 4.8. Server-Side Key Generation | |||
5.8. Server-side Key Generation . . . . . . . . . . . . . . . 19 | 5. HTTPS-CoAPS Registrar | |||
6. HTTPS-CoAPS Registrar . . . . . . . . . . . . . . . . . . . . 21 | 6. Parameters | |||
7. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 7. Deployment Limitations | |||
8. Deployment limitations . . . . . . . . . . . . . . . . . . . 23 | 8. IANA Considerations | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 8.1. Content-Formats Registry | |||
9.1. Content-Format Registry . . . . . . . . . . . . . . . . . 24 | 8.2. Resource Type Registry | |||
9.2. Resource Type registry . . . . . . . . . . . . . . . . . 24 | 8.3. Well-Known URIs Registry | |||
9.3. Well-Known URIs Registry . . . . . . . . . . . . . . . . 25 | 9. Security Considerations | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 9.1. EST Server Considerations | |||
10.1. EST server considerations . . . . . . . . . . . . . . . 25 | 9.2. HTTPS-CoAPS Registrar Considerations | |||
10.2. HTTPS-CoAPS Registrar considerations . . . . . . . . . . 27 | 10. References | |||
11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 28 | 10.1. Normative References | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | 10.2. Informative References | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | Appendix A. EST Messages to EST-coaps | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 28 | A.1. cacerts | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 30 | A.2. enroll / reenroll | |||
Appendix A. EST messages to EST-coaps . . . . . . . . . . . . . 32 | A.3. serverkeygen | |||
A.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 33 | A.4. csrattrs | |||
A.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 35 | Appendix B. EST-coaps Block Message Examples | |||
A.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 37 | B.1. cacerts | |||
A.4. csrattrs . . . . . . . . . . . . . . . . . . . . . . . . 39 | B.2. enroll / reenroll | |||
Appendix B. EST-coaps Block message examples . . . . . . . . . . 40 | Appendix C. Message Content Breakdown | |||
B.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 40 | C.1. cacerts | |||
B.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 44 | C.2. enroll / reenroll | |||
Appendix C. Message content breakdown . . . . . . . . . . . . . 45 | C.3. serverkeygen | |||
C.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 45 | Acknowledgements | |||
C.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 46 | Contributors | |||
C.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 48 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
1. Change Log | ||||
EDNOTE: Remove this section before publication | ||||
-18 | ||||
IESG Reviews fixes. | ||||
Removed spurious lines introduced in v-17 due to xml2rfc v3. | ||||
-17 | ||||
v16 remnants by Ben K. | ||||
Typos. | ||||
-16 | ||||
Updates to address Yaron S.'s Secdir review. | ||||
Updates to address David S.'s Gen-ART review. | ||||
-15 | ||||
Updates to addressed Ben's AD follow up feedback. | ||||
-14 | ||||
Updates to complete Ben's AD review feedback and discussions. | ||||
-13 | ||||
Updates based on AD's review and discussions | ||||
Examples redone without password | ||||
-12 | ||||
Updated section 5 based on Esko's comments and nits identified. | ||||
Nits and some clarifications for Esko's new review from 5/21/2019. | ||||
Nits and some clarifications for Esko's new review from 5/28/2019. | ||||
-11 | ||||
Updated Server-side keygen to simplify motivation and added | ||||
paragraphs in Security considerations to point out that random | ||||
numbers are still needed (feedback from Hannes). | ||||
-10 | ||||
Addressed WGLC comments | ||||
More consistent request format in the examples. | ||||
Explained root resource difference when there is resource | ||||
discovery | ||||
Clarified when the client is supposed to do discovery | ||||
Fixed nits and minor Option length inaccurracies in the examples. | ||||
-09 | ||||
WGLC comments taken into account | ||||
consensus about discovery of content-format | ||||
added additional path for content-format selection | ||||
merged DTLS sections | ||||
-08 | ||||
added application/pkix-cert Content-Format TBD287. | ||||
discovery text clarified | ||||
Removed text on ct negotiation in connection to multipart-core | ||||
removed text that duplicates or contradicts RFC7252 (thanks Klaus) | ||||
Stated that well-known/est is compulsory | ||||
Use of response codes clarified. | ||||
removed bugs: Max-Age and Content-Format Options in Request | ||||
Accept Option explained for est/skg and added in enroll example | ||||
Added second URI /skc for server-side key gen and a simple cert | ||||
(not PKCS#7) | ||||
Persistence of DTLS connection clarified. | ||||
Minor text fixes. | ||||
-07: | ||||
redone examples from scratch with openssl | ||||
Updated authors. | ||||
Added CoAP RST as a MAY for an equivalent to an HTTP 204 message. | ||||
Added serialization example of the /skg CBOR response. | ||||
Added text regarding expired IDevIDs and persistent DTLS | ||||
connection that will start using the Explicit TA Database in the | ||||
new DTLS connection. | ||||
Nits and fixes | ||||
Removed CBOR envelop for binary data | ||||
Replaced TBD8 with 62. | ||||
Added RFC8174 reference and text. | ||||
Clarified MTI for server-side key generation and Content-Formats. | ||||
Defined the /skg MTI (PKCS#8) and the cases where CMS encryption | ||||
will be used. | ||||
Moved Fragmentation section up because it was referenced in | ||||
sections above it. | ||||
-06: | ||||
clarified discovery section, by specifying that no discovery may | ||||
be needed for /.well-known/est URI. | ||||
added resource type values for IANA | ||||
added list of compulsory to implement and optional functions. | ||||
Fixed issues pointed out by the idnits tool. | ||||
Updated CoAP response codes section with more mappings between EST | ||||
HTTP codes and EST-coaps CoAP codes. | ||||
Minor updates to the MTI EST Functions section. | ||||
Moved Change Log section higher. | ||||
-05: | ||||
repaired again | ||||
TBD8 = 62 removed from C-F registration, to be done in CT draft. | ||||
-04: | ||||
Updated Delayed response section to reflect short and long delay | ||||
options. | ||||
-03: | ||||
Removed observe and simplified long waits | ||||
Repaired Content-Format specification | ||||
-02: | ||||
Added parameter discussion in section 8 | ||||
Concluded Content-Format specification using multipart-ct draft | ||||
examples updated | ||||
-01: | ||||
Editorials done. | ||||
Redefinition of proxy to Registrar in Section 6. Explained better | ||||
the role of https-coaps Registrar, instead of "proxy" | ||||
Provide "observe" Option examples | ||||
extended block message example. | ||||
inserted new server key generation text in Section 5.8 and | ||||
motivated server key generation. | ||||
Broke down details for DTLS 1.3 | ||||
New Media-Type uses CBOR array for multiple Content-Format | ||||
payloads | ||||
provided new Content-Format tables | ||||
new media format for IANA | ||||
-00 | ||||
copied from vanderstok-ace-coap-04 | ||||
2. Introduction | 1. Introduction | |||
"Classical" Enrollment over Secure Transport (EST) [RFC7030] is used | "Classical" Enrollment over Secure Transport (EST) [RFC7030] is used | |||
for authenticated/authorized endpoint certificate enrollment (and | for authenticated/authorized endpoint certificate enrollment (and | |||
optionally key provisioning) through a Certificate Authority (CA) or | optionally key provisioning) through a Certification Authority (CA) | |||
Registration Authority (RA). EST transports messages over HTTPS. | or Registration Authority (RA). EST transports messages over HTTPS. | |||
This document defines a new transport for EST based on the | This document defines a new transport for EST based on the | |||
Constrained Application Protocol (CoAP) since some Internet of Things | Constrained Application Protocol (CoAP) since some Internet of Things | |||
(IoT) devices use CoAP instead of HTTP. Therefore, this | (IoT) devices use CoAP instead of HTTP. Therefore, this | |||
specification utilizes DTLS [RFC6347] and CoAP [RFC7252] instead of | specification utilizes DTLS [RFC6347] and CoAP [RFC7252] instead of | |||
TLS [RFC8446] and HTTP [RFC7230]. | TLS [RFC8446] and HTTP [RFC7230]. | |||
EST responses can be relatively large and for this reason this | EST responses can be relatively large, and for this reason, this | |||
specification also uses CoAP Block-Wise Transfer [RFC7959] to offer a | specification also uses CoAP Block-Wise Transfer [RFC7959] to offer a | |||
fragmentation mechanism of EST messages at the CoAP layer. | fragmentation mechanism of EST messages at the CoAP layer. | |||
This document also profiles the use of EST to only support | This document also profiles the use of EST to support certificate- | |||
certificate-based client authentication. HTTP Basic or Digest | based client authentication only. Neither HTTP Basic nor Digest | |||
authentication (as described in Section 3.2.3 of [RFC7030]) are not | authentication (as described in Section 3.2.3 of [RFC7030]) is | |||
supported. | supported. | |||
3. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
Many of the concepts in this document are taken from [RFC7030]. | Many of the concepts in this document are taken from [RFC7030]. | |||
Consequently, much text is directly traceable to [RFC7030]. | Consequently, much text is directly traceable to [RFC7030]. | |||
4. DTLS and conformance to RFC7925 profiles | 3. DTLS and Conformance to RFC 7925 Profiles | |||
This section describes how EST-coaps conforms to the profiles of low- | This section describes how EST-coaps conforms to the profiles of low- | |||
resource devices described in [RFC7925]. EST-coaps can transport | resource devices described in [RFC7925]. EST-coaps can transport | |||
certificates and private keys. Certificates are responses to | certificates and private keys. Certificates are responses to | |||
(re-)enrollment requests or requests for a trusted certificate list. | (re-)enrollment requests or requests for a trusted certificate list. | |||
Private keys can be transported as responses to a server-side key | Private keys can be transported as responses to a server-side key | |||
generation request as described in Section 4.4 of [RFC7030] (and | generation request as described in Section 4.4 of [RFC7030] (and | |||
subsections) and discussed in Section 5.8 of this document. | subsections) and discussed in Section 4.8 of this document. | |||
EST-coaps depends on a secure transport mechanism that secures the | EST-coaps depends on a secure transport mechanism that secures the | |||
exchanged CoAP messages. DTLS is one such secure protocol. No other | exchanged CoAP messages. DTLS is one such secure protocol. No other | |||
changes are necessary regarding the secure transport of EST messages. | changes are necessary regarding the secure transport of EST messages. | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| EST request/response messages | | | EST request/response messages | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| CoAP for message transfer and signaling | | | CoAP for message transfer and signaling | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
| Secure Transport | | | Secure Transport | | |||
+------------------------------------------------+ | +------------------------------------------------+ | |||
Figure 1: EST-coaps protocol layers | Figure 1: EST-coaps Protocol Layers | |||
In accordance with sections 3.3 and 4.4 of [RFC7925], the mandatory | In accordance with Sections 3.3 and 4.4 of [RFC7925], the mandatory | |||
cipher suite for DTLS in EST-coaps is | cipher suite for DTLS in EST-coaps is | |||
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 [RFC7251]. Curve secp256r1 MUST | TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 [RFC7251]. Curve secp256r1 MUST | |||
be supported [RFC8422]; this curve is equivalent to the NIST P-256 | be supported [RFC8422]; this curve is equivalent to the NIST P-256 | |||
curve. After the publication of [RFC7748], support for Curve25519 | curve. After the publication of [RFC7748], support for Curve25519 | |||
will likely be required in the future by (D)TLS Profiles for the | will likely be required in the future by (D)TLS profiles for the | |||
Internet of Things [RFC7925]. | Internet of Things [RFC7925]. | |||
DTLS 1.2 implementations must use the Supported Elliptic Curves and | DTLS 1.2 implementations must use the Supported Elliptic Curves and | |||
Supported Point Formats Extensions in [RFC8422]. Uncompressed point | Supported Point Formats Extensions in [RFC8422]. Uncompressed point | |||
format must also be supported. DTLS 1.3 [I-D.ietf-tls-dtls13] | format must also be supported. DTLS 1.3 [RFC9147] implementations | |||
implementations differ from DTLS 1.2 because they do not support | differ from DTLS 1.2 because they do not support point format | |||
point format negotiation in favor of a single point format for each | negotiation in favor of a single point format for each curve. Thus, | |||
curve. Thus, support for DTLS 1.3 does not mandate point format | support for DTLS 1.3 does not mandate point format extensions and | |||
extensions and negotiation. In addition, in DTLS 1.3 the Supported | negotiation. In addition, in DTLS 1.3, the Supported Elliptic Curves | |||
Elliptic Curves extension has been renamed to Supported Groups. | extension has been renamed to Supported Groups. | |||
CoAP was designed to avoid IP fragmentation. DTLS is used to secure | CoAP was designed to avoid IP fragmentation. DTLS is used to secure | |||
CoAP messages. However, fragmentation is still possible at the DTLS | CoAP messages. However, fragmentation is still possible at the DTLS | |||
layer during the DTLS handshake when using ECC ciphersuites. If | layer during the DTLS handshake even when using Elliptic Curve | |||
fragmentation is necessary, "DTLS provides a mechanism for | Cryptography (ECC) cipher suites. If fragmentation is necessary, | |||
fragmenting a handshake message over several records, each of which | "DTLS provides a mechanism for fragmenting a handshake message over a | |||
can be transmitted separately, thus avoiding IP fragmentation" | number of records, each of which can be transmitted separately, thus | |||
[RFC6347]. | avoiding IP fragmentation" [RFC6347]. | |||
The authentication of the EST-coaps server by the EST-coaps client is | The authentication of the EST-coaps server by the EST-coaps client is | |||
based on certificate authentication in the DTLS handshake. The EST- | based on certificate authentication in the DTLS handshake. The EST- | |||
coaps client MUST be configured with at least an Implicit TA database | coaps client MUST be configured with at least an Implicit Trust | |||
which will enable the authentication of the server the first time | Anchor database, which will enable the authentication of the server | |||
before updating its trust anchor (Explicit TA) [RFC7030]. | the first time before updating its trust anchor (Explicit TA) | |||
[RFC7030]. | ||||
The authentication of the EST-coaps client MUST be with a client | The authentication of the EST-coaps client MUST be with a client | |||
certificate in the DTLS handshake. This can either be | certificate in the DTLS handshake. This can either be: | |||
o a previously issued client certificate (e.g., an existing | ||||
* A previously issued client certificate (e.g., an existing | ||||
certificate issued by the EST CA); this could be a common case for | certificate issued by the EST CA); this could be a common case for | |||
simple re-enrollment of clients. | simple re-enrollment of clients. | |||
o a previously installed certificate (e.g., manufacturer IDevID | * A previously installed certificate (e.g., manufacturer IDevID | |||
[ieee802.1ar] or a certificate issued by some other party). | [IEEE802.1AR] or a certificate issued by some other party). | |||
IDevID's are expected to have a very long life, as long as the | 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 | device, but under some conditions could expire. In that case, the | |||
server MAY authenticate a client certificate against its trust | server MAY authenticate a client certificate against its trust | |||
store although the certificate is expired (Section 10). | store though the certificate is expired (Section 9). | |||
EST-coaps supports the certificate types and Trust Anchors (TA) that | EST-coaps supports the certificate types and TAs that are specified | |||
are specified for EST in Section 3 of [RFC7030]. | for EST in Section 3 of [RFC7030]. | |||
As described in Section 2.1 of [RFC5272] proof-of-identity refers to | As described in Section 2.1 of [RFC5272], proof-of-identity refers to | |||
a value that can be used to prove that an end-entity or client is in | 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 | the possession of and can use the private key corresponding to the | |||
certified public key. Additionally, channel-binding information can | certified public key. Additionally, channel-binding information can | |||
link proof-of-identity with an established connection. Connection- | link proof-of-identity with an established connection. Connection- | |||
based proof-of-possession is OPTIONAL for EST-coaps clients and | based proof-of-possession is OPTIONAL for EST-coaps clients and | |||
servers. When proof-of-possession is desired, a set of actions are | servers. When proof-of-possession is desired, a set of actions are | |||
required regarding the use of tls-unique, described in Section 3.5 in | required regarding the use of tls-unique, described in Section 3.5 of | |||
[RFC7030]. The tls-unique information consists of the contents of | [RFC7030]. The tls-unique information consists of the contents of | |||
the first "Finished" message in the (D)TLS handshake between server | the first Finished message in the (D)TLS handshake between server and | |||
and client [RFC5929]. The client adds the "Finished" message as a | client [RFC5929]. The client adds the Finished message as a | |||
ChallengePassword in the attributes section of the PKCS#10 Request | challengePassword in the attributes section of the PKCS #10 | |||
[RFC5967] to prove that the client is indeed in control of the | CertificationRequest [RFC5967] to prove that the client is indeed in | |||
private key at the time of the (D)TLS session establishment. | 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 (Section 4.2.6 of [RFC6347]). The Finished message is | ||||
calculated as shown in Section 7.4.9 of [RFC5246]. | ||||
In the case of handshake message fragmentation, if proof-of- | For (D)TLS 1.3, Appendix C.5 of [RFC8446] describes the lack of | |||
possession is desired, the Finished message added as the | channel bindings similar to tls-unique. [TLS13-CHANNEL-BINDINGS] can | |||
ChallengePassword in the CSR is calculated as specified by the DTLS | be used instead to derive a 32-byte tls-exporter binding from the | |||
standards. We summarize it here for convenience. For DTLS 1.2, in | (D)TLS 1.3 master secret by using a PRF negotiated in the (D)TLS 1.3 | |||
the event of handshake message fragmentation, the Hash of the | handshake, "EXPORTER-Channel-Binding" with no terminating NUL as the | |||
handshake messages used in the MAC calculation of the Finished | label, the ClientHello.random and ServerHello.random, and a zero- | |||
message must be computed on each reassembled message, as if each | length context string. When proof-of-possession is desired, the | |||
message had not been fragmented (Section 4.2.6 of [RFC6347]). The | client adds the tls-exporter value as a challengePassword in the | |||
Finished message is calculated as shown in Section 7.4.9 of | attributes section of the PKCS #10 CertificationRequest [RFC5967] to | |||
[RFC5246]. Similarly, for DTLS 1.3, the Finished message must be | prove that the client is indeed in control of the private key at the | |||
computed as if each handshake message had been sent as a single | time of the (D)TLS session establishment. | |||
fragment (Section 5.8 of [I-D.ietf-tls-dtls13]) following the | ||||
algorithm described in 4.4.4 of [RFC8446]. | ||||
In a constrained CoAP environment, endpoints can't always afford to | In a constrained CoAP environment, endpoints can't always afford to | |||
establish a DTLS connection for every EST transaction. An EST-coaps | establish a DTLS connection for every EST transaction. An EST-coaps | |||
DTLS connection MAY remain open for sequential EST transactions, | DTLS connection MAY remain open for sequential EST transactions, | |||
which was not the case with [RFC7030]. For example, if a /crts | which was not the case with [RFC7030]. For example, if a /crts | |||
request is followed by a /sen request, both can use the same | request is followed by a /sen request, both can use the same | |||
authenticated DTLS connection. However, when a /crts request is | authenticated DTLS connection. However, when a /crts request is | |||
included in the set of sequential EST transactions, some additional | included in the set of sequential EST transactions, some additional | |||
security considerations apply regarding the use of the Implicit and | security considerations apply regarding the use of the Implicit and | |||
Explicit TA database as explained in Section 10.1. | Explicit TA database as explained in Section 9.1. | |||
Given that after a successful enrollment, it is more likely that a | Given that after a successful enrollment, it is more likely that a | |||
new EST transaction will not take place for a significant amount of | new EST transaction will not take place for a significant amount of | |||
time, the DTLS connections SHOULD only be kept alive for EST messages | time, the DTLS connections SHOULD only be kept alive for EST messages | |||
that are relatively close to each other. These could include a /sen | that are relatively close to each other. These could include a /sen | |||
immediatelly following a /crts when a device is getting bootstrapped. | immediately following a /crts when a device is getting bootstrapped. | |||
In some cases, like NAT rebinding, keeping the state of a connection | In some cases, like NAT rebinding, keeping the state of a connection | |||
is not possible when devices sleep for extended periods of time. In | is not possible when devices sleep for extended periods of time. In | |||
such occasions, [I-D.ietf-tls-dtls-connection-id] negotiates a | such occasions, [RFC9146] negotiates a connection ID that can | |||
connection ID that can eliminate the need for new handshake and its | eliminate the need for a new handshake and its additional cost; or, | |||
additional cost; or DTLS session resumption provides a less costly | DTLS session resumption provides a less costly alternative than | |||
alternative than re-doing a full DTLS handshake. | redoing a full DTLS handshake. | |||
5. Protocol Design | 4. Protocol Design | |||
EST-coaps uses CoAP to transfer EST messages, aided by Block-Wise | EST-coaps uses CoAP to transfer EST messages, aided by Block-Wise | |||
Transfer [RFC7959] to avoid IP fragmentation. The use of Blocks for | Transfer [RFC7959], to avoid IP fragmentation. The use of blocks for | |||
the transfer of larger EST messages is specified in Section 5.6. | the transfer of larger EST messages is specified in Section 4.6. | |||
Figure 1 shows the layered EST-coaps architecture. | Figure 1 shows the layered EST-coaps architecture. | |||
The EST-coaps protocol design follows closely the EST design. The | The EST-coaps protocol design follows closely the EST design. The | |||
supported message types in EST-coaps are: | supported message types in EST-coaps are: | |||
o CA certificate retrieval needed to receive the complete set of CA | * CA certificate retrieval needed to receive the complete set of CA | |||
certificates. | certificates. | |||
o Simple enroll and re-enroll for a CA to sign client identity | * Simple enroll and re-enroll for a CA to sign client identity | |||
public key. | public keys. | |||
o Certificate Signing Request (CSR) attribute messages that informs | * Certificate Signing Request (CSR) attribute messages that informs | |||
the client of the fields to include in a CSR. | the client of the fields to include in a CSR. | |||
o Server-side key generation messages to provide a client identity | * Server-side key generation messages to provide a client identity | |||
private key when the client chooses so. | private key when the client chooses so. | |||
While [RFC7030] permits a number of the EST functions to be used | While [RFC7030] permits a number of the EST functions to be used | |||
without authentication, this specification requires that the client | without authentication, this specification requires that the client | |||
MUST be authenticated for all functions. | MUST be authenticated for all functions. | |||
5.1. Discovery and URIs | 4.1. Discovery and URIs | |||
EST-coaps is targeted for low-resource networks with small packets. | EST-coaps is targeted for low-resource networks with small packets. | |||
Two types of installations are possible: (1) rigid ones, where the | Two types of installations are possible: (1) a rigid one, where the | |||
address and the supported functions of the EST server(s) are known, | address and the supported functions of the EST server(s) are known, | |||
and (2) a flexible one, where the EST server and its supported | and (2) a flexible one, where the EST server and its supported | |||
functions need to be discovered. | functions need to be discovered. | |||
For both types of installations, saving header space is important and | For both types of installations, saving header space is important and | |||
short EST-coaps URIs are specified in this document. These URIs are | short EST-coaps URIs are specified in this document. These URIs are | |||
shorter than the ones in [RFC7030]. Two example EST-coaps resource | shorter than the ones in [RFC7030]. Two example EST-coaps resource | |||
path names are: | path names are: | |||
coaps://example.com:<port>/.well-known/est/<short-est> | coaps://example.com:<port>/.well-known/est/<short-est> | |||
skipping to change at page 11, line 27 ¶ | skipping to change at line 315 ¶ | |||
to the appropriate certificate profile. Implementers should consider | to the appropriate certificate profile. Implementers should consider | |||
using short labels to minimize transmission overhead. | using short labels to minimize transmission overhead. | |||
The EST-coaps server URIs, obtained through discovery of the EST- | The EST-coaps server URIs, obtained through discovery of the EST- | |||
coaps resource(s) as shown below, are of the form: | coaps resource(s) as shown below, are of the form: | |||
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> | |||
Figure 5 in Section 3.2.2 of [RFC7030] enumerates the operations and | Figure 5 in Section 3.2.2 of [RFC7030] enumerates the operations and | |||
corresponding paths which are supported by EST. Table 1 provides the | corresponding paths that are supported by EST. Table 1 provides the | |||
mapping from the EST URI path to the shorter EST-coaps URI path. | mapping from the EST URI path to the shorter EST-coaps URI path. | |||
+-------------------+-------------------------------+ | +=================+==============================+ | |||
| EST | EST-coaps | | | EST | EST-coaps | | |||
+-------------------+-------------------------------+ | +=================+==============================+ | |||
| /cacerts | /crts | | | /cacerts | /crts | | |||
| /simpleenroll | /sen | | +-----------------+------------------------------+ | |||
| /simplereenroll | /sren | | | /simpleenroll | /sen | | |||
| /serverkeygen | /skg (PKCS#7) | | +-----------------+------------------------------+ | |||
| /serverkeygen | /skc (application/pkix-cert) | | | /simplereenroll | /sren | | |||
| /csrattrs | /att | | +-----------------+------------------------------+ | |||
+-------------------+-------------------------------+ | | /serverkeygen | /skg (PKCS #7) | | |||
+-----------------+------------------------------+ | ||||
| /serverkeygen | /skc (application/pkix-cert) | | ||||
+-----------------+------------------------------+ | ||||
| /csrattrs | /att | | ||||
+-----------------+------------------------------+ | ||||
Table 1: Short EST-coaps URI path | Table 1: Short EST-coaps URI Path | |||
The /skg message is the EST /serverkeygen equivalent where the client | The /skg message is the EST /serverkeygen equivalent where the client | |||
requests a certificate in PKCS#7 format and a private key. If the | requests a certificate in PKCS #7 format and a private key. If the | |||
client prefers a single application/pkix-cert certificate instead of | client prefers a single application/pkix-cert certificate instead of | |||
PKCS#7, it will make an /skc request. In both cases (i.e., /skg, | PKCS #7, it will make an /skc request. In both cases (i.e., /skg, | |||
/skc) a private key MUST be returned. | /skc), a private key MUST be returned. | |||
Clients and servers MUST support the short resource EST-coaps URIs. | Clients and servers MUST support the short resource EST-coaps URIs. | |||
In the context of CoAP, the presence and location of (path to) the | In the context of CoAP, the presence and location of (path to) the | |||
EST resources are discovered by sending a GET request to "/.well- | EST resources are discovered by sending a GET request to "/.well- | |||
known/core" including a resource type (RT) parameter with the value | known/core" including a resource type (RT) parameter with the value | |||
"ace.est*" [RFC6690]. The example below shows the discovery over | "ace.est*" [RFC6690]. The example below shows the discovery over | |||
CoAPS of the presence and location of EST-coaps resources. Linefeeds | CoAPS of the presence and location of EST-coaps resources. Linefeeds | |||
are included only for readability. | are included only for readability. | |||
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 | |||
The first three lines, describing ace.est.crts, ace.est.sen, and | The first three lines, describing ace.est.crts, ace.est.sen, and | |||
ace.est.sren, of the discovery response above MUST be returned if the | ace.est.sren, of the discovery response above MUST be returned if the | |||
server supports resource discovery. The last three lines are only | server supports resource discovery. The last three lines are only | |||
included if the corresponding EST functions are implemented (see | included if the corresponding EST functions are implemented (see | |||
Table 2). The Content-Formats in the response allow the client to | Table 2). The Content-Formats in the response allow the client to | |||
request one that is supported by the server. These are the values | request one that is supported by the server. These are the values | |||
that would be sent in the client request with an Accept option. | that would be sent in the client request with an Accept Option. | |||
Discoverable port numbers can be returned in the response payload. | Discoverable port numbers can be returned in the response payload. | |||
An example response payload for non-default CoAPS server port 61617 | An example response payload for non-default CoAPS server port 61617 | |||
follows below. Linefeeds are included only for readability. | follows below. Linefeeds are included only for readability. | |||
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 | |||
The server MUST support the default /.well-known/est root resource. | The server MUST support the default /.well-known/est root resource. | |||
The server SHOULD support resource discovery when it supports non- | The server SHOULD support resource discovery when it supports non- | |||
default URIs (like /est or /est/ArbitraryLabel) or ports. The client | default URIs (like /est or /est/ArbitraryLabel) or ports. The client | |||
SHOULD use resource discovery when it is unaware of the available | SHOULD use resource discovery when it is unaware of the available | |||
EST-coaps resources. | EST-coaps resources. | |||
Throughout this document the example root resource of /est is used. | Throughout this document, the example root resource of /est is used. | |||
5.2. Mandatory/optional EST Functions | 4.2. Mandatory/Optional EST Functions | |||
This specification contains a set of required-to-implement functions, | This specification contains a set of required-to-implement functions, | |||
optional functions, and not specified functions. The unspecified | optional functions, and not-specified functions. The unspecified | |||
functions are deemed too expensive for low-resource devices in | functions are deemed too expensive for low-resource devices in | |||
payload and calculation times. | payload and calculation times. | |||
Table 2 specifies the mandatory-to-implement or optional | Table 2 specifies the mandatory-to-implement or optional | |||
implementation of the EST-coaps functions. Discovery of the | implementation of the EST-coaps functions. Discovery of the | |||
existence of optional functions is described in Section 5.1. | existence of optional functions is described in Section 4.1. | |||
+-------------------+--------------------------+ | +=================+==========================+ | |||
| EST Functions | EST-coaps implementation | | | EST Functions | EST-coaps Implementation | | |||
+-------------------+--------------------------+ | +=================+==========================+ | |||
| /cacerts | MUST | | | /cacerts | MUST | | |||
| /simpleenroll | MUST | | +-----------------+--------------------------+ | |||
| /simplereenroll | MUST | | | /simpleenroll | MUST | | |||
| /fullcmc | Not specified | | +-----------------+--------------------------+ | |||
| /serverkeygen | OPTIONAL | | | /simplereenroll | MUST | | |||
| /csrattrs | OPTIONAL | | +-----------------+--------------------------+ | |||
+-------------------+--------------------------+ | | /fullcmc | Not specified | | |||
+-----------------+--------------------------+ | ||||
| /serverkeygen | OPTIONAL | | ||||
+-----------------+--------------------------+ | ||||
| /csrattrs | OPTIONAL | | ||||
+-----------------+--------------------------+ | ||||
Table 2: List of EST-coaps functions | Table 2: List of EST-coaps Functions | |||
5.3. Payload formats | 4.3. Payload Formats | |||
EST-coaps is designed for low-resource devices and hence does not | EST-coaps is designed for low-resource devices; hence, it does not | |||
need to send Base64-encoded data. Simple binary is more efficient | need to send Base64-encoded data. Simple binary is more efficient | |||
(30% smaller payload for DER-encoded ASN.1) and well supported by | (30% smaller payload for DER-encoded ASN.1) and well supported by | |||
CoAP. Thus, the payload for a given Media-Type follows the ASN.1 | CoAP. Thus, the payload for a given media type follows the ASN.1 | |||
structure of the Media-Type and is transported in binary format. | structure of the media type and is transported in binary format. | |||
The Content-Format (HTTP Content-Type equivalent) of the CoAP message | The Content-Format (HTTP Content-Type equivalent) of the CoAP message | |||
determines which EST message is transported in the CoAP payload. The | determines which EST message is transported in the CoAP payload. The | |||
Media-Types specified in the HTTP Content-Type header field | media types specified in the HTTP Content-Type header field | |||
(Section 3.2.2 of [RFC7030]) are specified by the Content-Format | (Section 3.2.4 of [RFC7030]) are specified by the Content-Format | |||
Option (12) of CoAP. The combination of URI-Path and Content-Format | Option (12) of CoAP. The combination of URI-Path and Content-Format | |||
in EST-coaps MUST map to an allowed combination of URI and Media-Type | in EST-coaps MUST map to an allowed combination of URI and media type | |||
in EST. The required Content-Formats for these requests and response | in EST. The required Content-Formats for these requests and response | |||
messages are defined in Section 9.1. The CoAP response codes are | messages are defined in Section 8.1. The CoAP response codes are | |||
defined in Section 5.5. | defined in Section 4.5. | |||
Content-Format TBD287 can be used in place of 281 to carry a single | Content-Format 287 can be used in place of 281 to carry a single | |||
certificate instead of a PKCS#7 container in a /crts, /sen, /sren or | certificate instead of a PKCS #7 container in a /crts, /sen, /sren, | |||
/skg response. Content-Format 281 MUST be supported by EST-coaps | or /skg response. Content-Format 281 MUST be supported by EST-coaps | |||
servers. Servers MAY also support Content-Format TBD287. It is up | servers. Servers MAY also support Content-Format 287. It is up to | |||
to the client to support only Content-Format 281, TBD287 or both. | the client to support only Content-Format 281, 287 or both. The | |||
The client will use a COAP Accept Option in the request to express | client will use a CoAP Accept Option in the request to express the | |||
the preferred response Content-Format. If an Accept Option is not | preferred response Content-Format. If an Accept Option is not | |||
included in the request, the client is not expressing any preference | included in the request, the client is not expressing any preference | |||
and the server SHOULD choose format 281. | and the server SHOULD choose format 281. | |||
Content-Format 286 is used in /sen, /sren and /skg requests and 285 | Content-Format 286 is used in /sen, /sren, and /skg requests and 285 | |||
in /att responses. | in /att responses. | |||
A representation with Content-Format identifier 62 contains a | A representation with Content-Format identifier 62 contains a | |||
collection of representations along with their respective Content- | collection of representations along with their respective Content- | |||
Format. The Content-Format identifies the Media-Type application/ | Format. The Content-Format identifies the media type application/ | |||
multipart-core specified in [I-D.ietf-core-multipart-ct]. For | multipart-core specified in [RFC8710]. For example, a collection, | |||
example, a collection, containing two representations in response to | containing two representations in response to an EST-coaps server- | |||
a EST-coaps server-side key generation /skg request, could include a | side key generation /skg request, could include a private key in PKCS | |||
private key in PKCS#8 [RFC5958] with Content-Format identifier 284 | #8 [RFC5958] with Content-Format identifier 284 (0x011C) and a single | |||
(0x011C) and a single certificate in a PKCS#7 container with Content- | certificate in a PKCS #7 container with Content-Format identifier 281 | |||
Format identifier 281 (0x0119). Such a collection would look like | (0x0119). Such a collection would look like | |||
[284,h'0123456789abcdef', 281,h'fedcba9876543210'] in diagnostic CBOR | [284,h'0123456789abcdef', 281,h'fedcba9876543210'] in diagnostic | |||
notation. The serialization of such CBOR content would be | Concise Binary Object Representation (CBOR) notation. The | |||
serialization of such CBOR content would be: | ||||
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" | |||
Multipart /skg response serialization | Figure 2: Multipart /skg Response Serialization | |||
When the client makes an /skc request the certificate returned with | When the client makes an /skc request, the certificate returned with | |||
the private key is a single X.509 certificate (not a PKCS#7 | the private key is a single X.509 certificate (not a PKCS #7 | |||
container) with Content-Format identifier TBD287 (0x011F) instead of | container) with Content-Format identifier 287 (0x011F) instead of | |||
281. In cases where the private key is encrypted with CMS (as | 281. In cases where the private key is encrypted with Cryptographic | |||
explained in Section 5.8) the Content-Format identifier is 280 | Message Syntax (CMS) (as explained in Section 4.8), the Content- | |||
(0x0118) instead of 284. The content format used in the response is | Format identifier is 280 (0x0118) instead of 284. The Content-Format | |||
summarized in Table 3. | used in the response is summarized in Table 3. | |||
+----------+-----------------+-----------------+ | +==========+==================+==================+ | |||
| Function | Response part 1 | Response part 2 | | | Function | Response, Part 1 | Response, Part 2 | | |||
+----------+-----------------+-----------------+ | +==========+==================+==================+ | |||
| /skg | 284 | 281 | | | /skg | 284 | 281 | | |||
| /skc | 280 | TBD287 | | +----------+------------------+------------------+ | |||
+----------+-----------------+-----------------+ | | /skc | 280 | 287 | | |||
+----------+------------------+------------------+ | ||||
Table 3: response content formats for skg and skc | Table 3: Response Content-Formats for /skg and | |||
/skc | ||||
The key and certificate representations are DER-encoded ASN.1, in its | The key and certificate representations are DER-encoded ASN.1, in its | |||
native binary form. An example is shown in Appendix A.3. | binary form. An example is shown in Appendix A.3. | |||
5.4. Message Bindings | 4.4. Message Bindings | |||
The general EST-coaps message characteristics are: | The general EST-coaps message characteristics are: | |||
o EST-coaps servers sometimes need to provide delayed responses | * EST-coaps servers sometimes need to provide delayed responses, | |||
which are preceded by an immediately returned empty ACK or an ACK | which are preceded by an immediately returned empty ACK or an ACK | |||
containing response code 5.03 as explained in Section 5.7. Thus, | containing response code 5.03 as explained in Section 4.7. Thus, | |||
it is RECOMMENDED for implementers to send EST-coaps requests in | it is RECOMMENDED for implementers to send EST-coaps requests in | |||
confirmable CON CoAP messages. | Confirmable (CON) CoAP messages. | |||
o The CoAP Options used are Uri-Host, Uri-Path, Uri-Port, Content- | * The CoAP Options used are Uri-Host, Uri-Path, Uri-Port, Content- | |||
Format, Block1, Block2, and Accept. These CoAP Options are used | Format, Block1, Block2, and Accept. These CoAP Options are used | |||
to communicate the HTTP fields specified in the EST REST messages. | to communicate the HTTP fields specified in the EST REST messages. | |||
The Uri-host and Uri-Port Options can be omitted from the COAP | The Uri-host and Uri-Port Options can be omitted from the CoAP | |||
message sent on the wire. When omitted, they are logically | message sent on the wire. When omitted, they are logically | |||
assumed to be the transport protocol destination address and port | assumed to be the transport protocol destination address and port, | |||
respectively. Explicit Uri-Host and Uri-Port Options are | respectively. Explicit Uri-Host and Uri-Port Options are | |||
typically used when an endpoint hosts multiple virtual servers and | typically used when an endpoint hosts multiple virtual servers and | |||
uses the Options to route the requests accordingly. Other COAP | uses the Options to route the requests accordingly. Other CoAP | |||
Options should be handled in accordance with [RFC7252]. | Options should be handled in accordance with [RFC7252]. | |||
o EST URLs are HTTPS based (https://), in CoAP these are assumed to | * EST URLs are HTTPS based (https://); in CoAP, these are assumed to | |||
be translated to CoAPS (coaps://) | be translated to CoAPS (coaps://). | |||
Table 1 provides the mapping from the EST URI path to the EST-coaps | Table 1 provides the mapping from the EST URI path to the EST-coaps | |||
URI path. Appendix A includes some practical examples of EST | URI path. Appendix A includes some practical examples of EST | |||
messages translated to CoAP. | messages translated to CoAP. | |||
5.5. CoAP response codes | 4.5. CoAP Response Codes | |||
Section 5.9 of [RFC7252] and Section 7 of [RFC8075] specify the | Section 5.9 of [RFC7252] and Section 7 of [RFC8075] specify the | |||
mapping of HTTP response codes to CoAP response codes. The success | mapping of HTTP response codes to CoAP response codes. The success | |||
code in response to an EST-coaps GET request (/crts, /att), is 2.05. | code in response to an EST-coaps GET request (/crts, /att) is 2.05. | |||
Similarly, 2.04 is used in successful response to EST-coaps POST | Similarly, 2.04 is used in successful response to EST-coaps POST | |||
requests (/sen, /sren, /skg, /skc). | requests (/sen, /sren, /skg, /skc). | |||
EST makes use of HTTP 204 or 404 responses when a resource is not | EST makes use of HTTP 204 or 404 responses when a resource is not | |||
available for the client. In EST-coaps 2.04 is used in response to a | available for the client. In EST-coaps, 2.04 is used in response to | |||
POST (/sen, /sren, /skg, /skc). 4.04 is used when the resource is not | a POST (/sen, /sren, /skg, /skc). 4.04 is used when the resource is | |||
available for the client. | not available for the client. | |||
HTTP response code 202 with a Retry-After header field in [RFC7030] | HTTP response code 202 with a Retry-After header field in [RFC7030] | |||
has no equivalent in CoAP. HTTP 202 with Retry-After is used in EST | has no equivalent in CoAP. HTTP 202 with Retry-After is used in EST | |||
for delayed server responses. Section 5.7 specifies how EST-coaps | for delayed server responses. Section 4.7 specifies how EST-coaps | |||
handles delayed messages with 5.03 responses with a Max-Age Option. | handles delayed messages with 5.03 responses with a Max-Age Option. | |||
Additionally, EST's HTTP 400, 401, 403, 404 and 503 status codes have | Additionally, EST's HTTP 400, 401, 403, 404, and 503 status codes | |||
their equivalent CoAP 4.00, 4.01, 4.03, 4.04 and 5.03 response codes | have their equivalent CoAP 4.00, 4.01, 4.03, 4.04, and 5.03 response | |||
in EST-coaps. Table 4 summarizes the EST-coaps response codes. | codes in EST-coaps. Table 4 summarizes the EST-coaps response codes. | |||
+-----------------+-----------------+-------------------------------+ | +=============+=========================+==========================+ | |||
| operation | EST-coaps | Description | | | Operation | EST-coaps Response Code | Description | | |||
| | response code | | | +=============+=========================+==========================+ | |||
+-----------------+-----------------+-------------------------------+ | | /crts, /att | 2.05 | Success. Certs included | | |||
| /crts, /att | 2.05 | Success. Certs included in | | | | | in the response payload. | | |||
| | | the response payload. | | +-------------+-------------------------+--------------------------+ | |||
| | 4.xx / 5.xx | Failure. | | | | 4.xx / 5.xx | Failure. | | |||
| /sen, /skg, | 2.04 | Success. Cert included in the | | +-------------+-------------------------+--------------------------+ | |||
| /sren, /skc | | response payload. | | | /sen, /skg, | 2.04 | Success. Cert included | | |||
| | 5.03 | Retry in Max-Age Option time. | | | /sren, /skc | | in the response payload. | | |||
| | 4.xx / 5.xx | Failure. | | +-------------+-------------------------+--------------------------+ | |||
+-----------------+-----------------+-------------------------------+ | | | 5.03 | Retry in Max-Age Option | | |||
| | | time. | | ||||
+-------------+-------------------------+--------------------------+ | ||||
| | 4.xx / 5.xx | Failure. | | ||||
+-------------+-------------------------+--------------------------+ | ||||
Table 4: EST-coaps response codes | Table 4: EST-coaps Response Codes | |||
5.6. Message fragmentation | 4.6. Message Fragmentation | |||
DTLS defines fragmentation only for the handshake and not for secure | DTLS defines fragmentation only for the handshake and not for secure | |||
data exchange (DTLS records). [RFC6347] states that to avoid using | data exchange (DTLS records). [RFC6347] states that to avoid using | |||
IP fragmentation, which involves error-prone datagram reconstitution, | IP fragmentation, which involves error-prone datagram reconstitution, | |||
invokers of the DTLS record layer should size DTLS records so that | invokers of the DTLS record layer should size DTLS records so that | |||
they fit within any Path MTU estimates obtained from the record | they fit within any Path MTU estimates obtained from the record | |||
layer. In addition, invokers residing on a 6LoWPAN over IEEE | layer. In addition, invokers residing on 6LoWPAN (IPv6 over Low- | |||
802.15.4 [ieee802.15.4] network are recommended to size CoAP messages | Power Wireless Personal Area Networks) over IEEE 802.15.4 networks | |||
such that each DTLS record will fit within one or two IEEE 802.15.4 | [IEEE802.15.4] are recommended to size CoAP messages such that each | |||
frames. | DTLS record will fit within one or two IEEE 802.15.4 frames. | |||
That is not always possible in EST-coaps. Even though ECC | That is not always possible in EST-coaps. Even though ECC | |||
certificates are small in size, they can vary greatly based on | certificates are small in size, they can vary greatly based on | |||
signature algorithms, key sizes, and Object Identifier (OID) fields | signature algorithms, key sizes, and Object Identifier (OID) fields | |||
used. For 256-bit curves, common ECDSA cert sizes are 500-1000 bytes | used. For 256-bit curves, common Elliptic Curve Digital Signature | |||
which could fluctuate further based on the algorithms, OIDs, Subject | Algorithm (ECDSA) cert sizes are 500-1000 bytes, which could | |||
Alternative Names (SAN) and cert fields. For 384-bit curves, ECDSA | fluctuate further based on the algorithms, OIDs, Subject Alternative | |||
Names (SANs), and cert fields. For 384-bit curves, ECDSA | ||||
certificates increase in size and can sometimes reach 1.5KB. | certificates increase in size and can sometimes reach 1.5KB. | |||
Additionally, there are times when the EST cacerts response from the | Additionally, there are times when the EST cacerts response from the | |||
server can include multiple certificates that amount to large | server can include multiple certificates that amount to large | |||
payloads. Section 4.6 of CoAP [RFC7252] describes the possible | payloads. Section 4.6 of [RFC7252] (CoAP) describes the possible | |||
payload sizes: "if nothing is known about the size of the headers, | payload sizes: "if nothing is known about the size of the headers, | |||
good upper bounds are 1152 bytes for the message size and 1024 bytes | good upper bounds are 1152 bytes for the message size and 1024 bytes | |||
for the payload size". Section 4.6 of [RFC7252] also suggests that | for the payload size". Section 4.6 of [RFC7252] also suggests that | |||
IPv4 implementations may want to limit themselves to more | IPv4 implementations may want to limit themselves to more | |||
conservative IPv4 datagram sizes such as 576 bytes. Even with ECC, | conservative IPv4 datagram sizes such as 576 bytes. Even with ECC, | |||
EST-coaps messages can still exceed MTU sizes on the Internet or | EST-coaps messages can still exceed MTU sizes on the Internet or | |||
6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps needs to be | 6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps needs to be | |||
able to fragment messages into multiple DTLS datagrams. | able to fragment messages into multiple DTLS datagrams. | |||
To perform fragmentation in CoAP, [RFC7959] specifies the Block1 | To perform fragmentation in CoAP, [RFC7959] specifies the Block1 | |||
Option for fragmentation of the request payload and the Block2 Option | Option for fragmentation of the request payload and the Block2 Option | |||
for fragmentation of the return payload of a CoAP flow. As explained | for fragmentation of the return payload of a CoAP flow. As explained | |||
in Section 1 of [RFC7959], block-wise transfers should be used in | in Section 1 of [RFC7959], block-wise transfers should be used in | |||
Confirmable CoAP messages to avoid the exacerbation of lost blocks. | Confirmable CoAP messages to avoid the exacerbation of lost blocks. | |||
EST-coaps servers MUST implement Block1 and Block2. EST-coaps | EST-coaps servers MUST implement Block1 and Block2. EST-coaps | |||
clients MUST implement Block2. EST-coaps clients MUST implement | clients MUST implement Block2. EST-coaps clients MUST implement | |||
Block1 only if they are expecting to send EST-coaps requests with a | Block1 only if they are expecting to send EST-coaps requests with a | |||
packet size that exceeds the Path MTU. | packet size that exceeds the path MTU. | |||
[RFC7959] also defines Size1 and Size2 Options to provide size | [RFC7959] also defines Size1 and Size2 Options to provide size | |||
information about the resource representation in a request and | information about the resource representation in a request and | |||
response. EST-client and server MAY support Size1 and Size2 Options. | response. The EST-coaps client and server MAY support Size1 and | |||
Size2 Options. | ||||
Examples of fragmented EST-coaps messages are shown in Appendix B. | Examples of fragmented EST-coaps messages are shown in Appendix B. | |||
5.7. Delayed Responses | 4.7. Delayed Responses | |||
Server responses can sometimes be delayed. According to | Server responses can sometimes be delayed. According to | |||
Section 5.2.2 of [RFC7252], a slow server can acknowledge the request | Section 5.2.2 of [RFC7252], a slow server can acknowledge the request | |||
and respond later with the requested resource representation. In | and respond later with the requested resource representation. In | |||
particular, a slow server can respond to an EST-coaps enrollment | particular, a slow server can respond to an EST-coaps enrollment | |||
request with an empty ACK with code 0.00, before sending the | request with an empty ACK with code 0.00 before sending the | |||
certificate to the client after a short delay. If the certificate | certificate to the client after a short delay. If the certificate | |||
response is large, the server will need more than one Block2 block to | response is large, the server will need more than one Block2 block to | |||
transfer it. | transfer it. | |||
This situation is shown in Figure 2. The client sends an enrollment | This situation is shown in Figure 3. The client sends an enrollment | |||
request that uses N1+1 Block1 blocks. The server uses an empty 0.00 | 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 | 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 | 2.04 messages containing N2+1 Block2 Options. The first 2.04 is a | |||
confirmable message that is acknowledged by the client. Onwards, the | Confirmable message that is acknowledged by the client. Onwards, the | |||
client acknowledges all subsequent Block2 blocks. The notation of | client acknowledges all subsequent Block2 blocks. The notation of | |||
Figure 2 is explained in Appendix B.1. | Figure 3 is explained in Appendix B.1. | |||
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) | |||
<-- (ACK) (1:0/1/256) (2.31 Continue) | {CSR (frag# 1)} --> | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
. | {CSR (frag# 2)} --> | |||
. | <-- (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)}--> | . | |||
<-- (0.00 empty ACK) | . | |||
| | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256) | |||
... Short delay before the certificate is ready ... | {CSR (frag# N1+1)}--> | |||
| | <-- (0.00 empty ACK) | |||
<-- (CON) (1:N1/0/256)(2:0/1/256)(2.04 Changed) {Cert resp (frag# 1)} | | | |||
(ACK) --> | ... Short delay before the certificate is ready ... | |||
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)} | <-- (CON) (1:N1/0/256)(2:0/1/256)(2.04 Changed) | |||
. | {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:N2/0/256) --> | <-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | . | |||
. | ||||
. | ||||
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)} | ||||
Figure 2: EST-COAP enrollment with short wait | Figure 3: EST-coaps Enrollment with Short Wait | |||
If the server is very slow (for example, manual intervention is | If the server is very slow (for example, manual intervention is | |||
required which would take minutes), it SHOULD respond with an ACK | required, which would take minutes), it SHOULD respond with an ACK | |||
containing response code 5.03 (Service unavailable) and a Max-Age | containing response code 5.03 (Service unavailable) and a Max-Age | |||
Option to indicate the time the client SHOULD wait before sending | Option to indicate the time the client SHOULD wait before sending | |||
another request to obtain the content. After a delay of Max-Age, the | another request to obtain the content. After a delay of Max-Age, the | |||
client SHOULD resend the identical CSR to the server. As long as the | client SHOULD resend the identical CSR to the server. As long as the | |||
server continues to respond with response code 5.03 (Service | server continues to respond with response code 5.03 (Service | |||
Unavailable) with a Max-Age Option, the client will continue to delay | Unavailable) with a Max-Age Option, the client will continue to delay | |||
for Max-Age and then resend the enrollment request until the server | for Max-Age and then resend the enrollment request until the server | |||
responds with the certificate or the client abandons the request for | responds with the certificate or the client abandons the request due | |||
policy or other reasons. | to policy or other reasons. | |||
To demonstrate this scenario, Figure 3 shows a client sending an | To demonstrate this scenario, Figure 4 shows a client sending an | |||
enrollment request that uses N1+1 Block1 blocks to send the CSR to | 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 | the server. The server needs N2+1 Block2 blocks to respond but also | |||
needs to take a long delay (minutes) to provide the response. | needs to take a long delay (minutes) to provide the response. | |||
Consequently, the server uses a 5.03 ACK response with a Max-Age | 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 | 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 | receives the same 5.03 response and retransmits the enrollment | |||
request until it receives a certificate in a fragmented 2.04 | request until it receives a certificate in a fragmented 2.04 | |||
response. | response. | |||
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) | |||
<-- (ACK) (1:0/1/256) (2.31 Continue) | {CSR (frag# 1)} --> | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
. | {CSR (frag# 2)} --> | |||
. | <-- (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)}--> | . | |||
<-- (ACK) (1:N1/0/256) (5.03 Service Unavailable) (Max-Age) | . | |||
| | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256) | |||
| | {CSR (frag# N1+1)}--> | |||
... Client tries again after Max-Age with identical payload ... | <-- (ACK) (1:N1/0/256) (5.03 Service Unavailable) (Max-Age) | |||
| | | | |||
| | | | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:0/1/256){CSR (frag# 1)}--> | ... Client tries again after Max-Age with identical payload ... | |||
<-- (ACK) (1:0/1/256) (2.31 Continue) | | | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | | | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | POST [2001:db8::2:1]:61616/est/sen(CON)(1:0/1/256) | |||
. | {CSR (frag# 1)}--> | |||
. | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
. | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | {CSR (frag# 2)} --> | |||
| | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
... Immediate response when certificate is ready ... | . | |||
| | . | |||
<-- (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)(1:N1/0/256) | |||
<-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | {CSR (frag# N1+1)}--> | |||
. | | | |||
. | ... Immediate response when certificate is ready ... | |||
. | | | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | <-- (ACK) (1:N1/0/256) (2:0/1/256) (2.04 Changed) | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | {Cert resp (frag# 1)} | |||
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)} | ||||
. | ||||
. | ||||
. | ||||
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)} | ||||
Figure 3: EST-COAP enrollment with long wait | Figure 4: EST-coaps Enrollment with Long Wait | |||
5.8. Server-side Key Generation | 4.8. Server-Side Key Generation | |||
Private keys can be generated on the server to support scenarios | Private keys can be generated on the server to support scenarios | |||
where serer-side key generation is needed. Such scenarios include | where server-side key generation is needed. Such scenarios include | |||
those where it is considered more secure to generate the long-lived, | those where it is considered more secure to generate the long-lived, | |||
random private key that identifies the client at the server, or where | random private key that identifies the client at the server, or where | |||
the resources spent to generate a random private key at the client | the resources spent to generate a random private key at the client | |||
are considered scarce, or where the security policy requires that the | are considered scarce, or where the security policy requires that the | |||
certificate public and corresponding private keys are centrally | certificate public and corresponding private keys are centrally | |||
generated and controlled. As always, it is necessary to use proper | generated and controlled. As always, it is necessary to use proper | |||
random numbers in various protocols such as (D)TLS (Section 10.1). | random numbers in various protocols such as (D)TLS (Section 9.1). | |||
When requesting server-side key generation, the client asks for the | When requesting server-side key generation, the client asks for the | |||
server or proxy to generate the private key and the certificate, | server or proxy to generate the private key and the certificate, | |||
which are transferred back to the client in the server-side key | which are transferred back to the client in the server-side key | |||
generation response. In all respects, the server treats the CSR as | generation response. In all respects, the server treats the CSR as | |||
it would treat any enroll or re-enroll CSR; the only distinction here | it would treat any enroll or re-enroll CSR; the only distinction here | |||
is that the server MUST ignore the public key values and signature in | is that the server MUST ignore the public key values and signature in | |||
the CSR. These are included in the request only to allow re-use of | the CSR. These are included in the request only to allow reuse of | |||
existing codebases for generating and parsing such requests. | existing codebases for generating and parsing such requests. | |||
The client /skg request is for a certificate in a PKCS#7 container | 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. The private key Content-Format | certificate and a private key. The private key Content-Format | |||
requested by the client is indicated in the PKCS#10 CSR request. If | requested by the client is indicated in the PKCS #10 CSR request. If | |||
the request contains SMIMECapabilities and DecryptKeyIdentifier or | the request contains SMIMECapabilities and DecryptKeyIdentifier or | |||
AsymmetricDecryptKeyIdentifier the client is expecting Content-Format | AsymmetricDecryptKeyIdentifier, the client is expecting Content- | |||
280 for the private key. Then this private key is encrypted | Format 280 for the private key. Then, this private key is encrypted | |||
symmetrically or asymmetrically as per [RFC7030]. The symmetric key | symmetrically or asymmetrically per [RFC7030]. The symmetric key or | |||
or the asymmetric keypair establishment method is out of scope of | the asymmetric keypair establishment method is out of scope of this | |||
this specification. A /skg or /skc request with a CSR without | specification. An /skg or /skc request with a CSR without | |||
SMIMECapabilities expects an application/multipart-core with an | SMIMECapabilities expects an application/multipart-core with an | |||
unencrypted PKCS#8 private key with Content-Format 284. | unencrypted PKCS #8 private key with Content-Format 284. | |||
The EST-coaps server-side key generation response is returned with | The EST-coaps server-side key generation response is returned with | |||
Content-Format application/multipart-core | Content-Format application/multipart-core [RFC8710] containing a CBOR | |||
[I-D.ietf-core-multipart-ct] containing a CBOR array with four items | array with four items (Section 4.3). The two representations (each | |||
(Section 5.3). The two representations (each consisting of two CBOR | consisting of two CBOR array items) do not have to be in a particular | |||
array items) do not have to be in a particular order since each | order since each representation is preceded by its Content-Format ID. | |||
representation is preceded by its Content-Format ID. Depending on | Depending on the request, the private key can be in unprotected PKCS | |||
the request, the private key can be in unprotected PKCS#8 [RFC5958] | #8 format [RFC5958] (Content-Format 284) or protected inside of CMS | |||
format (Content-Format 284) or protected inside of CMS SignedData | SignedData (Content-Format 280). The SignedData, placed in the | |||
(Content-Format 280). The SignedData, placed in the outermost | outermost container, is signed by the party that generated the | |||
container, is signed by the party that generated the private key, | private key, which may be the EST server or the EST CA. SignedData | |||
which may be the EST server or the EST CA. SignedData placed within | placed within the Enveloped Data does not need additional signing as | |||
the Enveloped Data does not need additional signing as explained in | explained in Section 4.4.2 of [RFC7030]. In summary, the | |||
Section 4.4.2 of [RFC7030]. In summary, the symmetrically encrypted | symmetrically encrypted key is included in the encryptedKey attribute | |||
key is included in the encryptedKey attribute in a KEKRecipientInfo | in a KEKRecipientInfo structure. In the case where the asymmetric | |||
structure. In the case where the asymmetric encryption key is | encryption key is suitable for transport key operations, the | |||
suitable for transport key operations the generated private key is | generated private key is encrypted with a symmetric key. The | |||
encrypted with a symmetric key. The symmetric key itself is | symmetric key itself is encrypted by the client-defined (in the CSR) | |||
encrypted by the client-defined (in the CSR) asymmetric public key | asymmetric public key and is carried in an encryptedKey attribute in | |||
and is carried in an encryptedKey attribute in a | a KeyTransRecipientInfo structure. Finally, if the asymmetric | |||
KeyTransRecipientInfo structure. Finally, if the asymmetric | ||||
encryption key is suitable for key agreement, the generated private | encryption key is suitable for key agreement, the generated private | |||
key is encrypted with a symmetric key. The symmetric key itself is | key is encrypted with a symmetric key. The symmetric key itself is | |||
encrypted by the client defined (in the CSR) asymmetric public key | encrypted by the client defined (in the CSR) asymmetric public key | |||
and is carried in an recipientEncryptedKeys attribute in a | and is carried in a recipientEncryptedKeys attribute in a | |||
KeyAgreeRecipientInfo. | KeyAgreeRecipientInfo. | |||
[RFC7030] recommends the use of additional encryption of the returned | [RFC7030] recommends the use of additional encryption of the returned | |||
private key. For the context of this specification, clients and | private key. For the context of this specification, clients and | |||
servers that choose to support server-side key generation MUST | servers that choose to support server-side key generation MUST | |||
support unprotected (PKCS#8) private keys (Content-Format 284). | support unprotected (PKCS #8) private keys (Content-Format 284). | |||
Symmetric or asymmetric encryption of the private key (CMS | Symmetric or asymmetric encryption of the private key (CMS | |||
EnvelopedData, Content-Format 280) SHOULD be supported for | EnvelopedData, Content-Format 280) SHOULD be supported for | |||
deployments where end-to-end encryption is needed between the client | deployments where end-to-end encryption is needed between the client | |||
and a server. Such cases could include architectures where an entity | and a server. Such cases could include architectures where an entity | |||
between the client and the CA terminates the DTLS connection | between the client and the CA terminates the DTLS connection | |||
(Registrar in Figure 4). Although [RFC7030] strongly recommends that | (Registrar in Figure 5). Though [RFC7030] strongly recommends that | |||
clients request the use of CMS encryption on top of the TLS channel's | clients request the use of CMS encryption on top of the TLS channel's | |||
protection, this document does not make such a recommendation; CMS | protection, this document does not make such a recommendation; CMS | |||
encryption can still be used when mandated by the use-case. | encryption can still be used when mandated by the use case. | |||
6. HTTPS-CoAPS Registrar | 5. HTTPS-CoAPS Registrar | |||
In real-world deployments, the EST server will not always reside | In real-world deployments, the EST server will not always reside | |||
within the CoAP boundary. The EST server can exist outside the | within the CoAP boundary. The EST server can exist outside the | |||
constrained network in which case it will support TLS/HTTP instead of | constrained network, in which case it will support TLS/HTTP instead | |||
CoAPS. In such environments EST-coaps is used by the client within | of CoAPS. In such environments, EST-coaps is used by the client | |||
the CoAP boundary and TLS is used to transport the EST messages | within the CoAP boundary and TLS is used to transport the EST | |||
outside the CoAP boundary. A Registrar at the edge is required to | messages outside the CoAP boundary. A Registrar at the edge is | |||
operate between the CoAP environment and the external HTTP network as | required to operate between the CoAP environment and the external | |||
shown in Figure 4. | HTTP network as shown in Figure 5. | |||
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 | '-----------' || | |||
'------' '-----------------' || | '------' '------------------' || | |||
|| || | || || | |||
|'--------------------------'| | |'--------------------------'| | |||
'----------------------------' | '----------------------------' | |||
Figure 4: EST-coaps-to-HTTPS Registrar at the CoAP boundary. | Figure 5: EST-coaps-to-HTTPS Registrar at the CoAP Boundary | |||
The EST-coaps-to-HTTPS Registrar MUST terminate EST-coaps downstream | The EST-coaps-to-HTTPS Registrar MUST terminate EST-coaps downstream | |||
and initiate EST connections over TLS upstream. The Registrar MUST | and initiate EST connections over TLS upstream. The Registrar MUST | |||
authenticate and optionally authorize the client requests while it | authenticate and optionally authorize the client requests while it | |||
MUST be authenticated by the EST server or CA. The trust | MUST be authenticated by the EST server or CA. The trust | |||
relationship between the Registrar and the EST server SHOULD be pre- | relationship between the Registrar and the EST server SHOULD be pre- | |||
established for the Registrar to proxy these connections on behalf of | established for the Registrar to proxy these connections on behalf of | |||
various clients. | various clients. | |||
When enforcing Proof-of-Possession (PoP) linking, the DTLS tls-unique | When enforcing Proof-of-Possession (POP) linking, the tls-unique or | |||
value of the (D)TLS session is used to prove that the private key | tls-exporter value of the session for DTLS 1.2 and DTLS 1.3, | |||
corresponding to the public key is in the possession of the client | respectively, is used to prove that the private key corresponding to | |||
and was used to establish the connection as explained in Section 4. | the public key is in the possession of the client and was used to | |||
The PoP linking information is lost between the EST-coaps client and | establish the connection as explained in Section 3. The POP linking | |||
the EST server when a Registrar is present. The EST server becomes | information is lost between the EST-coaps client and the EST server | |||
aware of the presence of a Registrar from its TLS client certificate | when a Registrar is present. The EST server becomes aware of the | |||
that includes id-kp-cmcRA [RFC6402] extended key usage extension | presence of a Registrar from its TLS client certificate that includes | |||
(EKU). As explained in Section 3.7 of [RFC7030], the "EST server | the id-kp-cmcRA extended key usage (EKU) extension [RFC6402]. As | |||
SHOULD apply an authorization policy consistent with a Registrar | explained in Section 3.7 of [RFC7030], the "EST server SHOULD apply | |||
client. For example, it could be configured to accept PoP linking | authorization policy consistent with an RA client ... the EST server | |||
information that does not match the current TLS session because the | could be configured to accept POP linking information that does not | |||
authenticated EST client Registrar has verified this information when | match the current TLS session because the authenticated EST client RA | |||
acting as an EST server". | has verified this information when acting as an EST server". | |||
Table 1 contains the URI mappings between EST-coaps and EST that the | Table 1 contains the URI mappings between EST-coaps and EST that the | |||
Registrar MUST adhere to. Section 5.5 of this specification and | Registrar MUST adhere to. Section 4.5 of this specification and | |||
Section 7 of [RFC8075] define the mappings between EST-coaps and HTTP | Section 7 of [RFC8075] define the mappings between EST-coaps and HTTP | |||
response codes, that determine how the Registrar MUST translate CoAP | response codes that determine how the Registrar MUST translate CoAP | |||
response codes from/to HTTP status codes. The mapping from CoAP | response codes from/to HTTP status codes. The mapping from CoAP | |||
Content-Format to HTTP Content-Type is defined in Section 9.1. | Content-Format to HTTP Content-Type is defined in Section 8.1. | |||
Additionally, a conversion from CBOR major type 2 to Base64 encoding | Additionally, a conversion from CBOR major type 2 to Base64 encoding | |||
MUST take place at the Registrar. If CMS end-to-end encryption is | MUST take place at the Registrar. If CMS end-to-end encryption is | |||
employed for the private key, the encrypted CMS EnvelopedData blob | employed for the private key, the encrypted CMS EnvelopedData blob | |||
MUST be converted at the Registrar to binary CBOR type 2 downstream | MUST be converted at the Registrar to binary CBOR type 2 downstream | |||
to the client. This is a format conversion that does not require | to the client. This is a format conversion that does not require | |||
decryption of the CMS EnvelopedData. | decryption of the CMS EnvelopedData. | |||
A deviation from the mappings in Table 1 could take place if clients | A deviation from the mappings in Table 1 could take place if clients | |||
that leverage server-side key generation preferred for the enrolled | that leverage server-side key generation preferred for the enrolled | |||
keys to be generated by the Registrar in the case the CA does not | keys to be generated by the Registrar in the case the CA does not | |||
support server-side key generation. Such a Registrar is responsible | support server-side key generation. Such a Registrar is responsible | |||
for generating a new CSR signed by a new key which will be returned | for generating a new CSR signed by a new key that will be returned to | |||
to the client along with the certificate from the CA. In these | the client along with the certificate from the CA. In these cases, | |||
cases, the Registrar MUST use random number generation with proper | the Registrar MUST use random number generation with proper entropy. | |||
entropy. | ||||
Due to fragmentation of large messages into blocks, an EST-coaps-to- | Due to fragmentation of large messages into blocks, an EST-coaps-to- | |||
HTTP Registrar MUST reassemble the BLOCKs before translating the | HTTP Registrar MUST reassemble the blocks before translating the | |||
binary content to Base64, and consecutively relay the message | binary content to Base64 and consecutively relay the message | |||
upstream. | upstream. | |||
The EST-coaps-to-HTTP Registrar MUST support resource discovery | The EST-coaps-to-HTTP Registrar MUST support resource discovery | |||
according to the rules in Section 5.1. | according to the rules in Section 4.1. | |||
7. Parameters | 6. Parameters | |||
This section addresses transmission parameters described in sections | This section addresses transmission parameters described in Sections | |||
4.7 and 4.8 of [RFC7252]. EST does not impose any unique values on | 4.7 and 4.8 of [RFC7252]. EST does not impose any unique values on | |||
the CoAP parameters in [RFC7252], but the setting of the CoAP | the CoAP parameters in [RFC7252], but the setting of the CoAP | |||
parameter values may have consequence for the setting of the EST | parameter values may have consequence for the setting of the EST | |||
parameter values. | parameter values. | |||
Implementations should follow the default CoAP configuration | Implementations should follow the default CoAP configuration | |||
parameters [RFC7252]. However, depending on the implementation | parameters [RFC7252]. However, depending on the implementation | |||
scenario, retransmissions and timeouts can also occur on other | scenario, retransmissions and timeouts can also occur on other | |||
networking layers, governed by other configuration parameters. When | networking layers, governed by other configuration parameters. When | |||
a change in a server parameter has taken place, the parameter values | a change in a server parameter has taken place, the parameter values | |||
in the communicating endpoints MUST be adjusted as necessary. | in the communicating endpoints MUST be adjusted as necessary. | |||
Examples of how parameters could be adjusted include higher layer | Examples of how parameters could be adjusted include higher-layer | |||
congestion protocols, provisioning agents and configurations included | congestion protocols, provisioning agents, and configurations | |||
in firmware updates. | included in firmware updates. | |||
Some further comments about some specific parameters, mainly from | Some further comments about some specific parameters, mainly from | |||
Table 2 in [RFC7252]: | Table 2 in [RFC7252], include the following: | |||
o NSTART: A parameter that controls the number of simultaneous | NSTART: A parameter that controls the number of simultaneous | |||
outstanding interactions that a client maintains to a given | outstanding interactions that a client maintains to a given | |||
server. An EST-coaps client is expected to control at most one | server. An EST-coaps client is expected to control at most one | |||
interaction with a given server, which is the default NSTART value | interaction with a given server, which is the default NSTART value | |||
defined in [RFC7252]. | defined in [RFC7252]. | |||
o DEFAULT_LEISURE: This setting is only relevant in multicast | DEFAULT_LEISURE: A setting that is only relevant in multicast | |||
scenarios, outside the scope of EST-coaps. | scenarios and is outside the scope of EST-coaps. | |||
o PROBING_RATE: A parameter which specifies the rate of re-sending | PROBING_RATE: A parameter that specifies the rate of resending Non- | |||
non-confirmable messages. In the rare situations that non- | confirmable messages. In the rare situations that Non-confirmable | |||
confirmable messages are used, the default PROBING_RATE value | messages are used, the default PROBING_RATE value defined in | |||
defined in [RFC7252] applies. | [RFC7252] applies. | |||
Finally, the Table 3 parameters in [RFC7252] are mainly derived from | Finally, the Table 3 parameters in [RFC7252] are mainly derived from | |||
Table 2. Directly changing parameters on one table would affect | Table 2. Directly changing parameters on one table would affect | |||
parameters on the other. | parameters on the other. | |||
8. Deployment limitations | 7. Deployment Limitations | |||
Although EST-coaps paves the way for the utilization of EST by | Although EST-coaps paves the way for the utilization of EST by | |||
constrained devices in constrained networks, some classes of devices | constrained devices in constrained networks, some classes of devices | |||
[RFC7228] will not have enough resources to handle the payloads that | [RFC7228] will not have enough resources to handle the payloads that | |||
come with EST-coaps. The specification of EST-coaps is intended to | come with EST-coaps. The specification of EST-coaps is intended to | |||
ensure that EST works for networks of constrained devices that choose | ensure that EST works for networks of constrained devices that choose | |||
to limit their communications stack to DTLS/CoAP. It is up to the | to limit their communications stack to DTLS/CoAP. It is up to the | |||
network designer to decide which devices execute the EST protocol and | network designer to decide which devices execute the EST protocol and | |||
which do not. | which do not. | |||
9. IANA Considerations | 8. IANA Considerations | |||
9.1. Content-Format Registry | 8.1. Content-Formats Registry | |||
Additions to the sub-registry "CoAP Content-Formats", within the | IANA has registered the following Content-Formats given in Table 5 in | |||
"CoRE Parameters" registry [COREparams] are specified in Table 5. | the "CoAP Content-Formats" subregistry within the "CoRE Parameters" | |||
These have been registered provisionally in the IETF Review or IESG | registry [CORE-PARAMS]. These have been registered in the IETF | |||
Approval range (256-9999). | Review or IESG Approval range (256-9999). | |||
+------------------------------+-------+----------------------------+ | +=================================+=====+====================+ | |||
| HTTP Content-Type | ID | Reference | | | Media Type | ID | Reference | | |||
+------------------------------+-------+----------------------------+ | +=================================+=====+====================+ | |||
| application/pkcs7-mime; | 280 | [RFC7030] [I-D.ietf-lamps- | | | application/pkcs7-mime; smime- | 280 | [RFC7030] | | |||
| smime-type=server-generated- | | rfc5751-bis] [ThisRFC] | | | type=server-generated-key | | [RFC8551] RFC 9148 | | |||
| key | | | | +---------------------------------+-----+--------------------+ | |||
| application/pkcs7-mime; | 281 | [I-D.ietf-lamps-rfc5751-bi | | | application/pkcs7-mime; smime- | 281 | [RFC8551] RFC 9148 | | |||
| smime-type=certs-only | | s] [ThisRFC] | | | type=certs-only | | | | |||
| application/pkcs8 | 284 | [RFC5958] [I-D.ietf-lamps- | | +---------------------------------+-----+--------------------+ | |||
| | | rfc5751-bis] [ThisRFC] | | | application/pkcs8 | 284 | [RFC5958] | | |||
| application/csrattrs | 285 | [RFC7030] | | | | | [RFC8551] RFC 9148 | | |||
| application/pkcs10 | 286 | [RFC5967] [I-D.ietf-lamps- | | +---------------------------------+-----+--------------------+ | |||
| | | rfc5751-bis] [ThisRFC] | | | application/csrattrs | 285 | [RFC7030] RFC 9148 | | |||
| application/pkix-cert | TBD28 | [RFC2585] [ThisRFC] | | +---------------------------------+-----+--------------------+ | |||
| | 7 | | | | application/pkcs10 | 286 | [RFC5967] | | |||
+------------------------------+-------+----------------------------+ | | | | [RFC8551] RFC 9148 | | |||
+---------------------------------+-----+--------------------+ | ||||
| application/pkix-cert | 287 | [RFC2585] RFC 9148 | | ||||
+---------------------------------+-----+--------------------+ | ||||
Table 5: New CoAP Content-Formats | Table 5: New CoAP Content-Formats | |||
It is suggested that 287 is allocated to TBD287. | 8.2. Resource Type Registry | |||
9.2. Resource Type registry | IANA has registered the following Resource Type (rt=) Link Target | |||
Attributes given in Table 6 in the "Resource Type (rt=) Link Target | ||||
Attribute Values" subregistry under the "Constrained RESTful | ||||
Environments (CoRE) Parameters" registry. | ||||
This memo registers new Resource Type (rt=) Link Target Attributes in | +==============+===================================+===========+ | |||
the "Resource Type (rt=) Link Target Attribute Values" subregistry | | Value | Description | Reference | | |||
under the "Constrained RESTful Environments (CoRE) Parameters" | +==============+===================================+===========+ | |||
registry. | | ace.est.crts | This resource depicts the support | RFC 9148 | | |||
| | of EST GET cacerts. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
| ace.est.sen | This resource depicts the support | RFC 9148 | | ||||
| | of EST simple enroll. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
| ace.est.sren | This resource depicts the support | RFC 9148 | | ||||
| | of EST simple reenroll. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
| ace.est.att | This resource depicts the support | RFC 9148 | | ||||
| | of EST GET CSR attributes. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
| ace.est.skg | This resource depicts the support | RFC 9148 | | ||||
| | of EST server-side key generation | | | ||||
| | with the returned certificate in | | | ||||
| | a PKCS #7 container. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
| ace.est.skc | This resource depicts the support | RFC 9148 | | ||||
| | of EST server-side key generation | | | ||||
| | with the returned certificate in | | | ||||
| | application/pkix-cert format. | | | ||||
+--------------+-----------------------------------+-----------+ | ||||
o rt="ace.est.crts". This resource depicts the support of EST get | Table 6: New Resource Type (rt=) Link Target Attributes | |||
cacerts. | ||||
o rt="ace.est.sen". This resource depicts the support of EST simple | 8.3. Well-Known URIs Registry | |||
enroll. | ||||
o rt="ace.est.sren". This resource depicts the support of EST | IANA has added an additional reference to the est URI in the "Well- | |||
simple reenroll. | Known URIs" registry: | |||
o rt="ace.est.att". This resource depicts the support of EST get | URI Suffix: est | |||
CSR attributes. | ||||
o rt="ace.est.skg". This resource depicts the support of EST | Change Controller: IETF | |||
server-side key generation with the returned certificate in a | ||||
PKCS#7 container. | ||||
o rt="ace.est.skc". This resource depicts the support of EST | References: [RFC7030] RFC 9148 | |||
server-side key generation with the returned certificate in | ||||
application/pkix-cert format. | ||||
9.3. Well-Known URIs Registry | Status: permanent | |||
A new additional reference is requested for the est URI in the Well- | Related Information: | |||
Known URIs registry: | ||||
+------+--------+---------+---------+----------+---------+----------+ | Date Registered: 2013-08-16 | |||
| URI | Change | Referen | Status | Related | Date Re | Date | | ||||
| Suff | Contro | ces | | Informat | gistere | Modified | | ||||
| ix | ller | | | ion | d | | | ||||
+------+--------+---------+---------+----------+---------+----------+ | ||||
| est | IETF | [RFC703 | permane | | 2013-08 | [THIS | | ||||
| | | 0] | nt | | -16 | RFC's pu | | ||||
| | | [THIS | | | | blicatio | | ||||
| | | RFC] | | | | n date] | | ||||
+------+--------+---------+---------+----------+---------+----------+ | ||||
10. Security Considerations | Date Modified: 2020-04-29 | |||
10.1. EST server considerations | 9. Security Considerations | |||
The security considerations of Section 6 of [RFC7030] are only | 9.1. EST Server Considerations | |||
The security considerations in Section 6 of [RFC7030] are only | ||||
partially valid for the purposes of this document. As HTTP Basic | partially valid for the purposes of this document. As HTTP Basic | |||
Authentication is not supported, the considerations expressed for | Authentication is not supported, the considerations expressed for | |||
using passwords do not apply. The other portions of the security | using passwords do not apply. The other portions of the security | |||
considerations of [RFC7030] continue to apply. | considerations in [RFC7030] continue to apply. | |||
Modern security protocols require random numbers to be available | Modern security protocols require random numbers to be available | |||
during the protocol run, for example for nonces and ephemeral (EC) | during the protocol run, for example, for nonces and ephemeral (EC) | |||
Diffie-Hellman key generation. This capability to generate random | Diffie-Hellman key generation. This capability to generate random | |||
numbers is also needed when the constrained device generates the | numbers is also needed when the constrained device generates the | |||
private key (that corresponds to the public key enrolled in the CSR). | private key (that corresponds to the public key enrolled in the CSR). | |||
When server-side key generation is used, the constrained device | When server-side key generation is used, the constrained device | |||
depends on the server to generate the private key randomly, but it | depends on the server to generate the private key randomly, but it | |||
still needs locally generated random numbers for use in security | still needs locally generated random numbers for use in security | |||
protocols, as explained in Section 12 of [RFC7925]. Additionally, | protocols, as explained in Section 12 of [RFC7925]. Additionally, | |||
the transport of keys generated at the server is inherently risky. | the transport of keys generated at the server is inherently risky. | |||
For those deploying server-side key generation, analysis SHOULD be | For those deploying server-side key generation, analysis SHOULD be | |||
done to establish whether server-side key generation increases or | done to establish whether server-side key generation increases or | |||
decreases the probability of digital identity theft. | decreases the probability of digital identity theft. | |||
It is important to note that, as pointed out in [PsQs], sources | It is important to note that, as pointed out in [PsQs], sources | |||
contributing to the randomness pool used to generate random numbers | contributing to the randomness pool used to generate random numbers | |||
on laptops or desktop PCs, such as mouse movement, timing of | on laptops or desktop PCs, such as mouse movement, timing of | |||
keystrokes, or air turbulence on the movement of hard drive heads, | keystrokes, or air turbulence on the movement of hard drive heads, | |||
are not available on many constrained devices. Other sources have to | are not available on many constrained devices. Other sources have to | |||
be used or dedicated hardware has to be added. Selecting hardware | be used or dedicated hardware has to be added. Selecting hardware | |||
for an IoT device that is capable of producing high-quality random | for an IoT device that is capable of producing high-quality random | |||
numbers is therefore important [RSAfact]. | numbers is therefore important [RSA-FACT]. | |||
As discussed in Section 6 of [RFC7030], it is "RECOMMENDED that the | As discussed in Section 6 of [RFC7030], it is | |||
Implicit Trust Anchor database used for EST server authentication is | ||||
carefully managed to reduce the chance of a third-party CA with poor | ||||
certification practices jeopardizing authentication. Disabling the | ||||
Implicit Trust Anchor database after successfuly receiving the | ||||
Distribution of CA certificates response (Section 4.1.3) limits any | ||||
risk to the first TLS exchange". Alternatively, in a case where a | ||||
/sen request immediately follows a /crts, a client MAY choose to keep | ||||
the connection authenticated by the Implicit TA open for efficiency | ||||
reasons (Section 4). A client that interleaves EST-coaps /crts | ||||
request with other requests in the same DTLS connection SHOULD | ||||
revalidate the server certificate chain against the updated Explicit | ||||
TA from the /crts response before proceeding with the subsequent | ||||
requests. If the server certificate chain does not authenticate | ||||
against the database, the client SHOULD close the connection without | ||||
completing the rest of the requests. The updated Explicit TA MUST | ||||
continue to be used in new DTLS connections. | ||||
In cases where the IDevID used to authenticate the client is expired | | RECOMMENDED that the Implicit Trust Anchor database used for EST | |||
the server MAY still authenticate the client because IDevIDs are | | server authentication be carefully managed to reduce the chance of | |||
expected to live as long as the device itself (Section 4). In such | | a third-party CA with poor certification practices from being | |||
occasions, checking the certificate revocation status or authorizing | | trusted. Disabling the Implicit Trust Anchor database after | |||
the client using another method is important for the server to raise | | successfully receiving the Distribution of CA certificates | |||
its confidence that the client can be trusted. | | response ([RFC7030], Section 6) limits any vulnerability to the | |||
| first TLS exchange. | ||||
Alternatively, in a case where a /sen request immediately follows a | ||||
/crts, a client MAY choose to keep the connection authenticated by | ||||
the Implicit TA open for efficiency reasons (Section 3). A client | ||||
that interleaves EST-coaps /crts request with other requests in the | ||||
same DTLS connection SHOULD revalidate the server certificate chain | ||||
against the updated Explicit TA from the /crts response before | ||||
proceeding with the subsequent requests. If the server certificate | ||||
chain does not authenticate against the database, the client SHOULD | ||||
close the connection without completing the rest of the requests. | ||||
The updated Explicit TA MUST continue to be used in new DTLS | ||||
connections. | ||||
In cases where the Initial Device Identifier (IDevID) used to | ||||
authenticate the client is expired, the server MAY still authenticate | ||||
the client because IDevIDs are expected to live as long as the device | ||||
itself (Section 3). In such occasions, checking the certificate | ||||
revocation status or authorizing the client using another method is | ||||
important for the server to raise its confidence that the client can | ||||
be trusted. | ||||
In accordance with [RFC7030], TLS cipher suites that include | In accordance with [RFC7030], TLS cipher suites that include | |||
"_EXPORT_" and "_DES_" in their names MUST NOT be used. More | "_EXPORT_" and "_DES_" in their names MUST NOT be used. More | |||
recommendations for secure use of TLS and DTLS are included in | recommendations for secure use of TLS and DTLS are included in | |||
[BCP195]. | [BCP195]. | |||
As described in CMC, Section 6.7 of [RFC5272], "For keys that can be | As described in Certificate Management over CMS (CMC), Section 6.7 of | |||
used as signature keys, signing the certification request with the | [RFC5272], "For keys that can be used as signature keys, signing the | |||
private key serves as a PoP on that key pair". The inclusion of tls- | certification request with the private key serves as a POP on that | |||
unique in the certificate request links the proof-of-possession to | key pair". In (D)TLS 1.2, the inclusion of tls-unique in the | |||
the TLS proof-of-identity. This implies but does not prove that only | certificate request links the proof-of-possession to the (D)TLS | |||
the authenticated client currently has access to the private key. | proof-of-identity. This implies but does not prove that only the | |||
authenticated client currently has access to the private key. | ||||
What's more, CMC PoP linking uses tls-unique as it is defined in | What's more, CMC POP linking uses tls-unique as it is defined in | |||
[RFC5929]. The 3SHAKE attack [tripleshake] poses a risk by allowing | [RFC5929]. The 3SHAKE attack [TRIPLESHAKE] poses a risk by allowing | |||
a man-in-the-middle to leverage session resumption and renegotiation | an on-path active attacker to leverage session resumption and | |||
to inject himself between a client and server even when channel | renegotiation to inject itself between a client and server even when | |||
binding is in use. Implementers should use the Extended Master | channel binding is in use. Implementers should use the Extended | |||
Secret Extension in DTLS [RFC7627] to prevent such attacks. In the | Master Secret Extension in DTLS [RFC7627] to prevent such attacks. | |||
context of this specification, an attacker could invalidate the | In the context of this specification, an attacker could invalidate | |||
purpose of the PoP linking ChallengePassword in the client request by | the purpose of the POP linking challengePassword in the client | |||
resuming an EST-coaps connection. Even though the practical risk of | request by resuming an EST-coaps connection. Even though the | |||
such an attack to EST-coaps is not devastating, we would rather use a | practical risk of such an attack to EST-coaps is not devastating, we | |||
more secure channel binding mechanism. Such a mechanism could | would rather use a more secure channel-binding mechanism. In this | |||
include an updated tls-unique value generation like the tls-unique- | specification, we still depend on the tls-unique mechanism defined in | |||
prf defined in [I-D.josefsson-sasl-tls-cb] by using a TLS exporter | [RFC5929] for DTLS 1.2 because a 3SHAKE attack does not expose | |||
[RFC5705] in TLS 1.2 or TLS 1.3's updated exporter (Section 7.5 of | messages exchanged with EST-coaps. But for DTLS 1.3, | |||
[RFC8446]) value in place of the tls-unique value in the CSR. Such | [TLS13-CHANNEL-BINDINGS] is used instead to derive a 32-byte tls- | |||
mechanism has not been standardized yet. Adopting a channel binding | exporter binding in place of the tls-unique value in the CSR. That | |||
value generated from an exporter would break backwards compatibility | would alleviate the risks from the 3SHAKE attack [TRIPLESHAKE]. | |||
for an RA that proxies through to a classic EST server. Thus, in | ||||
this specification we still depend on the tls-unique mechanism | ||||
defined in [RFC5929], especially since a 3SHAKE attack does not | ||||
expose messages exchanged with EST-coaps. | ||||
Interpreters of ASN.1 structures should be aware of the use of | Interpreters of ASN.1 structures should be aware of the use of | |||
invalid ASN.1 length fields and should take appropriate measures to | invalid ASN.1 length fields and should take appropriate measures to | |||
guard against buffer overflows, stack overruns in particular, and | guard against buffer overflows, stack overruns in particular, and | |||
malicious content in general. | malicious content in general. | |||
10.2. HTTPS-CoAPS Registrar considerations | 9.2. HTTPS-CoAPS Registrar Considerations | |||
The Registrar proposed in Section 6 must be deployed with care, and | The Registrar proposed in Section 5 must be deployed with care and | |||
only when direct client-server connections are not possible. When | only when direct client-server connections are not possible. When | |||
PoP linking is used the Registrar terminating the DTLS connection | POP linking is used, the Registrar terminating the DTLS connection | |||
establishes a new TLS connection with the upstream CA. Thus, it is | establishes a new TLS connection with the upstream CA. Thus, it is | |||
impossible for PoP linking to be enforced end-to-end for the EST | impossible for POP linking to be enforced end to end for the EST | |||
transaction. The EST server could be configured to accept PoP | transaction. The EST server could be configured to accept POP | |||
linking information that does not match the current TLS session | linking information that does not match the current TLS session | |||
because the authenticated EST Registrar is assumed to have verified | because the authenticated EST Registrar is assumed to have verified | |||
PoP linking downstream to the client. | POP linking downstream to the client. | |||
The introduction of an EST-coaps-to-HTTP Registrar assumes the client | The introduction of an EST-coaps-to-HTTP Registrar assumes the client | |||
can authenticate the Registrar using its implicit or explicit TA | can authenticate the Registrar using its implicit or explicit TA | |||
database. It also assumes the Registrar has a trust relationship | database. It also assumes the Registrar has a trust relationship | |||
with the upstream EST server in order to act on behalf of the | with the upstream EST server in order to act on behalf of the | |||
clients. When a client uses the Implicit TA database for certificate | clients. When a client uses the Implicit TA database for certificate | |||
validation, it SHOULD confirm if the server is acting as an RA by the | validation, it SHOULD confirm if the server is acting as an RA by the | |||
presence of the id-kp-cmcRA EKU [RFC6402] in the server certificate. | presence of the id-kp-cmcRA EKU [RFC6402] in the server certificate. | |||
In a server-side key generation case, if no end-to-end encryption is | 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 | used, the Registrar may be able see the private key as it acts as a | |||
man-in-the-middle. Thus, the client puts its trust on the Registrar | man in the middle. Thus, the client puts its trust on the Registrar | |||
not exposing the private key. | not exposing the private key. | |||
Clients that leverage server-side key generation without end-to-end | Clients that leverage server-side key generation without end-to-end | |||
encryption of the private key (Section 5.8) have no knowledge if the | encryption of the private key (Section 4.8) have no knowledge as to | |||
Registrar will be generating the private key and enrolling the | whether the Registrar will be generating the private key and | |||
certificates with the CA or if the CA will be responsible for | enrolling the certificates with the CA or if the CA will be | |||
generating the key. In such cases, the existence of a Registrar | responsible for generating the key. In such cases, the existence of | |||
requires the client to put its trust on the registrar when it is | a Registrar requires the client to put its trust on the Registrar | |||
generating the private key. | when it is generating the private key. | |||
11. Contributors | ||||
Martin Furuhed contributed to the EST-coaps specification by | ||||
providing feedback based on the Nexus EST over CoAPS server | ||||
implementation that started in 2015. Sandeep Kumar kick-started this | ||||
specification and was instrumental in drawing attention to the | ||||
importance of the subject. | ||||
12. Acknowledgements | ||||
The authors are very grateful to 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 Esko | ||||
Dijk and Michael Verschoor for the valuable discussions that helped | ||||
in shaping the solution. They would also like to thank Peter | ||||
Panburana for his feedback on technical details of the solution. | ||||
Constructive comments were received from Benjamin Kaduk, Eliot Lear, | ||||
Jim Schaad, Hannes Tschofenig, Julien Vermillard, John Manuel, Oliver | ||||
Pfaff, Pete Beal and Carsten Bormann. | ||||
Interop tests were done by Oliver Pfaff, Thomas Werner, Oskar | ||||
Camezind, Bjorn Elmers and Joel Hoglund. | ||||
Robert Moskowitz provided code to create the examples. | ||||
13. References | ||||
13.1. Normative References | ||||
[I-D.ietf-core-multipart-ct] | ||||
Fossati, T., Hartke, K., and C. Bormann, "Multipart | ||||
Content-Format for CoAP", draft-ietf-core-multipart-ct-04 | ||||
(work in progress), August 2019. | ||||
[I-D.ietf-lamps-rfc5751-bis] | 10. References | |||
Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | ||||
Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | ||||
Message Specification", draft-ietf-lamps-rfc5751-bis-12 | ||||
(work in progress), September 2018. | ||||
[I-D.ietf-tls-dtls13] | 10.1. Normative References | |||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", draft-ietf-tls-dtls13-34 (work in progress), | ||||
November 2019. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | [RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | |||
Infrastructure Operational Protocols: FTP and HTTP", | Infrastructure Operational Protocols: FTP and HTTP", | |||
RFC 2585, DOI 10.17487/RFC2585, May 1999, | RFC 2585, DOI 10.17487/RFC2585, May 1999, | |||
<https://www.rfc-editor.org/info/rfc2585>. | <https://www.rfc-editor.org/info/rfc2585>. | |||
skipping to change at page 30, line 41 ¶ | skipping to change at line 1227 ¶ | |||
[RFC8422] Nir, Y., Josefsson, S., and M. Pegourie-Gonnard, "Elliptic | [RFC8422] Nir, Y., Josefsson, S., and M. Pegourie-Gonnard, "Elliptic | |||
Curve Cryptography (ECC) Cipher Suites for Transport Layer | Curve Cryptography (ECC) Cipher Suites for Transport Layer | |||
Security (TLS) Versions 1.2 and Earlier", RFC 8422, | Security (TLS) Versions 1.2 and Earlier", RFC 8422, | |||
DOI 10.17487/RFC8422, August 2018, | DOI 10.17487/RFC8422, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8422>. | <https://www.rfc-editor.org/info/rfc8422>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
13.2. Informative References | [RFC8551] Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | |||
Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | ||||
Message Specification", RFC 8551, DOI 10.17487/RFC8551, | ||||
April 2019, <https://www.rfc-editor.org/info/rfc8551>. | ||||
[RFC8710] Fossati, T., Hartke, K., and C. Bormann, "Multipart | ||||
Content-Format for the Constrained Application Protocol | ||||
(CoAP)", RFC 8710, DOI 10.17487/RFC8710, February 2020, | ||||
<https://www.rfc-editor.org/info/rfc8710>. | ||||
[RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", RFC 9147, DOI 10.17487/RFC9147, August 2021, | ||||
<https://www.rfc-editor.org/info/rfc9147>. | ||||
10.2. Informative References | ||||
[BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
"Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", BCP 195, RFC 7525, May 2015, | (DTLS)", BCP 195, RFC 7525, May 2015. | |||
<https://www.rfc-editor.org/info/bcp195>. | ||||
[COREparams] | ||||
"Constrained RESTful Environments (CoRE) Parameters", | ||||
<https://www.iana.org/assignments/core-parameters/core- | ||||
parameters.xhtml>. | ||||
[I-D.ietf-tls-dtls-connection-id] | <https://www.rfc-editor.org/info/bcp195> | |||
Rescorla, E., Tschofenig, H., and T. Fossati, "Connection | ||||
Identifiers for DTLS 1.2", draft-ietf-tls-dtls-connection- | ||||
id-07 (work in progress), October 2019. | ||||
[I-D.josefsson-sasl-tls-cb] | [CORE-PARAMS] | |||
Josefsson, S., "Channel Bindings for TLS based on the | IANA, "Constrained RESTful Environments (CoRE) | |||
PRF", draft-josefsson-sasl-tls-cb-03 (work in progress), | Parameters", | |||
March 2015. | <https://www.iana.org/assignments/core-parameters/>. | |||
[I-D.moskowitz-ecdsa-pki] | [IEEE802.15.4] | |||
Moskowitz, R., Birkholz, H., Xia, L., and M. Richardson, | IEEE, "IEEE 802.15.4-2020 - IEEE Standard for Low-Rate | |||
"Guide for building an ECC pki", draft-moskowitz-ecdsa- | Wireless Networks", May 2020. | |||
pki-07 (work in progress), August 2019. | ||||
[ieee802.15.4] | [IEEE802.1AR] | |||
"IEEE Standard 802.15.4-2006", 2006. | IEEE, "IEEE Standard for Local and metropolitan area | |||
networks - Secure Device Identity", December 2009. | ||||
[ieee802.1ar] | [PKI-GUIDE] | |||
"IEEE 802.1AR Secure Device Identifier", December 2009. | Moskowitz, R., Birkholz, H., Xia, L., and M. Richardson, | |||
"Guide for building an ECC pki", Work in Progress, | ||||
Internet-Draft, draft-moskowitz-ecdsa-pki-10, 31 January | ||||
2021, <https://datatracker.ietf.org/doc/html/draft- | ||||
moskowitz-ecdsa-pki-10>. | ||||
[PsQs] "Mining Your Ps and Qs: Detection of Widespread Weak Keys | [PsQs] Heninger, N., Durumeric, Z., Wustrow, E., and J. Alex | |||
in Network Devices", USENIX Security Symposium 2012 ISBN | Halderman, "Mining Your Ps and Qs: Detection of Widespread | |||
978-931971-95-9, August 2012. | Weak Keys in Network Devices", USENIX Security Symposium | |||
2012, ISBN 978-931971-95-9, August 2012. | ||||
[RFC4919] Kushalnagar, N., Montenegro, G., and C. Schumacher, "IPv6 | [RFC4919] Kushalnagar, N., Montenegro, G., and C. Schumacher, "IPv6 | |||
over Low-Power Wireless Personal Area Networks (6LoWPANs): | over Low-Power Wireless Personal Area Networks (6LoWPANs): | |||
Overview, Assumptions, Problem Statement, and Goals", | Overview, Assumptions, Problem Statement, and Goals", | |||
RFC 4919, DOI 10.17487/RFC4919, August 2007, | RFC 4919, DOI 10.17487/RFC4919, August 2007, | |||
<https://www.rfc-editor.org/info/rfc4919>. | <https://www.rfc-editor.org/info/rfc4919>. | |||
[RFC5272] Schaad, J. and M. Myers, "Certificate Management over CMS | [RFC5272] Schaad, J. and M. Myers, "Certificate Management over CMS | |||
(CMC)", RFC 5272, DOI 10.17487/RFC5272, June 2008, | (CMC)", RFC 5272, DOI 10.17487/RFC5272, June 2008, | |||
<https://www.rfc-editor.org/info/rfc5272>. | <https://www.rfc-editor.org/info/rfc5272>. | |||
[RFC5705] Rescorla, E., "Keying Material Exporters for Transport | ||||
Layer Security (TLS)", RFC 5705, DOI 10.17487/RFC5705, | ||||
March 2010, <https://www.rfc-editor.org/info/rfc5705>. | ||||
[RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings | [RFC5929] Altman, J., Williams, N., and L. Zhu, "Channel Bindings | |||
for TLS", RFC 5929, DOI 10.17487/RFC5929, July 2010, | for TLS", RFC 5929, DOI 10.17487/RFC5929, July 2010, | |||
<https://www.rfc-editor.org/info/rfc5929>. | <https://www.rfc-editor.org/info/rfc5929>. | |||
[RFC6402] Schaad, J., "Certificate Management over CMS (CMC) | [RFC6402] Schaad, J., "Certificate Management over CMS (CMC) | |||
Updates", RFC 6402, DOI 10.17487/RFC6402, November 2011, | Updates", RFC 6402, DOI 10.17487/RFC6402, November 2011, | |||
<https://www.rfc-editor.org/info/rfc6402>. | <https://www.rfc-editor.org/info/rfc6402>. | |||
[RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for | |||
Constrained-Node Networks", RFC 7228, | Constrained-Node Networks", RFC 7228, | |||
skipping to change at page 32, line 34 ¶ | skipping to change at line 1323 ¶ | |||
[RFC7627] Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A., | [RFC7627] Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A., | |||
Langley, A., and M. Ray, "Transport Layer Security (TLS) | Langley, A., and M. Ray, "Transport Layer Security (TLS) | |||
Session Hash and Extended Master Secret Extension", | Session Hash and Extended Master Secret Extension", | |||
RFC 7627, DOI 10.17487/RFC7627, September 2015, | RFC 7627, DOI 10.17487/RFC7627, September 2015, | |||
<https://www.rfc-editor.org/info/rfc7627>. | <https://www.rfc-editor.org/info/rfc7627>. | |||
[RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | |||
for Security", RFC 7748, DOI 10.17487/RFC7748, January | for Security", RFC 7748, DOI 10.17487/RFC7748, January | |||
2016, <https://www.rfc-editor.org/info/rfc7748>. | 2016, <https://www.rfc-editor.org/info/rfc7748>. | |||
[RSAfact] "Factoring RSA keys from certified smart cards: | [RFC9146] Rescorla, E., Ed., Tschofenig, H., Ed., Fossati, T., and | |||
Coppersmith in the wild", Advances in Cryptology | A. Kraus, "Connection Identifiers for DTLS 1.2", RFC 9146, | |||
- ASIACRYPT 2013, August 2013. | DOI 10.17487/RFC9146, August 2021, | |||
<https://www.rfc-editor.org/info/rfc9146>. | ||||
[tripleshake] | [RSA-FACT] Bernstein, D., Chang, Y., Cheng, C., Chou, L., Heninger, | |||
"Triple Handshakes and Cookie Cutters: Breaking and Fixing | N., Lange, T., and N. Someren, "Factoring RSA keys from | |||
Authentication over TLS", IEEE Security and Privacy ISBN | certified smart cards: Coppersmith in the wild", Advances | |||
978-1-4799-4686-0, May 2014. | in Cryptology - ASIACRYPT 2013, August 2013. | |||
Appendix A. EST messages to EST-coaps | [TLS13-CHANNEL-BINDINGS] | |||
Whited, S., "Channel Bindings for TLS 1.3", Work in | ||||
Progress, Internet-Draft, draft-ietf-kitten-tls-channel- | ||||
bindings-for-tls13-15, 4 March 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-kitten- | ||||
tls-channel-bindings-for-tls13-15>. | ||||
[TRIPLESHAKE] | ||||
Bhargavan, B., Delignat-Lavaud, A., Fournet, C., Pironti, | ||||
A., and P. Strub, "Triple Handshakes and Cookie Cutters: | ||||
Breaking and Fixing Authentication over TLS", | ||||
ISBN 978-1-4799-4686-0, DOI 10.1109/SP.2014.14, May 2014, | ||||
<https://doi.org/10.1109/SP.2014.14>. | ||||
Appendix A. EST Messages to EST-coaps | ||||
This section shows similar examples to the ones presented in | This section shows similar examples to the ones presented in | |||
Appendix A of [RFC7030]. The payloads in the examples are the hex | Appendix A of [RFC7030]. The payloads in the examples are the hex- | |||
encoded binary, generated with 'xxd -p', of the PKI certificates | encoded binary, generated with 'xxd -p', of the PKI certificates | |||
created following [I-D.moskowitz-ecdsa-pki]. Hex is used for | created following [PKI-GUIDE]. Hex is used for visualization | |||
visualization purposes because a binary representation cannot be | purposes because a binary representation cannot be rendered well in | |||
rendered well in text. The hexadecimal representations would not be | text. The hexadecimal representations would not be transported in | |||
transported in hex, but in binary. The payloads are shown | hex, but in binary. The payloads are shown unencrypted. In | |||
unencrypted. In practice the message content would be transferred | practice, the message content would be transferred over an encrypted | |||
over an encrypted DTLS channel. | DTLS channel. | |||
The certificate responses included in the examples contain Content- | The certificate responses included in the examples contain Content- | |||
Format 281 (application/pkcs7). If the client had requested Content- | Format 281 (application/pkcs7). If the client had requested Content- | |||
Format TBD287 (application/pkix-cert) by querying /est/skc, the | Format 287 (application/pkix-cert), the server would respond with a | |||
server would respond with a single DER binary certificate in the | single DER binary certificate. That certificate would be in a | |||
multipart-core container. | multipart-core container specifically in the case of a response to a | |||
/est/skc query. | ||||
These examples assume a short resource path of "/est". Even though | These examples assume a short resource path of "/est". Even though | |||
omitted from the examples for brevity, before making the EST-coaps | omitted from the examples for brevity, before making the EST-coaps | |||
requests, a client would learn about the server supported 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 | resources with a GET request for /.well-known/core?rt=ace.est* as | |||
explained in Section 5.1. | explained in Section 4.1. | |||
The corresponding CoAP headers are only shown in Appendix A.1. | The corresponding CoAP headers are only shown in Appendix A.1. | |||
Creating CoAP headers is assumed to be generally understood. | Creating CoAP headers is assumed to be generally understood. | |||
The message content breakdown is presented in Appendix C. | The message content is presented in plain text in Appendix C. | |||
A.1. cacerts | A.1. cacerts | |||
In EST-coaps, a cacerts message can be: | In EST-coaps, a cacerts message can be the following: | |||
GET example.com:9085/est/crts | GET example.com:9085/est/crts | |||
(Accept: 281) | (Accept: 281) | |||
The corresponding CoAP header fields are shown below. The use of | The corresponding CoAP header fields are shown below. The use of | |||
block and DTLS are worked out in Appendix B. | block and DTLS are shown in Appendix B. | |||
Ver = 1 | 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" | |||
skipping to change at page 34, line 34 ¶ | skipping to change at line 1416 ¶ | |||
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] | |||
As specified in Section 5.10.1 of [RFC7252], the Uri-Host and Uri- | As specified in Section 5.10.1 of [RFC7252], the Uri-Host and Uri- | |||
Port Options can be omitted if they coincide with the transport | Port Options can be omitted if they coincide with the transport | |||
protocol destination address and port respectively. | protocol destination address and port, respectively. | |||
A 2.05 Content response with a cert in EST-coaps will then be | A 2.05 Content response with a cert in EST-coaps will then be the | |||
following: | ||||
2.05 Content (Content-Format: 281) | 2.05 Content (Content-Format: 281) | |||
{payload with certificate in binary format} | {payload with certificate in binary format} | |||
with CoAP fields | With the following CoAP fields: | |||
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 page 35, line 42 ¶ | skipping to change at line 1464 ¶ | |||
595fcc8e37f8e4354497011be90e56794bd91ad951ab45a3818430818130 | 595fcc8e37f8e4354497011be90e56794bd91ad951ab45a3818430818130 | |||
1d0603551d0e041604141df1208944d77b5f1d9dcb51ee244a523f3ef5de | 1d0603551d0e041604141df1208944d77b5f1d9dcb51ee244a523f3ef5de | |||
301f0603551d230418301680141df1208944d77b5f1d9dcb51ee244a523f | 301f0603551d230418301680141df1208944d77b5f1d9dcb51ee244a523f | |||
3ef5de300f0603551d130101ff040530030101ff300e0603551d0f0101ff | 3ef5de300f0603551d130101ff040530030101ff300e0603551d0f0101ff | |||
040403020106301e0603551d110417301581136365727469667940657861 | 040403020106301e0603551d110417301581136365727469667940657861 | |||
6d706c652e636f6d300a06082a8648ce3d040302034800304502202b891d | 6d706c652e636f6d300a06082a8648ce3d040302034800304502202b891d | |||
d411d07a6d6f621947635ba4c43165296b3f633726f02e51ecf464bd4002 | d411d07a6d6f621947635ba4c43165296b3f633726f02e51ecf464bd4002 | |||
2100b4be8a80d08675f041fbc719acf3b39dedc85dc92b3035868cb2daa8 | 2100b4be8a80d08675f041fbc719acf3b39dedc85dc92b3035868cb2daa8 | |||
f05db196a1003100 | f05db196a1003100 | |||
The breakdown of the payload is shown in Appendix C.1. | The payload is shown in plain text in Appendix C.1. | |||
A.2. enroll / reenroll | A.2. enroll / reenroll | |||
During the (re-)enroll exchange the EST-coaps client uses a CSR | During the (re-)enroll exchange, the EST-coaps client uses a CSR | |||
(Content-Format 286) request in the POST request payload. The Accept | (Content-Format 286) request in the POST request payload. The Accept | |||
option tells the server that the client is expecting Content-Format | Option tells the server that the client is expecting Content-Format | |||
281 (PKCS#7) in the response. As shown in Appendix C.2, the CSR | 281 (PKCS #7) in the response. As shown in Appendix C.2, the CSR | |||
contains a ChallengePassword which is used for PoP linking | contains a challengePassword, which is used for POP linking | |||
(Section 4). | (Section 3). | |||
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. ] | |||
skipping to change at page 37, line 35 ¶ | skipping to change at line 1532 ¶ | |||
ff958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b56 | ff958d75419d81a6a245dffae790be95cf75f602f9152618f816a2b23b56 | |||
38e59fd9a3818a30818730090603551d1304023000301d0603551d0e0416 | 38e59fd9a3818a30818730090603551d1304023000301d0603551d0e0416 | |||
041496600d8716bf7fd0e752d0ac760777ad665d02a0301f0603551d2304 | 041496600d8716bf7fd0e752d0ac760777ad665d02a0301f0603551d2304 | |||
183016801468d16551f951bfc82a431d0d9f08bc2d205b1160300e060355 | 183016801468d16551f951bfc82a431d0d9f08bc2d205b1160300e060355 | |||
1d0f0101ff0404030205a0302a0603551d1104233021a01f06082b060105 | 1d0f0101ff0404030205a0302a0603551d1104233021a01f06082b060105 | |||
05070804a013301106092b06010401b43b0a01040401020304300a06082a | 05070804a013301106092b06010401b43b0a01040401020304300a06082a | |||
8648ce3d0403020349003046022100c0d81996d2507d693f3c48eaa5ee94 | 8648ce3d0403020349003046022100c0d81996d2507d693f3c48eaa5ee94 | |||
91bda6db214099d98117c63b361374cd86022100a774989f4c321a5cf25d | 91bda6db214099d98117c63b361374cd86022100a774989f4c321a5cf25d | |||
832a4d336a08ad67df20f1506421188a0ade6d349236a1003100 | 832a4d336a08ad67df20f1506421188a0ade6d349236a1003100 | |||
The breakdown of the request and response is shown in Appendix C.2. | The request and response is shown in plain text in Appendix C.2. | |||
A.3. serverkeygen | A.3. serverkeygen | |||
In a serverkeygen exchange the CoAP POST request looks like | In a serverkeygen exchange, the CoAP POST request looks like the | |||
following: | ||||
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 | |||
The response would follow [I-D.ietf-core-multipart-ct] and could look | The response would follow [RFC8710] and could look like the | |||
like | following: | |||
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 page 39, line 40 ¶ | skipping to change at line 1596 ¶ | |||
2618f816a2b23b5638e59fd9a37b307930090603551d1304023000302c06 | 2618f816a2b23b5638e59fd9a37b307930090603551d1304023000302c06 | |||
096086480186f842010d041f161d4f70656e53534c2047656e6572617465 | 096086480186f842010d041f161d4f70656e53534c2047656e6572617465 | |||
64204365727469666963617465301d0603551d0e0416041496600d8716bf | 64204365727469666963617465301d0603551d0e0416041496600d8716bf | |||
7fd0e752d0ac760777ad665d02a0301f0603551d2304183016801496600d | 7fd0e752d0ac760777ad665d02a0301f0603551d2304183016801496600d | |||
8716bf7fd0e752d0ac760777ad665d02a0300a06082a8648ce3d04030203 | 8716bf7fd0e752d0ac760777ad665d02a0300a06082a8648ce3d04030203 | |||
48003045022100e95bfa25a08976652246f2d96143da39fce0dc4c9b26b9 | 48003045022100e95bfa25a08976652246f2d96143da39fce0dc4c9b26b9 | |||
cce1f24164cc2b12b602201351fd8eea65764e3459d324e4345ff5b2a915 | cce1f24164cc2b12b602201351fd8eea65764e3459d324e4345ff5b2a915 | |||
38c04976111796b3698bf6379ca1003100 | 38c04976111796b3698bf6379ca1003100 | |||
The private key in the response above is without CMS EnvelopedData | The private key in the response above is without CMS EnvelopedData | |||
and has no additional encryption beyond DTLS (Section 5.8). | and has no additional encryption beyond DTLS (Section 4.8). | |||
The breakdown of the request and response is shown in Appendix C.3 | The request and response is shown in plain text in Appendix C.3. | |||
A.4. csrattrs | A.4. csrattrs | |||
Below is a csrattrs exchange | The following is a csrattrs exchange: | |||
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 | |||
A 2.05 Content response should contain attributes which are relevant | A 2.05 Content response should contain attributes that are relevant | |||
for the authenticated client. This example is copied from | for the authenticated client. This example is copied from | |||
Section A.2 in [RFC7030], where the base64 representation is replaced | Appendix A.2 of [RFC7030], where the base64 representation is | |||
with a hexadecimal representation of the equivalent binary format. | replaced with a hexadecimal representation of the equivalent binary | |||
The EST-coaps server returns attributes that the client can ignore if | format. The EST-coaps server returns attributes that the client can | |||
they are unknown to him. | ignore if they are unknown to the client. | |||
Appendix B. EST-coaps Block message examples | Appendix B. EST-coaps Block Message Examples | |||
Two examples are presented in this section: | Two examples are presented in this section: | |||
1. a cacerts exchange shows the use of Block2 and the block headers | 1. A cacerts exchange shows the use of Block2 and the block headers. | |||
2. an enroll exchange shows the Block1 and Block2 size negotiation | 2. An enroll exchange shows the Block1 and Block2 size negotiation | |||
for request and response payloads. | for request and response payloads. | |||
The payloads are shown unencrypted. In practice the message contents | The payloads are shown unencrypted. In practice, the message | |||
would be binary formatted and transferred over an encrypted DTLS | contents would be binary formatted and transferred over an encrypted | |||
tunnel. The corresponding CoAP headers are only shown in | DTLS tunnel. The corresponding CoAP headers are only shown in | |||
Appendix B.1. Creating CoAP headers is assumed to be generally | Appendix B.1. Creating CoAP headers is assumed to be generally | |||
known. | known. | |||
B.1. cacerts | B.1. cacerts | |||
This section provides a detailed example of the messages using DTLS | This section provides a detailed example of the messages using DTLS | |||
and BLOCK option Block2. The example block length is taken as 64 | and CoAP Option Block2. The example block length is taken as 64, | |||
which gives an SZX value of 2. | which gives an SZX value of 2. | |||
The following is an example of a cacerts exchange over DTLS. The | The following is an example of a cacerts exchange over DTLS. The | |||
content length of the cacerts response in appendix A.1 of [RFC7030] | content length of the cacerts response in Appendix A.1 of [RFC7030] | |||
contains 639 bytes in binary in this example. The CoAP message adds | contains 639 bytes in binary in this example. The CoAP message adds | |||
around 10 bytes in this exmple, the DTLS record around 29 bytes. To | around 10 bytes in this example, and the DTLS record around 29 bytes. | |||
avoid IP fragmentation, the CoAP Block Option is used and an MTU of | To avoid IP fragmentation, the CoAP Block Option is used and an MTU | |||
127 is assumed to stay within one IEEE 802.15.4 packet. To stay | of 127 is assumed to stay within one IEEE 802.15.4 packet. To stay | |||
below the MTU of 127, the payload is split in 9 packets with a | below the MTU of 127, the payload is split in 9 packets with a | |||
payload of 64 bytes each, followed by a last tenth packet of 63 | payload of 64 bytes each, followed by a last tenth packet of 63 | |||
bytes. The client sends an IPv6 packet containing a UDP datagram | bytes. The client sends an IPv6 packet containing a UDP datagram | |||
with DTLS record protection that encapsulates a CoAP request 10 times | with DTLS record protection that encapsulates a CoAP request 10 times | |||
(one fragment of the request per block). The server returns an IPv6 | (one fragment of the request per block). The server returns an IPv6 | |||
packet containing a UDP datagram with the DTLS record that | packet containing a UDP datagram with the DTLS record that | |||
encapsulates the CoAP response. The CoAP request-response exchange | encapsulates the CoAP response. The CoAP request-response exchange | |||
with block option is shown below. Block Option is shown in a | with block option is shown below. Block Option is shown in a | |||
decomposed way (block-option:NUM/M/size) indicating the kind of Block | decomposed way (block-option:NUM/M/size) indicating the kind of Block | |||
Option (2 in this case) followed by a colon, and then the block | Option (2 in this case) followed by a colon, and then the block | |||
number (NUM), the more bit (M = 0 in Block2 response means it is last | number (NUM), the more bit (M = 0 in Block2 response means it is last | |||
block), and block size with exponent (2**(SZX+4)) separated by | block), and block size with exponent (2^(SZX+4)) separated by | |||
slashes. The Length 64 is used with SZX=2. The CoAP Request is sent | slashes. The Length 64 is used with SZX=2. The CoAP Request is sent | |||
confirmable (CON) and the Content-Format of the response, even though | Confirmable (CON), and the Content-Format of the response, even | |||
not shown, is 281 (application/pkcs7-mime; smime-type=certs-only). | though not shown, is 281 (application/pkcs7-mime; smime-type=certs- | |||
The transfer of the 10 blocks with partially filled block NUM=9 is | only). The transfer of the 10 blocks with partially filled block | |||
shown below | NUM=9 is shown below. | |||
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 | |||
The header of the GET request looks like | The header of the GET request looks like the following: | |||
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 page 42, line 32 ¶ | skipping to change at line 1713 ¶ | |||
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] | |||
The Uri-Host and Uri-Port Options can be omitted if they coincide | The Uri-Host and Uri-Port Options can be omitted if they coincide | |||
with the transport protocol destination address and port | with the transport protocol destination address and port, | |||
respectively. Explicit Uri-Host and Uri-Port Options are typically | respectively. Explicit Uri-Host and Uri-Port Options are typically | |||
used when an endpoint hosts multiple virtual servers and uses the | used when an endpoint hosts multiple virtual servers and uses the | |||
Options to route the requests accordingly. | Options to route the requests accordingly. | |||
For further detailing the CoAP headers, the first two and the last | To provide further details on the CoAP headers, the first two and the | |||
blocks are written out below. The header of the first Block2 | last blocks are written out below. The header of the first Block2 | |||
response looks like | response looks like the following: | |||
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 | 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 | |||
skipping to change at page 43, line 27 ¶ | skipping to change at line 1745 ¶ | |||
[ 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 | |||
The second Block2: | The header of the second Block2 response looks like the following: | |||
Ver = 1 | 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 | |||
skipping to change at page 44, line 4 ¶ | skipping to change at line 1769 ¶ | |||
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 | |||
The 10th and final Block2: | ||||
The header of the tenth and final Block2 response looks like the | ||||
following: | ||||
Ver = 1 | 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 | |||
skipping to change at page 44, line 33 ¶ | skipping to change at line 1800 ¶ | |||
Payload = | Payload = | |||
2ec0b4af52d46f3b7ecc9687ddf267bcec368f7b7f1353272f022047a28a | 2ec0b4af52d46f3b7ecc9687ddf267bcec368f7b7f1353272f022047a28a | |||
e5c7306163b3c3834bab3c103f743070594c089aaa0ac870cd13b902caa1 | e5c7306163b3c3834bab3c103f743070594c089aaa0ac870cd13b902caa1 | |||
003100 | 003100 | |||
B.2. enroll / reenroll | B.2. enroll / reenroll | |||
In this example, the requested Block2 size of 256 bytes, required by | In this example, the requested Block2 size of 256 bytes, required by | |||
the client, is transferred to the server in the very first request | the client, is transferred to the server in the very first request | |||
message. The block size 256=(2**(SZX+4)) which gives SZX=4. The | message. The block size of 256 is equal to (2^(SZX+4)), which gives | |||
notation for block numbering is the same as in Appendix B.1. The | SZX=4. The notation for block numbering is the same as in | |||
header fields and the payload are omitted for brevity. | Appendix B.1. The header fields and the payload are omitted for | |||
brevity. | ||||
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) | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | {CSR (frag# 2)} --> | |||
. | <-- (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) | |||
...........Immediate response ......... | {CSR(frag# N1+1)}--> | |||
| | | | |||
<-- (ACK) (1:N1/0/256)(2:0/1/256)(2.04 Changed){Cert resp (frag# 1)} | ...........Immediate response ......... | |||
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) (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) --> | |||
. | <-- (ACK) (2:1/1/256)(2.04 Changed) | |||
POST [2001:db8::2:321]:61616/est/sen (CON)(2:N2/0/256) --> | {Cert resp (frag# 2)} | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | . | |||
. | ||||
. | ||||
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)} | ||||
Figure 5: EST-COAP enrollment with multiple blocks | Figure 6: EST-coaps Enrollment with Multiple Blocks | |||
N1+1 blocks have been transferred from client to the server and N2+1 | N1+1 blocks have been transferred from client to server, and N2+1 | |||
blocks have been transferred from server to client. | blocks have been transferred from server to client. | |||
Appendix C. Message content breakdown | Appendix C. Message Content Breakdown | |||
This appendix presents the breakdown of the hexadecimal dumps of the | This appendix presents the hexadecimal dumps of the binary payloads | |||
binary payloads shown in Appendix A. | in plain text shown in Appendix A. | |||
C.1. cacerts | C.1. cacerts | |||
The breakdown of cacerts response containing one root CA certificate | The cacerts response containing one root CA certificate is presented | |||
is | in plain text in the following: | |||
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 page 46, line 48 ¶ | skipping to change at line 1891 ¶ | |||
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 | |||
C.2. enroll / reenroll | C.2. enroll / reenroll | |||
The breakdown of the enrollment request is | The enrollment request is presented in plain text in the following: | |||
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 | |||
The CSR contains a ChallengePassword which is used for PoP linking | The CSR contains a challengePassword, which is used for POP linking | |||
(Section 4). The CSR also contains an id-on-hardwareModuleName | (Section 3). The CSR also contains an id-on-hardwareModuleName | |||
hardware identifier to customize the returned certificate to the | hardware identifier to customize the returned certificate to the | |||
requesting device (See [RFC7299] and [I-D.moskowitz-ecdsa-pki]). | requesting device (See [RFC7299] and [PKI-GUIDE]). | |||
The issued certificate presented in plain text in the following: | ||||
The breakdown of the issued certificate is | ||||
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 page 48, line 48 ¶ | skipping to change at line 1971 ¶ | |||
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 | |||
C.3. serverkeygen | C.3. serverkeygen | |||
The following is the breakdown of the server-side key generation | The following is the server-side key generation request presented in | |||
request. | plain text: | |||
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: | |||
skipping to change at page 49, line 28 ¶ | skipping to change at line 1997 ¶ | |||
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 | |||
Following is the breakdown of the private key content of the server- | The following is the private key content of the server-side key | |||
side key generation response. | generation response presented in plain text: | |||
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 | |||
The following is the breakdown of the certificate in the server-side | The following is the certificate in the server-side key generation | |||
key generation response payload. | response payload presented in plain text: | |||
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 | |||
skipping to change at page 50, line 44 ¶ | skipping to change at line 2056 ¶ | |||
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 | |||
Acknowledgements | ||||
The authors are very grateful to 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 Esko | ||||
Dijk and Michael Verschoor for the valuable discussions that helped | ||||
in shaping the solution. They would also like to thank Peter | ||||
Panburana for his feedback on technical details of the solution. | ||||
Constructive comments were received from Benjamin Kaduk, Eliot Lear, | ||||
Jim Schaad, Hannes Tschofenig, Julien Vermillard, John Manuel, Oliver | ||||
Pfaff, Pete Beal, and Carsten Bormann. | ||||
Interop tests were done by Oliver Pfaff, Thomas Werner, Oskar | ||||
Camezind, Bjorn Elmers, and Joel Hoglund. | ||||
Robert Moskowitz provided code to create the examples. | ||||
Contributors | ||||
Martin Furuhed contributed to the EST-coaps specification by | ||||
providing feedback based on the Nexus EST-over-CoAPS server | ||||
implementation that started in 2015. Sandeep Kumar kick-started this | ||||
specification and was instrumental in drawing attention to the | ||||
importance of the subject. | ||||
Authors' Addresses | Authors' Addresses | |||
Peter van der Stok | Peter van der Stok | |||
Consultant | Consultant | |||
Email: stokcons@bbhmail.nl | ||||
Email: consultancy@vanderstok.org | ||||
Panos Kampanakis | Panos Kampanakis | |||
Cisco Systems | Cisco Systems | |||
Email: pkampana@cisco.com | Email: pkampana@cisco.com | |||
Michael C. Richardson | Michael C. Richardson | |||
Sandelman Software Works | Sandelman Software Works | |||
Email: mcr+ietf@sandelman.ca | Email: mcr+ietf@sandelman.ca | |||
URI: http://www.sandelman.ca/ | URI: https://www.sandelman.ca/ | |||
Shahid Raza | Shahid Raza | |||
RISE SICS | RISE Research Institutes of Sweden | |||
Isafjordsgatan 22 | Isafjordsgatan 22 | |||
Kista, Stockholm 16440 | SE-16440 Kista, Stockholm | |||
SE | Sweden | |||
Email: shahid.raza@ri.se | ||||
Email: shahid@sics.se | ||||
End of changes. 249 change blocks. | ||||
934 lines changed or deleted | 811 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/ |