draft-ietf-ace-coap-est-16.txt | draft-ietf-ace-coap-est-17.txt | |||
---|---|---|---|---|
ACE P. van der Stok | ACE P. van der Stok | |||
Internet-Draft Consultant | Internet-Draft Consultant | |||
Intended status: Standards Track P. Kampanakis | Intended status: Standards Track P. Kampanakis | |||
Expires: April 24, 2020 Cisco Systems | Expires: June 7, 2020 Cisco Systems | |||
M. Richardson | M. Richardson | |||
SSW | SSW | |||
S. Raza | S. Raza | |||
RISE SICS | RISE SICS | |||
October 22, 2019 | December 5, 2019 | |||
EST over secure CoAP (EST-coaps) | EST over secure CoAP (EST-coaps) | |||
draft-ietf-ace-coap-est-16 | draft-ietf-ace-coap-est-17 | |||
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. | |||
skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 24, 2020. | This Internet-Draft will expire on June 7, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 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 Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4. DTLS and conformance to RFC7925 profiles . . . . . . . . . . 7 | 4. DTLS and conformance to RFC7925 profiles . . . . . . . . . . 7 | |||
5. Protocol Design . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. Protocol Design . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.1. Discovery and URIs . . . . . . . . . . . . . . . . . . . 10 | 5.1. Discovery and URIs . . . . . . . . . . . . . . . . . . . 11 | |||
5.2. Mandatory/optional EST Functions . . . . . . . . . . . . 13 | 5.2. Mandatory/optional EST Functions . . . . . . . . . . . . 13 | |||
5.3. Payload formats . . . . . . . . . . . . . . . . . . . . . 13 | 5.3. Payload formats . . . . . . . . . . . . . . . . . . . . . 14 | |||
5.4. Message Bindings . . . . . . . . . . . . . . . . . . . . 15 | 5.4. Message Bindings . . . . . . . . . . . . . . . . . . . . 15 | |||
5.5. CoAP response codes . . . . . . . . . . . . . . . . . . . 15 | 5.5. CoAP response codes . . . . . . . . . . . . . . . . . . . 16 | |||
5.6. Message fragmentation . . . . . . . . . . . . . . . . . . 16 | 5.6. Message fragmentation . . . . . . . . . . . . . . . . . . 17 | |||
5.7. Delayed Responses . . . . . . . . . . . . . . . . . . . . 17 | 5.7. Delayed Responses . . . . . . . . . . . . . . . . . . . . 18 | |||
5.8. Server-side Key Generation . . . . . . . . . . . . . . . 19 | 5.8. Server-side Key Generation . . . . . . . . . . . . . . . 20 | |||
6. HTTPS-CoAPS Registrar . . . . . . . . . . . . . . . . . . . . 21 | 6. HTTPS-CoAPS Registrar . . . . . . . . . . . . . . . . . . . . 22 | |||
7. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 7. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
8. Deployment limitations . . . . . . . . . . . . . . . . . . . 23 | 8. Deployment limitations . . . . . . . . . . . . . . . . . . . 24 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | |||
9.1. Content-Format Registry . . . . . . . . . . . . . . . . . 24 | 9.1. Content-Format Registry . . . . . . . . . . . . . . . . . 25 | |||
9.2. Resource Type registry . . . . . . . . . . . . . . . . . 24 | 9.2. Resource Type registry . . . . . . . . . . . . . . . . . 25 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | |||
10.1. EST server considerations . . . . . . . . . . . . . . . 25 | 10.1. EST server considerations . . . . . . . . . . . . . . . 26 | |||
10.2. HTTPS-CoAPS Registrar considerations . . . . . . . . . . 27 | 10.2. HTTPS-CoAPS Registrar considerations . . . . . . . . . . 28 | |||
11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 27 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 29 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 28 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 29 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 30 | 13.2. Informative References . . . . . . . . . . . . . . . . . 31 | |||
Appendix A. EST messages to EST-coaps . . . . . . . . . . . . . 32 | Appendix A. EST messages to EST-coaps . . . . . . . . . . . . . 33 | |||
A.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 33 | A.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
A.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 35 | A.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 36 | |||
A.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 36 | A.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 38 | |||
A.4. csrattrs . . . . . . . . . . . . . . . . . . . . . . . . 38 | A.4. csrattrs . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
Appendix B. EST-coaps Block message examples . . . . . . . . . . 39 | Appendix B. EST-coaps Block message examples . . . . . . . . . . 41 | |||
B.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 39 | B.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
B.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 43 | B.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 45 | |||
Appendix C. Message content breakdown . . . . . . . . . . . . . 44 | Appendix C. Message content breakdown . . . . . . . . . . . . . 46 | |||
C.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 44 | C.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
C.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 45 | C.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 47 | |||
C.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 47 | C.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 49 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
1. Change Log | 1. Change Log | |||
EDNOTE: Remove this section before publication | EDNOTE: Remove this section before publication | |||
-17 | ||||
v16 remnants by Ben K. | ||||
Typos. | ||||
-16 | -16 | |||
Updates to address Yaron S.'s Secdir review. | Updates to address Yaron S.'s Secdir review. | |||
Updates to address David S.'s Gen-ART review. | Updates to address David S.'s Gen-ART review. | |||
-15 | -15 | |||
Updates to addressed Ben's AD follow up feedback. | Updates to addressed Ben's AD follow up feedback. | |||
skipping to change at page 7, line 38 ¶ | skipping to change at page 7, line 45 ¶ | |||
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 | 4. DTLS and conformance to RFC7925 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 | |||
discussed in Section 5.8 of this document. | subsections) and discussed in Section 5.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 standardization of [RFC7748], support for | curve. After the publication of [RFC7748], support for Curve25519 | |||
Curve25519 will likely be required in the future by (D)TLS Profiles | will likely be required in the future by (D)TLS Profiles for the | |||
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. | |||
implementations differ from DTLS 1.2 because they do not support | ||||
point format negotiation in favor of a single point format for each | DTLS 1.3 [I-D.ietf-tls-dtls13] implementations differ from DTLS 1.2 | |||
curve. Thus, support for DTLS 1.3 does not mandate point format | because they do not support point format negotiation in favor of a | |||
extensions and negotiation. In addition, in DTLS 1.3 the Supported | single point format for each curve. Thus, support for DTLS 1.3 does | |||
Elliptic Curves extension has been renamed to Supported Groups. | not mandate point format extensions and negotiation. In addition, in | |||
DTLS 1.3 the Supported Elliptic Curves 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 when using ECC ciphersuites. If | |||
fragmentation is necessary, "DTLS provides a mechanism for | fragmentation is necessary, "DTLS provides a mechanism for | |||
fragmenting a handshake message over several records, each of which | fragmenting a handshake message over several records, each of which | |||
can be transmitted separately, thus avoiding IP fragmentation" | can be transmitted separately, thus avoiding IP fragmentation" | |||
[RFC6347]. | [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 | |||
skipping to change at page 9, line 19 ¶ | skipping to change at page 9, line 22 ¶ | |||
server MAY want to authenticate a client certificate against its | server MAY want to authenticate a client certificate against its | |||
trust store although the certificate is expired (Section 10). | trust store although the certificate is expired (Section 10). | |||
EST-coaps supports the certificate types and Trust Anchors (TA) that | EST-coaps supports the certificate types and Trust Anchors (TA) that | |||
are specified for EST in Section 3 of [RFC7030]. | are specified 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 the private key corresponding | a value that can be used to prove that the private key corresponding | |||
to the certified public key is in the possession of and can be used | to the certified public key is in the possession of and can be used | |||
by an end-entity or client. Additionally, channel-binding | by an end-entity or client. Additionally, channel-binding | |||
information can link proof-of-identity with an established connetion. | information can link proof-of-identity with an established | |||
Connection-based proof-of-possession is OPTIONAL for EST-coaps | connection. Connection-based proof-of-possession is OPTIONAL for | |||
clients and servers. When proof-of-possession is desired, a set of | EST-coaps clients and servers. When proof-of-possession is desired, | |||
actions are required regarding the use of tls-unique, described in | a set of actions are required regarding the use of tls-unique, | |||
Section 3.5 in [RFC7030]. The tls-unique information consists of the | described in Section 3.5 in [RFC7030]. The tls-unique information | |||
contents of the first "Finished" message in the (D)TLS handshake | consists of the contents of the first "Finished" message in the | |||
between server and client [RFC5929]. The client adds the "Finished" | (D)TLS handshake between server and client [RFC5929]. The client | |||
message as a ChallengePassword in the attributes section of the | adds the "Finished" message as a ChallengePassword in the attributes | |||
PKCS#10 Request [RFC5967] to prove that the client is indeed in | section of the PKCS#10 Request [RFC5967] to prove that the client is | |||
control of the private key at the time of the (D)TLS session | indeed in control of the private key at the time of the (D)TLS | |||
establishment. | session establishment. | |||
In the case of handshake message fragmentation, if proof-of- | In the case of handshake message fragmentation, if proof-of- | |||
possession is desired, the Finished message added as the | possession is desired, the Finished message added as the | |||
ChallengePassword in the CSR is calculated as specified by the DTLS | ChallengePassword in the CSR is calculated as specified by the DTLS | |||
standards. We summarize it here for convenience. For DTLS 1.2, in | standards. We summarize it here for convenience. For DTLS 1.2, in | |||
the event of handshake message fragmentation, the Hash of the | the event of handshake message fragmentation, the Hash of the | |||
handshake messages used in the MAC calculation of the Finished | handshake messages used in the MAC calculation of the Finished | |||
message must be computed as if each handshake message had been sent | message must be computed as if each handshake message had been sent | |||
as a single fragment (Section 4.2.6 of [RFC6347]). The Finished | as a single fragment (Section 4.2.6 of [RFC6347]). The Finished | |||
message is calculated as shown in Section 7.4.9 of [RFC5246]. | message is calculated as shown in Section 7.4.9 of [RFC5246]. | |||
skipping to change at page 9, line 50 ¶ | skipping to change at page 10, line 6 ¶ | |||
Similarly, for DTLS 1.3, the Finished message must be computed as if | Similarly, for DTLS 1.3, the Finished message must be computed as if | |||
each handshake message had been sent as a single fragment | each handshake message had been sent as a single fragment | |||
(Section 5.8 of [I-D.ietf-tls-dtls13]) following the algorithm | (Section 5.8 of [I-D.ietf-tls-dtls13]) following the algorithm | |||
described in 4.4.4 of [RFC8446]. | 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. | establish a DTLS connection for every EST transaction. | |||
Authenticating and negotiating DTLS keys requires resources on low- | Authenticating and negotiating DTLS keys requires resources on low- | |||
end endpoints and consumes valuable bandwidth. To alleviate this | end endpoints and consumes valuable bandwidth. To alleviate this | |||
situation, an EST-coaps DTLS connection MAY remain open for | situation, an EST-coaps DTLS connection MAY remain open for | |||
sequential EST transactions. For example, an EST csrattrs request | sequential EST transactions which was not the case with [RFC7030]. | |||
that is followed by a simpleenroll request can use the same | For example, an EST csrattrs request that is followed by a | |||
authenticated DTLS connection. However, when a cacerts request is | simpleenroll request can use the same authenticated DTLS connection. | |||
included in the set of sequential EST transactions, some additional | However, when a cacerts request is included in the set of sequential | |||
security considerations apply regarding the use of the Implicit and | EST transactions, some additional security considerations apply | |||
Explicit TA database as explained in Section 10.1. | regarding the use of the Implicit and Explicit TA database as | |||
explained in Section 10.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 take place after a significant amount of | new EST transaction will take place after 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. In some cases, like NAT | that are relatively close to each other. In some cases, like NAT | |||
rebinding, keeping the state of a connection is not possible when | rebinding, keeping the state of a connection is not possible when | |||
devices sleep for extended periods of time. In such occasions, | devices sleep for extended periods of time. In such occasions, | |||
[I-D.ietf-tls-dtls-connection-id] negotiates a connection ID that can | [I-D.ietf-tls-dtls-connection-id] negotiates a connection ID that can | |||
eliminate the need for new handshake and its additional cost; or DTLS | eliminate the need for new handshake and its additional cost; or DTLS | |||
session resumption provides a less costly alternative than re-doing a | session resumption provides a less costly alternative than re-doing a | |||
skipping to change at page 11, line 14 ¶ | skipping to change at page 11, line 22 ¶ | |||
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> | |||
coaps://example.com:<port>/.well-known/est/ | coaps://example.com:<port>/.well-known/est/ | |||
ArbitraryLabel/<short-est> | ArbitraryLabel/<short-est> | |||
The short-est strings are defined in Table 1. Arbitrary Labels are | The short-est strings are defined in Table 1. | |||
usually defined and used by EST CAs in order to route client requests | ||||
to the appropriate certificate profile. Implementers should consider | Arbitrary Labels are usually defined and used by EST CAs in order to | |||
using short labels to minimize transmission overhead. | route client requests to the appropriate certificate profile. | |||
Implementers should consider 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>/ | coaps://example.com:<port>/<root-resource>/ | |||
ArbitraryLabel/<short-est> | 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 which 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 | | | /simpleenroll | /sen | | |||
| /simplereenroll | /sren | | | /simplereenroll | /sren | | |||
| /serverkeygen | /skg (PKCS#7) | | | /serverkeygen | /skg (PKCS#7) | | |||
| /serverkeygen | /skc (application/pkix-cert) | | | /serverkeygen | /skc (application/pkix-cert) | | |||
| /csrattrs | /att | | | /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]. | |||
CoAPS of the presence and location of EST-coaps resources. Linefeeds | ||||
are included only for readability. | The example below shows the discovery over CoAPS of the presence and | |||
location of EST-coaps resources. 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 | |||
</est/crts>;rt="ace.est.crts";ct="281 TBD287", | </est/crts>;rt="ace.est.crts";ct="281 TBD287", | |||
</est/sen>;rt="ace.est.sen";ct="281 TBD287", | </est/sen>;rt="ace.est.sen";ct="281 TBD287", | |||
</est/sren>;rt="ace.est.sren";ct="281 TBD287", | </est/sren>;rt="ace.est.sren";ct="281 TBD287", | |||
</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 | |||
skipping to change at page 12, line 47 ¶ | skipping to change at page 13, line 21 ¶ | |||
ct="281 TBD287", | ct="281 TBD287", | |||
<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 TBD287", | |||
<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 | 5.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 latter ones are | optional functions, and not specified functions. The latter ones are | |||
deemed too expensive for low-resource devices in payload and | deemed too expensive for low-resource devices in payload and | |||
calculation times. | 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 5.1. | |||
+------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| EST Functions | EST-coaps implementation | | | EST Functions | EST-coaps implementation | | |||
+------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| /cacerts | MUST | | | /cacerts | MUST | | |||
| /simpleenroll | MUST | | | /simpleenroll | MUST | | |||
| /simplereenroll | MUST | | | /simplereenroll | MUST | | |||
| /fullcmc | Not specified | | | /fullcmc | Not specified | | |||
| /serverkeygen | OPTIONAL | | | /serverkeygen | OPTIONAL | | |||
| /csrattrs | OPTIONAL | | | /csrattrs | OPTIONAL | | |||
+------------------+--------------------------+ | +-------------------+--------------------------+ | |||
Table 2: List of EST-coaps functions | Table 2: List of EST-coaps functions | |||
5.3. Payload formats | 5.3. Payload formats | |||
EST-coaps is designed for low-resource devices and hence does not | EST-coaps is designed for low-resource devices and hence 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. | |||
skipping to change at page 14, line 16 ¶ | skipping to change at page 14, line 40 ¶ | |||
the preferred response Content-Format. If an Accept Option is not | the 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 [I-D.ietf-core-multipart-ct]. | |||
example, a collection, containing two representations in response to | ||||
a EST-coaps server-side key generation /skg request, could include a | For example, a collection, containing two representations in response | |||
private key in PKCS#8 [RFC5958] with Content-Format identifier 284 | to a EST-coaps server-side key generation /skg request, could include | |||
a private key in PKCS#8 [RFC5958] with Content-Format identifier 284 | ||||
(0x011C) and a single certificate in a PKCS#7 container with Content- | (0x011C) and a single certificate in a PKCS#7 container with Content- | |||
Format identifier 281 (0x0119). Such a collection would look like | Format identifier 281 (0x0119). Such a collection would look like | |||
[284,h'0123456789abcdef', 281,h'fedcba9876543210'] in diagnostic CBOR | [284,h'0123456789abcdef', 281,h'fedcba9876543210'] in diagnostic CBOR | |||
notation. The serialization of such CBOR content would be | 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 | Multipart /skg response serialization | |||
skipping to change at page 14, line 46 ¶ | skipping to change at page 15, line 25 ¶ | |||
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 TBD287 (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 CMS (as | |||
explained in Section 5.8) the Content-Format identifier is 280 | explained in Section 5.8) the Content-Format identifier is 280 | |||
(0x0118) instead of 284. The content format used in the response is | (0x0118) instead of 284. The content format used in the response is | |||
summarized in Table 3. | 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 | TBD287 | | |||
+----------+-----------------+-----------------+ | +----------+-----------------+-----------------+ | |||
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. | native binary form. An example is shown in Appendix A.3. | |||
5.4. Message Bindings | 5.4. Message Bindings | |||
The general EST-coaps message characteristics are: | The general EST-coaps message characteristics are: | |||
skipping to change at page 15, line 26 ¶ | skipping to change at page 16, line 5 ¶ | |||
confirmable CON CoAP messages. | confirmable CON CoAP messages. | |||
o The CoAP Options used are Uri-Host, Uri-Path, Uri-Port, Content- | o 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. | |||
Options should be handled in accordance with [RFC7252]. | ||||
o Other COAP Options should be handled in accordance with [RFC7252]. | ||||
o EST URLs are HTTPS based (https://), in CoAP these are assumed to | o 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 | 5.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 successfull response to EST-coaps POST | Similarly, 2.04 | |||
requests (/sen, /sren, /skg, /skc). | ||||
is used in successfull response to EST-coaps POST 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 a | |||
POST (/sen, /sren, /skg, /skc). 4.04 is used when the resource is not | POST (/sen, /sren, /skg, /skc). 4.04 is used when the resource is not | |||
available for the client. | available for the client. | |||
HTTP response code 202 with a Retry-After header in [RFC7030] has no | HTTP response code 202 with a Retry-After header in [RFC7030] has no | |||
equivalent in CoAP. HTTP 202 with Retry-After is used in EST for | equivalent in CoAP. HTTP 202 with Retry-After is used in EST for | |||
delayed server responses. Section 5.7 specifies how EST-coaps | delayed server responses. Section 5.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 have | |||
their equivalent CoAP 4.00, 4.01, 4.03, 4.04 and 5.03 response codes | their equivalent CoAP 4.00, 4.01, 4.03, 4.04 and 5.03 response codes | |||
in EST-coaps. Table 4 summarizes the EST-coaps response codes. | in EST-coaps. | |||
Table 4 summarizes the EST-coaps response codes. | ||||
+-----------------+-----------------+-------------------------------+ | +-----------------+-----------------+-------------------------------+ | |||
| operation | EST-coaps | Description | | | operation | EST-coaps | Description | | |||
| | response code | | | | | response code | | | |||
+-----------------+-----------------+-------------------------------+ | +-----------------+-----------------+-------------------------------+ | |||
| /crts, /att | 2.05 | Success. Certs included in | | | /crts, /att | 2.05 | Success. Certs included 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 | | | /sen, /skg, | 2.04 | Success. Cert included in the | | |||
| /sren, /skc | | response payload. | | | /sren, /skc | | response payload. | | |||
skipping to change at page 16, line 50 ¶ | skipping to change at page 17, line 46 ¶ | |||
which could fluctuate further based on the algorithms, OIDs, Subject | which could fluctuate further based on the algorithms, OIDs, Subject | |||
Alternative Names (SAN) and cert fields. For 384-bit curves, ECDSA | Alternative Names (SAN) 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 CoAP [RFC7252] 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. | |||
EST-coaps messages can still exceed MTU sizes on the Internet or | ||||
6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps needs to be | Even with ECC, EST-coaps messages can still exceed MTU sizes on the | |||
able to fragment messages into multiple DTLS datagrams. | Internet or 6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps | |||
needs to be 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. | |||
Both EST-coaps clients and servers MUST support Block2. EST-coaps | Both EST-coaps clients and servers MUST support Block2. EST-coaps | |||
servers MUST also support Block1. The EST-coaps client MUST support | servers MUST also support Block1. The EST-coaps client MUST support | |||
Block1 only if it sends EST-coaps requests with an IP packet size | Block1 only if it sends EST-coaps requests with an IP packet size | |||
that exceeds the Path MTU. | that exceeds the Path MTU. | |||
skipping to change at page 20, line 31 ¶ | skipping to change at page 21, line 31 ¶ | |||
280 for the private key. Then the private key is encrypted | 280 for the private key. Then the private key is encrypted | |||
symmetrically or asymmetrically as per [RFC7030]. The symmetric key | symmetrically or asymmetrically as per [RFC7030]. The symmetric key | |||
or the asymmetric keypair establishment method is out of scope of the | or the asymmetric keypair establishment method is out of scope of the | |||
specification. A /skg or /skc request with a CSR without | specification. A /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 | |||
[I-D.ietf-core-multipart-ct] containing a CBOR array with four items | [I-D.ietf-core-multipart-ct] containing a CBOR array with four items | |||
(Section 5.3) . The two representations (each consisting of two CBOR | ||||
array items) do not have to be in a particular order since each | (Section 5.3) | |||
representation is preceded by its Content-Format ID. Dependent on | ||||
the request, the private key can be in unprotected PKCS#8 [RFC5958] | . The two representations (each consisting of two CBOR array items) | |||
format (Content-Format 284) or protected inside of CMS SignedData | do not have to be in a particular order since each representation is | |||
(Content-Format 280). The SignedData, placed in the outermost | preceded by its Content-Format ID. Dependent on the request, the | |||
container, is signed by the party that generated the private key, | private key can be in unprotected PKCS#8 [RFC5958] format (Content- | |||
which may be the EST server or the EST CA. SignedData placed within | Format 284) or protected inside of CMS SignedData (Content-Format | |||
the Enveloped Data does not need additional signing as explained in | 280). The SignedData, placed in the outermost container, is signed | |||
Section 4.4.2 of [RFC7030]. In summary, the symmetrically encrypted | by the party that generated the private key, which may be the EST | |||
key is included in the encryptedKey attribute in a KEKRecipientInfo | server or the EST CA. SignedData placed within the Enveloped Data | |||
structure. In the case where the asymmetric encryption key is | does not need additional signing as explained in Section 4.4.2 of | |||
suitable for transport key operations the generated private key is | [RFC7030]. In summary, the symmetrically encrypted key is included | |||
encrypted with a symmetric key which is encrypted by the client- | in the encryptedKey attribute in a KEKRecipientInfo structure. In | |||
defined (in the CSR) asymmetric public key and is carried in an | the case where the asymmetric encryption key is suitable for | |||
encryptedKey attribute in a KeyTransRecipientInfo structure. | transport key operations the generated private key is encrypted with | |||
Finally, if the asymmetric encryption key is suitable for key | a symmetric key which is encrypted by the client-defined (in the CSR) | |||
agreement, the generated private key is encrypted with a symmetric | asymmetric public key and is carried in an encryptedKey attribute in | |||
key which is encrypted by the client defined (in the CSR) asymmetric | a KeyTransRecipientInfo structure. Finally, if the asymmetric | |||
public key and is carried in an recipientEncryptedKeys attribute in a | encryption key is suitable for key agreement, the generated private | |||
KeyAgreeRecipientInfo. | key is encrypted with a symmetric key which is encrypted by the | |||
client defined (in the CSR) asymmetric public key and is carried in | ||||
an recipientEncryptedKeys attribute in a 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 | |||
skipping to change at page 23, line 8 ¶ | skipping to change at page 24, line 8 ¶ | |||
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 5.1. | |||
7. Parameters | 7. 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]. | |||
the CoAP parameters in [RFC7252], but the setting of the CoAP | ||||
parameter values may have consequence for the setting of the EST | ||||
parameter values. | ||||
It is recommended, based on experiments, to follow the default CoAP | EST does not impose any unique values on the CoAP parameters in | |||
configuration parameters ([RFC7252]). However, depending on the | [RFC7252], but the setting of the CoAP parameter values may have | |||
implementation scenario, retransmissions and timeouts can also occur | consequence for the setting of the EST parameter values. | |||
on other networking layers, governed by other configuration | ||||
parameters. When a change in a server parameter has taken place, the | It is recommended, based on experiments, | |||
parameter values in the communicating endpoints MUST be adjusted as | ||||
necessary. | to follow the default CoAP configuration parameters ([RFC7252]). | |||
However, depending on the implementation scenario, retransmissions | ||||
and timeouts can also occur on other networking layers, governed by | ||||
other configuration parameters. When a change in a server parameter | ||||
has taken place, the parameter values in the communicating endpoints | ||||
MUST be adjusted as necessary. | ||||
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]: | |||
o NSTART: A parameter that controls the number of simultaneous | o 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]. | |||
skipping to change at page 24, line 27 ¶ | skipping to change at page 25, line 29 ¶ | |||
| application/pkcs7-mime; | 280 | [RFC7030] [I-D.ietf-lamps- | | | application/pkcs7-mime; | 280 | [RFC7030] [I-D.ietf-lamps- | | |||
| smime-type=server-generated- | | rfc5751-bis] [ThisRFC] | | | smime-type=server-generated- | | rfc5751-bis] [ThisRFC] | | |||
| key | | | | | key | | | | |||
| application/pkcs7-mime; | 281 | [I-D.ietf-lamps-rfc5751-bi | | | application/pkcs7-mime; | 281 | [I-D.ietf-lamps-rfc5751-bi | | |||
| smime-type=certs-only | | s] [ThisRFC] | | | smime-type=certs-only | | s] [ThisRFC] | | |||
| application/pkcs8 | 284 | [RFC5958] [I-D.ietf-lamps- | | | application/pkcs8 | 284 | [RFC5958] [I-D.ietf-lamps- | | |||
| | | rfc5751-bis] [ThisRFC] | | | | | rfc5751-bis] [ThisRFC] | | |||
| application/csrattrs | 285 | [RFC7030] | | | application/csrattrs | 285 | [RFC7030] | | |||
| application/pkcs10 | 286 | [RFC5967] [I-D.ietf-lamps- | | | application/pkcs10 | 286 | [RFC5967] [I-D.ietf-lamps- | | |||
| | | rfc5751-bis] [ThisRFC] | | | | | rfc5751-bis] [ThisRFC] | | |||
| application/pkix-cert | TBD28 | [RFC2585] [ThisRFC] | | | application/pkix-cert | TBD28 | [RFC2585] [ThisRFC] | | |||
| | 7 | | | | | 7 | | | |||
+------------------------------+-------+----------------------------+ | +------------------------------+-------+----------------------------+ | |||
Table 5: New CoAP Content-Formats | Table 5: New CoAP Content-Formats | |||
It is suggested that 287 is allocated to TBD287. | It is suggested that 287 is allocated to TBD287. | |||
9.2. Resource Type registry | 9.2. Resource Type registry | |||
This memo registers new Resource Type (rt=) Link Target Attributes in | This memo registers new Resource Type (rt=) Link Target Attributes in | |||
skipping to change at page 25, line 49 ¶ | skipping to change at page 26, line 52 ¶ | |||
not available on many constrained devices, such as mouse movement, | not available on many constrained devices, such as mouse movement, | |||
timing of keystrokes, or air turbulence on the movement of hard drive | timing of keystrokes, or air turbulence on the movement of hard drive | |||
heads, as pointed out in [PsQs]. Other sources have to be used or | heads, as pointed out in [PsQs]. Other sources have to be used or | |||
dedicated hardware has to be added. Selecting hardware for an IoT | dedicated hardware has to be added. Selecting hardware for an IoT | |||
device that is capable of producing high-quality random numbers is | device that is capable of producing high-quality random numbers is | |||
therefore important [RSAfact]. | therefore important [RSAfact]. | |||
It is also RECOMMENDED that the Implicit Trust Anchor database used | It is also RECOMMENDED that the Implicit Trust Anchor database used | |||
for EST server authentication is carefully managed to reduce the | for EST server authentication is carefully managed to reduce the | |||
chance of a third-party CA with poor certification practices | chance of a third-party CA with poor certification practices | |||
jeopardizing authentication. Disabling the Implicit Trust Anchor | jeopardizing authentication. | |||
database after successfully receiving the Distribution of CA | ||||
certificates response (Section 4.1.3 of [RFC7030]) limits any risk to | Disabling the Implicit Trust Anchor database after successfully | |||
the first DTLS exchange. Alternatively, in a case where a /sen | receiving the Distribution of CA certificates response (Section 4.1.3 | |||
request immediately follows a /crts, a client MAY choose to keep the | of [RFC7030]) limits any risk to the first DTLS exchange. | |||
connection authenticated by the Implicit TA open for efficiency | Alternatively, in a case where a /sen request immediately follows a | |||
reasons (Section 4). A client that interleaves EST-coaps /crts | /crts, a client MAY choose to keep the connection authenticated by | |||
request with other requests in the same DTLS connection SHOULD | the Implicit TA open for efficiency reasons (Section 4). A client | |||
revalidate the server certificate chain against the updated Explicit | that interleaves EST-coaps /crts request with other requests in the | |||
TA from the /crts response before proceeding with the subsequent | same DTLS connection SHOULD revalidate the server certificate chain | |||
requests. If the server certificate chain does not authenticate | against the updated Explicit TA from the /crts response before | |||
against the database, the client SHOULD close the connection without | proceeding with the subsequent requests. If the server certificate | |||
completing the rest of the requests. The updated Explicit TA MUST | chain does not authenticate against the database, the client SHOULD | |||
continue to be used in new DTLS connections. | 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 | In cases where the IDevID used to authenticate the client is expired | |||
the server MAY still authenticate the client because IDevIDs are | the server MAY still authenticate the client because IDevIDs are | |||
expected to live as long as the device itself (Section 4). In such | expected to live as long as the device itself (Section 4). In such | |||
occasions, checking the certificate revocation status or authorizing | occasions, checking the certificate revocation status or authorizing | |||
the client using another method is important for the server to ensure | the client using another method is important for the server to ensure | |||
that the client is to be trusted. | that the client is to 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 | |||
skipping to change at page 26, line 38 ¶ | skipping to change at page 27, line 43 ¶ | |||
used as signature keys, signing the certification request with the | used as signature keys, signing the certification request with the | |||
private key serves as a PoP on that key pair". The inclusion of tls- | private key serves as a PoP on that key pair". The inclusion of tls- | |||
unique in the certificate request links the proof-of-possession to | unique in the certificate request links the proof-of-possession to | |||
the TLS proof-of-identity. This implies but does not prove that only | the TLS proof-of-identity. This implies but does not prove that only | |||
the authenticated client currently has access to the private key. | 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 | a man-in-the-middle to leverage session resumption and renegotiation | |||
to inject himself between a client and server even when channel | to inject himself between a client and server even when channel | |||
binding is in use. Implementers should use the Extended Master | binding is in use. | |||
Secret Extension in DTLS [RFC7627] to prevent such attacks. In the | ||||
context of this specification, an attacker could invalidate the | Implementers should use the Extended Master Secret Extension in DTLS | |||
purpose of the PoP linking ChallengePassword in the client request by | [RFC7627] to prevent such attacks. In the context of this | |||
resuming an EST-coaps connection. Even though the practical risk of | specification, an attacker could invalidate the purpose of the PoP | |||
such an attack to EST-coaps is not devastating, we would rather use a | linking ChallengePassword in the client request by resuming an EST- | |||
more secure channel binding mechanism. Such a mechanism could | coaps connection. Even though the practical risk of such an attack | |||
include an updated tls-unique value generation like the tls-unique- | to EST-coaps is not devastating, we would rather use a more secure | |||
prf defined in [I-D.josefsson-sasl-tls-cb] by using a TLS exporter | channel binding mechanism. Such a mechanism could include an updated | |||
[RFC5705] in TLS 1.2 or TLS 1.3's updated exporter (Section 7.5 of | tls-unique value generation like the tls-unique-prf defined in | |||
[RFC8446]) value in place of the tls-unique value in the CSR. Such | ||||
mechanism has not been standardized yet. Adopting a channel binding | [I-D.josefsson-sasl-tls-cb] by using a TLS exporter [RFC5705] in TLS | |||
value generated from an exporter would break backwards compatibility | 1.2 or TLS 1.3's updated exporter (Section 7.5 of [RFC8446]) value in | |||
for an RA that proxies through to a classic EST server. Thus, in | place of the tls-unique value in the CSR. Such mechanism has not | |||
this specification we still depend on the tls-unique mechanism | been standardized yet. Adopting a channel binding value generated | |||
defined in [RFC5929], especially since a 3SHAKE attack does not | from an exporter would break backwards compatibility for an RA that | |||
expose messages exchanged with EST-coaps. | 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 | 10.2. HTTPS-CoAPS Registrar considerations | |||
The Registrar proposed in Section 6 must be deployed with care, and | The Registrar proposed in Section 6 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 | |||
skipping to change at page 27, line 50 ¶ | skipping to change at page 29, line 9 ¶ | |||
Registrar will be generating the private key and enrolling the | Registrar will be generating the private key and enrolling the | |||
certificates with the CA or if the CA will be responsible for | certificates with the CA or if the CA will be responsible for | |||
generating the key. In such cases, the existence of a Registrar | generating the key. In such cases, the existence of a Registrar | |||
requires the client to put its trust on the registrar when it is | requires the client to put its trust on the registrar when it is | |||
generating the private key. | generating the private key. | |||
11. Contributors | 11. Contributors | |||
Martin Furuhed contributed to the EST-coaps specification by | Martin Furuhed contributed to the EST-coaps specification by | |||
providing feedback based on the Nexus EST over CoAPS server | providing feedback based on the Nexus EST over CoAPS server | |||
implementation that started in 2015. Sandeep Kumar kick-started this | implementation that started in 2015. | |||
specification and was instrumental in drawing attention to the | ||||
importance of the subject. | Sandeep Kumar kick-started this specification and was instrumental in | |||
drawing attention to the importance of the subject. | ||||
12. Acknowledgements | 12. Acknowledgements | |||
The authors are very grateful to Klaus Hartke for his detailed | The authors are very grateful to Klaus Hartke for his detailed | |||
explanations on the use of Block with DTLS and his support for the | explanations on the use of Block with DTLS and his support for the | |||
Content-Format specification. The authors would like to thank Esko | Content-Format specification. The authors would like to thank Esko | |||
Dijk and Michael Verschoor for the valuable discussions that helped | Dijk and Michael Verschoor for the valuable discussions that helped | |||
in shaping the solution. They would also like to thank Peter | in shaping the solution. They would also like to thank Peter | |||
Panburana for his feedback on technical details of the solution. | Panburana for his feedback on technical details of the solution. | |||
Constructive comments were received from Benjamin Kaduk, Eliot Lear, | Constructive comments were received from Benjamin Kaduk, Eliot Lear, | |||
skipping to change at page 28, line 42 ¶ | skipping to change at page 29, line 49 ¶ | |||
[I-D.ietf-lamps-rfc5751-bis] | [I-D.ietf-lamps-rfc5751-bis] | |||
Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | |||
Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | |||
Message Specification", draft-ietf-lamps-rfc5751-bis-12 | Message Specification", draft-ietf-lamps-rfc5751-bis-12 | |||
(work in progress), September 2018. | (work in progress), September 2018. | |||
[I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
1.3", draft-ietf-tls-dtls13-33 (work in progress), October | 1.3", draft-ietf-tls-dtls13-34 (work in progress), | |||
2019. | 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>. | |||
End of changes. 36 change blocks. | ||||
181 lines changed or deleted | 211 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |