draft-ietf-ace-coap-est-17.txt | draft-ietf-ace-coap-est-18.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: June 7, 2020 Cisco Systems | Expires: July 9, 2020 Cisco Systems | |||
M. Richardson | M. Richardson | |||
SSW | SSW | |||
S. Raza | S. Raza | |||
RISE SICS | RISE SICS | |||
December 5, 2019 | January 6, 2020 | |||
EST over secure CoAP (EST-coaps) | EST over secure CoAP (EST-coaps) | |||
draft-ietf-ace-coap-est-17 | draft-ietf-ace-coap-est-18 | |||
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 June 7, 2020. | This Internet-Draft will expire on July 9, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 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 . . . . . . . . . . . . . . . . . . . . . . . . 7 | 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 . . . . . . . . . . . . . . . . . . . 11 | 5.1. Discovery and URIs . . . . . . . . . . . . . . . . . . . 10 | |||
5.2. Mandatory/optional EST Functions . . . . . . . . . . . . 13 | 5.2. Mandatory/optional EST Functions . . . . . . . . . . . . 13 | |||
5.3. Payload formats . . . . . . . . . . . . . . . . . . . . . 14 | 5.3. Payload formats . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.4. Message Bindings . . . . . . . . . . . . . . . . . . . . 15 | 5.4. Message Bindings . . . . . . . . . . . . . . . . . . . . 15 | |||
5.5. CoAP response codes . . . . . . . . . . . . . . . . . . . 16 | 5.5. CoAP response codes . . . . . . . . . . . . . . . . . . . 15 | |||
5.6. Message fragmentation . . . . . . . . . . . . . . . . . . 17 | 5.6. Message fragmentation . . . . . . . . . . . . . . . . . . 16 | |||
5.7. Delayed Responses . . . . . . . . . . . . . . . . . . . . 18 | 5.7. Delayed Responses . . . . . . . . . . . . . . . . . . . . 17 | |||
5.8. Server-side Key Generation . . . . . . . . . . . . . . . 20 | 5.8. Server-side Key Generation . . . . . . . . . . . . . . . 19 | |||
6. HTTPS-CoAPS Registrar . . . . . . . . . . . . . . . . . . . . 22 | 6. HTTPS-CoAPS Registrar . . . . . . . . . . . . . . . . . . . . 21 | |||
7. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 7. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
8. Deployment limitations . . . . . . . . . . . . . . . . . . . 24 | 8. Deployment limitations . . . . . . . . . . . . . . . . . . . 23 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | |||
9.1. Content-Format Registry . . . . . . . . . . . . . . . . . 25 | 9.1. Content-Format Registry . . . . . . . . . . . . . . . . . 24 | |||
9.2. Resource Type registry . . . . . . . . . . . . . . . . . 25 | 9.2. Resource Type registry . . . . . . . . . . . . . . . . . 24 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | 9.3. Well-Known URIs Registry . . . . . . . . . . . . . . . . 25 | |||
10.1. EST server considerations . . . . . . . . . . . . . . . 26 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | |||
10.2. HTTPS-CoAPS Registrar considerations . . . . . . . . . . 28 | 10.1. EST server considerations . . . . . . . . . . . . . . . 25 | |||
11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 29 | 10.2. HTTPS-CoAPS Registrar considerations . . . . . . . . . . 27 | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 29 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 29 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 31 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 28 | |||
Appendix A. EST messages to EST-coaps . . . . . . . . . . . . . 33 | 13.2. Informative References . . . . . . . . . . . . . . . . . 30 | |||
A.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 34 | Appendix A. EST messages to EST-coaps . . . . . . . . . . . . . 32 | |||
A.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 36 | A.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
A.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 38 | A.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 35 | |||
A.4. csrattrs . . . . . . . . . . . . . . . . . . . . . . . . 40 | A.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 37 | |||
Appendix B. EST-coaps Block message examples . . . . . . . . . . 41 | A.4. csrattrs . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
B.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 41 | Appendix B. EST-coaps Block message examples . . . . . . . . . . 40 | |||
B.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 45 | B.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
Appendix C. Message content breakdown . . . . . . . . . . . . . 46 | B.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 44 | |||
C.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 46 | Appendix C. Message content breakdown . . . . . . . . . . . . . 45 | |||
C.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 47 | C.1. cacerts . . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
C.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 49 | C.2. enroll / reenroll . . . . . . . . . . . . . . . . . . . . 46 | |||
C.3. serverkeygen . . . . . . . . . . . . . . . . . . . . . . 48 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
1. Change Log | 1. Change Log | |||
EDNOTE: Remove this section before publication | EDNOTE: Remove this section before publication | |||
-18 | ||||
IESG Reviews fixes. | ||||
Removed spurious lines introduced in v-17 due to xml2rfc v3. | ||||
-17 | -17 | |||
v16 remnants by Ben K. | v16 remnants by Ben K. | |||
Typos. | Typos. | |||
-16 | -16 | |||
Updates to address Yaron S.'s Secdir review. | Updates to address Yaron S.'s Secdir review. | |||
skipping to change at page 8, line 25 ¶ | skipping to change at page 8, line 29 ¶ | |||
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. | format must also be supported. DTLS 1.3 [I-D.ietf-tls-dtls13] | |||
implementations differ from DTLS 1.2 because they do not support | ||||
DTLS 1.3 [I-D.ietf-tls-dtls13] implementations differ from DTLS 1.2 | point format negotiation in favor of a single point format for each | |||
because they do not support point format negotiation in favor of a | curve. Thus, support for DTLS 1.3 does not mandate point format | |||
single point format for each curve. Thus, support for DTLS 1.3 does | extensions and negotiation. In addition, in DTLS 1.3 the Supported | |||
not mandate point format extensions and negotiation. In addition, in | Elliptic Curves extension has been renamed to Supported Groups. | |||
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 12 ¶ | skipping to change at page 9, line 12 ¶ | |||
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 | o 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 | o 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 want to authenticate a client certificate against its | server MAY authenticate a client certificate against its trust | |||
trust store although the certificate is expired (Section 10). | 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 an end-entity or client is in | |||
to the certified public key is in the possession of and can be used | the possession of and can use the private key corresponding to the | |||
by an end-entity or client. Additionally, channel-binding | certified public key. Additionally, channel-binding information can | |||
information can link proof-of-identity with an established | link proof-of-identity with an established connection. Connection- | |||
connection. Connection-based proof-of-possession is OPTIONAL for | based proof-of-possession is OPTIONAL for EST-coaps clients and | |||
EST-coaps clients and servers. When proof-of-possession is desired, | servers. When proof-of-possession is desired, a set of actions are | |||
a set of actions are required regarding the use of tls-unique, | required regarding the use of tls-unique, described in Section 3.5 in | |||
described in Section 3.5 in [RFC7030]. The tls-unique information | [RFC7030]. The tls-unique information consists of the contents of | |||
consists of the contents of the first "Finished" message in the | the first "Finished" message in the (D)TLS handshake between server | |||
(D)TLS handshake between server and client [RFC5929]. The client | and client [RFC5929]. The client adds the "Finished" message as a | |||
adds the "Finished" message as a ChallengePassword in the attributes | ChallengePassword in the attributes section of the PKCS#10 Request | |||
section of the PKCS#10 Request [RFC5967] to prove that the client is | [RFC5967] to prove that the client is indeed in control of the | |||
indeed in control of the private key at the time of the (D)TLS | private key at the time of the (D)TLS session 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 on each reassembled message, as if each | |||
as a single fragment (Section 4.2.6 of [RFC6347]). The Finished | message had not been fragmented (Section 4.2.6 of [RFC6347]). The | |||
message is calculated as shown in Section 7.4.9 of [RFC5246]. | Finished message is calculated as shown in Section 7.4.9 of | |||
[RFC5246]. Similarly, for DTLS 1.3, the Finished message must be | ||||
Similarly, for DTLS 1.3, the Finished message must be computed as if | computed as if each handshake message had been sent as a single | |||
each handshake message had been sent as a single fragment | fragment (Section 5.8 of [I-D.ietf-tls-dtls13]) following the | |||
(Section 5.8 of [I-D.ietf-tls-dtls13]) following the algorithm | 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. An EST-coaps | |||
Authenticating and negotiating DTLS keys requires resources on low- | DTLS connection MAY remain open for sequential EST transactions, | |||
end endpoints and consumes valuable bandwidth. To alleviate this | which was not the case with [RFC7030]. For example, if a /crts | |||
situation, an EST-coaps DTLS connection MAY remain open for | request is followed by a /sen request, both can use the same | |||
sequential EST transactions which was not the case with [RFC7030]. | authenticated DTLS connection. However, when a /crts request is | |||
For example, an EST csrattrs request that is followed by a | included in the set of sequential EST transactions, some additional | |||
simpleenroll request can use the same authenticated DTLS connection. | security considerations apply regarding the use of the Implicit and | |||
However, when a cacerts request is included in the set of sequential | Explicit TA database as explained in Section 10.1. | |||
EST transactions, some additional security considerations apply | ||||
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 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. In some cases, like NAT | that are relatively close to each other. These could include a /sen | |||
rebinding, keeping the state of a connection is not possible when | immediatelly following a /crts when a device is getting bootstrapped. | |||
devices sleep for extended periods of time. In such occasions, | In some cases, like NAT rebinding, keeping the state of a connection | |||
[I-D.ietf-tls-dtls-connection-id] negotiates a connection ID that can | is not possible when devices sleep for extended periods of time. In | |||
eliminate the need for new handshake and its additional cost; or DTLS | such occasions, [I-D.ietf-tls-dtls-connection-id] negotiates a | |||
session resumption provides a less costly alternative than re-doing a | connection ID that can eliminate the need for new handshake and its | |||
full DTLS handshake. | additional cost; or DTLS session resumption provides a less costly | |||
alternative than re-doing a full DTLS handshake. | ||||
5. Protocol Design | 5. 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 5.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: | |||
skipping to change at page 11, line 8 ¶ | skipping to change at page 10, line 50 ¶ | |||
o Server-side key generation messages to provide a client identity | o 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 | 5.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) rigid ones, 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) flexible one where the EST server and it supported functions | and (2) a flexible one, where the EST server and its supported | |||
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> | |||
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 usually defined and used by EST CAs in order to | The short-est strings are defined in Table 1. Arbitrary Labels are | |||
route client requests to the appropriate certificate profile. | usually defined and used by EST CAs in order to route client requests | |||
Implementers should consider using short labels to minimize | to the appropriate certificate profile. Implementers should consider | |||
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>/ | 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 | | |||
skipping to change at page 12, line 16 ¶ | skipping to change at page 12, line 8 ¶ | |||
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]. | "ace.est*" [RFC6690]. The example below shows the discovery over | |||
CoAPS of the presence and location of EST-coaps resources. Linefeeds | ||||
The example below shows the discovery over CoAPS of the presence and | are included only for readability. | |||
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 13, line 21 ¶ | skipping to change at page 12, line 50 ¶ | |||
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 unspecified | |||
deemed too expensive for low-resource devices in payload and | functions are deemed too expensive for low-resource devices in | |||
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 5.1. | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| EST Functions | EST-coaps implementation | | | EST Functions | EST-coaps implementation | | |||
+-------------------+--------------------------+ | +-------------------+--------------------------+ | |||
| /cacerts | MUST | | | /cacerts | MUST | | |||
| /simpleenroll | MUST | | | /simpleenroll | MUST | | |||
skipping to change at page 14, line 13 ¶ | skipping to change at page 13, line 41 ¶ | |||
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. | |||
The Content-Format (HTTP Media-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 (Section 3.2.2 | Media-Types specified in the HTTP Content-Type header field | |||
of [RFC7030]) are specified by the Content-Format Option (12) of | (Section 3.2.2 of [RFC7030]) are specified by the Content-Format | |||
CoAP. The combination of URI-Path and Content-Format in EST-coaps | Option (12) of CoAP. The combination of URI-Path and Content-Format | |||
MUST map to an allowed combination of URI and Media-Type in EST. The | in EST-coaps MUST map to an allowed combination of URI and Media-Type | |||
required Content-Formats for these requests and response messages are | in EST. The required Content-Formats for these requests and response | |||
defined in Section 9.1. The CoAP response codes are defined in | messages are defined in Section 9.1. The CoAP response codes are | |||
Section 5.5. | defined in Section 5.5. | |||
Content-Format TBD287 can be used in place of 281 to carry a single | Content-Format TBD287 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 or | |||
/skg response. Content-Format 281 MUST be supported by EST-coaps | /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 TBD287. It is up | |||
to the client to support only Content-Format 281, TBD287 or both. | to the client to support only Content-Format 281, TBD287 or both. | |||
The client will use a COAP Accept Option in the request to express | The client will use a COAP Accept Option in the request to express | |||
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- | |||
skipping to change at page 14, line 40 ¶ | skipping to change at page 14, line 21 ¶ | |||
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]. | multipart-core specified in [I-D.ietf-core-multipart-ct]. For | |||
example, a collection, containing two representations in response to | ||||
For example, a collection, containing two representations in response | a EST-coaps server-side key generation /skg request, could include a | |||
to a EST-coaps server-side key generation /skg request, could include | private key in PKCS#8 [RFC5958] with Content-Format identifier 284 | |||
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 16, line 5 ¶ | skipping to change at page 15, line 35 ¶ | |||
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. | uses the Options to route the requests accordingly. Other COAP | |||
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 | Similarly, 2.04 is used in successful response to EST-coaps POST | |||
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 field in [RFC7030] | |||
equivalent in CoAP. HTTP 202 with Retry-After is used in EST for | has no equivalent in CoAP. HTTP 202 with Retry-After is used in EST | |||
delayed server responses. Section 5.7 specifies how EST-coaps | for 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. | in EST-coaps. Table 4 summarizes the EST-coaps response codes. | |||
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 17, line 39 ¶ | skipping to change at page 17, line 4 ¶ | |||
such that each DTLS record will fit within one or two IEEE 802.15.4 | such that each DTLS record will fit within one or two IEEE 802.15.4 | |||
frames. | 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 ECDSA cert sizes are 500-1000 bytes | |||
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. | conservative IPv4 datagram sizes such as 576 bytes. Even with ECC, | |||
EST-coaps messages can still exceed MTU sizes on the Internet or | ||||
Even with ECC, EST-coaps messages can still exceed MTU sizes on the | 6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps needs to be | |||
Internet or 6LoWPAN [RFC4919] (Section 2 of [RFC7959]). EST-coaps | able to fragment messages into multiple DTLS datagrams. | |||
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 | EST-coaps servers MUST implement Block1 and Block2. EST-coaps | |||
servers MUST also support Block1. The EST-coaps client MUST support | clients MUST implement Block2. EST-coaps clients MUST implement | |||
Block1 only if it sends EST-coaps requests with an IP packet size | Block1 only if they are expecting to send EST-coaps requests with a | |||
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. EST-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 | 5.7. Delayed Responses | |||
Server responses can sometimes be delayed. According to | Server responses can sometimes be delayed. According to | |||
skipping to change at page 18, line 37 ¶ | skipping to change at page 17, line 49 ¶ | |||
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 2. 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. | client acknowledges all subsequent Block2 blocks. The notation of | |||
Figure 2 is explained in Appendix B.1. | ||||
The notation of Figure 2 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) {CSR (frag# 1)} --> | |||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | |||
<-- (0.00 empty ACK) | <-- (0.00 empty ACK) | |||
skipping to change at page 19, line 29 ¶ | skipping to change at page 18, line 29 ¶ | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:1/0/256) --> | |||
<-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | <-- (ACK) (2:1/1/256) (2.04 Changed) {Cert resp (frag# 2)} | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | <-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | |||
Figure 2: EST-COAP enrollment with short wait | Figure 2: EST-COAP enrollment with short wait | |||
If the server is very slow (i.e., minutes) in providing the response | If the server is very slow (for example, manual intervention is | |||
(i.e., when a manual intervention is needed), it SHOULD respond with | required which would take minutes), it SHOULD respond with an ACK | |||
an ACK containing response code 5.03 (Service unavailable) and a Max- | containing response code 5.03 (Service unavailable) and a Max-Age | |||
Age Option to indicate the time the client SHOULD wait to request the | Option to indicate the time the client SHOULD wait before sending | |||
content later. After a delay of Max-Age, the client SHOULD resend | another request to obtain the content. After a delay of Max-Age, the | |||
the identical CSR to the server. As long as the server responds with | client SHOULD resend the identical CSR to the server. As long as the | |||
response code 5.03 (Service Unavailable) with a Max-Age Option, the | server continues to respond with response code 5.03 (Service | |||
client SHOULD keep resending the enrollment request until the server | Unavailable) with a Max-Age Option, the client will continue to delay | |||
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 for | |||
other reasons. | policy or other reasons. | |||
To demonstrate this scenario, Figure 3 shows a client sending an | To demonstrate this scenario, Figure 3 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) {CSR (frag# 1)} --> | |||
<-- (ACK) (1:0/1/256) (2.31 Continue) | <-- (ACK) (1:0/1/256) (2.31 Continue) | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | POST [2001:db8::2:1]:61616/est/sen (CON)(1:1/1/256) {CSR (frag# 2)} --> | |||
<-- (ACK) (1:1/1/256) (2.31 Continue) | <-- (ACK) (1:1/1/256) (2.31 Continue) | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | POST [2001:db8::2:1]:61616/est/sen(CON)(1:N1/0/256){CSR (frag# N1+1)}--> | |||
skipping to change at page 20, line 43 ¶ | skipping to change at page 19, line 43 ¶ | |||
. | . | |||
. | . | |||
. | . | |||
POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | POST [2001:db8::2:1]:61616/est/sen (CON)(2:N2/0/256) --> | |||
<-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | <-- (ACK) (2:N2/0/256) (2.04 Changed) {Cert resp (frag# N2+1)} | |||
Figure 3: EST-COAP enrollment with long wait | Figure 3: EST-COAP enrollment with long wait | |||
5.8. Server-side Key Generation | 5.8. Server-side Key Generation | |||
In scenarios where it is desirable that the server generates the | Private keys can be generated on the server to support scenarios | |||
private key, server-side key generation is available. Such scenarios | where serer-side key generation is needed. Such scenarios include | |||
could be when it is considered more secure to generate at the server | those where it is considered more secure to generate the long-lived, | |||
the long-lived random private key that identifies the client, or when | 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 when 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. Of course, that does not eliminate the | generated and controlled. As always, it is necessary to use proper | |||
need for proper random numbers in various protocols like (D)TLS | random numbers in various protocols such as (D)TLS (Section 10.1). | |||
(Section 10.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 which | server or proxy to generate the private key and the certificate, | |||
are transferred back to the client in the server-side key generation | which are transferred back to the client in the server-side key | |||
response. In all respects, the server treats the CSR as it would | generation response. In all respects, the server treats the CSR as | |||
treat any enroll or re-enroll CSR; the only distinction here is that | it would treat any enroll or re-enroll CSR; the only distinction here | |||
the server MUST ignore the public key values and signature in the | is that the server MUST ignore the public key values and signature in | |||
CSR. These are included in the request only to allow re-use of | the CSR. These are included in the request only to allow re-use 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-Format | |||
280 for the private key. Then the private key is encrypted | 280 for the private key. Then this 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 | |||
specification. A /skg or /skc request with a CSR without | this 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 | ||||
(Section 5.3) | array items) do not have to be in a particular order since each | |||
representation is preceded by its Content-Format ID. Depending on | ||||
. The two representations (each consisting of two CBOR array items) | the request, the private key can be in unprotected PKCS#8 [RFC5958] | |||
do not have to be in a particular order since each representation is | format (Content-Format 284) or protected inside of CMS SignedData | |||
preceded by its Content-Format ID. Dependent on the request, the | (Content-Format 280). The SignedData, placed in the outermost | |||
private key can be in unprotected PKCS#8 [RFC5958] format (Content- | container, is signed by the party that generated the private key, | |||
Format 284) or protected inside of CMS SignedData (Content-Format | which may be the EST server or the EST CA. SignedData placed within | |||
280). The SignedData, placed in the outermost container, is signed | the Enveloped Data does not need additional signing as explained in | |||
by the party that generated the private key, which may be the EST | Section 4.4.2 of [RFC7030]. In summary, the symmetrically encrypted | |||
server or the EST CA. SignedData placed within the Enveloped Data | key is included in the encryptedKey attribute in a KEKRecipientInfo | |||
does not need additional signing as explained in Section 4.4.2 of | structure. In the case where the asymmetric encryption key is | |||
[RFC7030]. In summary, the symmetrically encrypted key is included | suitable for transport key operations the generated private key is | |||
in the encryptedKey attribute in a KEKRecipientInfo structure. In | encrypted with a symmetric key. The symmetric key itself is | |||
the case where the asymmetric encryption key is suitable for | encrypted by the client-defined (in the CSR) asymmetric public key | |||
transport key operations the generated private key is encrypted with | and is carried in an encryptedKey attribute in a | |||
a symmetric key which is encrypted by the client-defined (in the CSR) | KeyTransRecipientInfo structure. Finally, if the asymmetric | |||
asymmetric public key and is carried in an encryptedKey attribute in | ||||
a KeyTransRecipientInfo structure. Finally, if the asymmetric | ||||
encryption key is suitable for key agreement, the generated private | encryption key is suitable for key agreement, the generated private | |||
key is encrypted with a symmetric key which is encrypted by the | key is encrypted with a symmetric key. The symmetric key itself is | |||
client defined (in the CSR) asymmetric public key and is carried in | encrypted by the client defined (in the CSR) asymmetric public key | |||
an recipientEncryptedKeys attribute in a KeyAgreeRecipientInfo. | 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 28 ¶ | skipping to change at page 22, line 25 ¶ | |||
client. For example, it could be configured to accept PoP linking | client. For example, it could be configured to accept PoP linking | |||
information that does not match the current TLS session because the | information that does not match the current TLS session because the | |||
authenticated EST client Registrar has verified this information when | authenticated EST client Registrar has verified this information when | |||
acting as an EST server". | 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 5.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 Media-Type is defined in Section 9.1. | Content-Format to HTTP Content-Type is defined in Section 9.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 | |||
skipping to change at page 24, line 8 ¶ | skipping to change at page 23, 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]. | 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 | ||||
EST does not impose any unique values on the CoAP parameters in | parameter values may have consequence for the setting of the EST | |||
[RFC7252], but the setting of the CoAP parameter values may have | parameter values. | |||
consequence for the setting of the EST parameter values. | ||||
It is recommended, based on experiments, | ||||
to follow the default CoAP configuration parameters ([RFC7252]). | Implementations should follow the default CoAP configuration | |||
However, depending on the implementation scenario, retransmissions | parameters [RFC7252]. However, depending on the implementation | |||
and timeouts can also occur on other networking layers, governed by | scenario, retransmissions and timeouts can also occur on other | |||
other configuration parameters. When a change in a server parameter | networking layers, governed by other configuration parameters. When | |||
has taken place, the parameter values in the communicating endpoints | a change in a server parameter has taken place, the parameter values | |||
MUST be adjusted as necessary. | in the communicating endpoints MUST be adjusted as necessary. | |||
Examples of how parameters could be adjusted include higher layer | ||||
congestion protocols, provisioning agents and configurations 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]: | |||
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 25, line 17 ¶ | skipping to change at page 24, line 17 ¶ | |||
9. IANA Considerations | 9. IANA Considerations | |||
9.1. Content-Format Registry | 9.1. Content-Format Registry | |||
Additions to the sub-registry "CoAP Content-Formats", within the | Additions to the sub-registry "CoAP Content-Formats", within the | |||
"CoRE Parameters" registry [COREparams] are specified in Table 5. | "CoRE Parameters" registry [COREparams] are specified in Table 5. | |||
These have been registered provisionally in the IETF Review or IESG | These have been registered provisionally in the IETF Review or IESG | |||
Approval range (256-9999). | Approval range (256-9999). | |||
+------------------------------+-------+----------------------------+ | +------------------------------+-------+----------------------------+ | |||
| HTTP Media-Type | ID | Reference | | | HTTP Content-Type | ID | Reference | | |||
+------------------------------+-------+----------------------------+ | +------------------------------+-------+----------------------------+ | |||
| 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- | | |||
skipping to change at page 26, line 16 ¶ | skipping to change at page 25, line 16 ¶ | |||
CSR attributes. | CSR attributes. | |||
o rt="ace.est.skg". This resource depicts the support of EST | o rt="ace.est.skg". This resource depicts the support of EST | |||
server-side key generation with the returned certificate in a | server-side key generation with the returned certificate in a | |||
PKCS#7 container. | PKCS#7 container. | |||
o rt="ace.est.skc". This resource depicts the support of EST | o rt="ace.est.skc". This resource depicts the support of EST | |||
server-side key generation with the returned certificate in | server-side key generation with the returned certificate in | |||
application/pkix-cert format. | application/pkix-cert format. | |||
9.3. Well-Known URIs Registry | ||||
A new additional reference is requested for the est URI in the Well- | ||||
Known URIs registry: | ||||
+------+--------+---------+---------+----------+---------+----------+ | ||||
| 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 | 10. Security Considerations | |||
10.1. EST server considerations | 10.1. EST server considerations | |||
The security considerations of Section 6 of [RFC7030] are only | The security considerations of 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 of [RFC7030] continue to apply. | |||
skipping to change at page 26, line 40 ¶ | skipping to change at page 26, line 7 ¶ | |||
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 sources contributing to the randomness | It is important to note that, as pointed out in [PsQs], sources | |||
pool used to generate random numbers on laptops or desktop PCs are | contributing to the randomness pool used to generate random numbers | |||
not available on many constrained devices, such as mouse movement, | on laptops or desktop PCs, such as mouse movement, timing of | |||
timing of keystrokes, or air turbulence on the movement of hard drive | keystrokes, or air turbulence on the movement of hard drive heads, | |||
heads, as pointed out in [PsQs]. Other sources have to be used or | are not available on many constrained devices. Other sources have to | |||
dedicated hardware has to be added. Selecting hardware for an IoT | be used or dedicated hardware has to be added. Selecting hardware | |||
device that is capable of producing high-quality random numbers is | for an IoT device that is capable of producing high-quality random | |||
therefore important [RSAfact]. | numbers is therefore important [RSAfact]. | |||
It is also RECOMMENDED that the 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 successfully | As discussed in Section 6 of [RFC7030], it is "RECOMMENDED that the | |||
receiving the Distribution of CA certificates response (Section 4.1.3 | Implicit Trust Anchor database used for EST server authentication is | |||
of [RFC7030]) limits any risk to the first DTLS exchange. | carefully managed to reduce the chance of a third-party CA with poor | |||
Alternatively, in a case where a /sen request immediately follows a | certification practices jeopardizing authentication. Disabling the | |||
/crts, a client MAY choose to keep the connection authenticated by | Implicit Trust Anchor database after successfuly receiving the | |||
the Implicit TA open for efficiency reasons (Section 4). A client | Distribution of CA certificates response (Section 4.1.3) limits any | |||
that interleaves EST-coaps /crts request with other requests in the | risk to the first TLS exchange". Alternatively, in a case where a | |||
same DTLS connection SHOULD revalidate the server certificate chain | /sen request immediately follows a /crts, a client MAY choose to keep | |||
against the updated Explicit TA from the /crts response before | the connection authenticated by the Implicit TA open for efficiency | |||
proceeding with the subsequent requests. If the server certificate | reasons (Section 4). A client that interleaves EST-coaps /crts | |||
chain does not authenticate against the database, the client SHOULD | request with other requests in the same DTLS connection SHOULD | |||
close the connection without completing the rest of the requests. | revalidate the server certificate chain against the updated Explicit | |||
The updated Explicit TA MUST continue to be used in new DTLS | TA from the /crts response before proceeding with the subsequent | |||
connections. | 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 | 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 raise | |||
that the client is to be trusted. | 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 | |||
information about recommendations 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 CMC, Section 6.7 of [RFC5272], "For keys that can be | |||
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. | binding is in use. Implementers should use the Extended Master | |||
Secret Extension in DTLS [RFC7627] to prevent such attacks. In the | ||||
Implementers should use the Extended Master Secret Extension in DTLS | context of this specification, an attacker could invalidate the | |||
[RFC7627] to prevent such attacks. In the context of this | purpose of the PoP linking ChallengePassword in the client request by | |||
specification, an attacker could invalidate the purpose of the PoP | resuming an EST-coaps connection. Even though the practical risk of | |||
linking ChallengePassword in the client request by resuming an EST- | such an attack to EST-coaps is not devastating, we would rather use a | |||
coaps connection. Even though the practical risk of such an attack | more secure channel binding mechanism. Such a mechanism could | |||
to EST-coaps is not devastating, we would rather use a more secure | include an updated tls-unique value generation like the tls-unique- | |||
channel binding mechanism. Such a mechanism could include an updated | prf defined in [I-D.josefsson-sasl-tls-cb] by using a TLS exporter | |||
tls-unique value generation like the tls-unique-prf defined in | [RFC5705] in TLS 1.2 or TLS 1.3's updated exporter (Section 7.5 of | |||
[RFC8446]) value in place of the tls-unique value in the CSR. Such | ||||
[I-D.josefsson-sasl-tls-cb] by using a TLS exporter [RFC5705] in TLS | mechanism has not been standardized yet. Adopting a channel binding | |||
1.2 or TLS 1.3's updated exporter (Section 7.5 of [RFC8446]) value in | value generated from an exporter would break backwards compatibility | |||
place of the tls-unique value in the CSR. Such mechanism has not | for an RA that proxies through to a classic EST server. Thus, in | |||
been standardized yet. Adopting a channel binding value generated | this specification we still depend on the tls-unique mechanism | |||
from an exporter would break backwards compatibility for an RA that | defined in [RFC5929], especially since a 3SHAKE attack does not | |||
proxies through to a classic EST server. Thus, in this specification | expose messages exchanged with EST-coaps. | |||
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 29, line 9 ¶ | skipping to change at page 28, line 22 ¶ | |||
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. | implementation that started in 2015. Sandeep Kumar kick-started this | |||
specification and was instrumental in drawing attention to the | ||||
Sandeep Kumar kick-started this specification and was instrumental in | importance of the subject. | |||
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 34, line 50 ¶ | skipping to change at page 34, line 32 ¶ | |||
Option (Uri-Path) | Option (Uri-Path) | |||
Option Delta = 0x0 (option# 11+0=11) | Option Delta = 0x0 (option# 11+0=11) | |||
Option Length = 0x4 | Option Length = 0x4 | |||
Option Value = "crts" | Option Value = "crts" | |||
Option (Accept) | Option (Accept) | |||
Option Delta = 0x6 (option# 11+6=17) | Option Delta = 0x6 (option# 11+6=17) | |||
Option Length = 0x2 | Option Length = 0x2 | |||
Option Value = 281 | Option Value = 281 | |||
Payload = [Empty] | Payload = [Empty] | |||
The Uri-Host and Uri-Port Options can be omitted if they coincide | As specified in Section 5.10.1 of [RFC7252], the Uri-Host and Uri- | |||
with the transport protocol destination address and port | Port Options can be omitted if they coincide with the transport | |||
respectively. Explicit Uri-Host and Uri-Port Options are typically | protocol destination address and port respectively. | |||
used when an endpoint hosts multiple virtual servers and uses the | ||||
Options to route the requests accordingly. | ||||
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 | |||
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 CoAP fields | |||
Ver = 1 | Ver = 1 | |||
T = 2 (ACK) | T = 2 (ACK) | |||
Code = 0x45 (2.05 Content) | Code = 0x45 (2.05 Content) | |||
End of changes. 60 change blocks. | ||||
276 lines changed or deleted | 268 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/ |