Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile
Daniel Migault <mglt.ietf@gmail.com> Fri, 04 September 2020 02:58 UTC
Return-Path: <mglt.ietf@gmail.com>
X-Original-To: ace@ietfa.amsl.com
Delivered-To: ace@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 845573A1554 for <ace@ietfa.amsl.com>; Thu, 3 Sep 2020 19:58:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rzsZFabyospX for <ace@ietfa.amsl.com>; Thu, 3 Sep 2020 19:58:14 -0700 (PDT)
Received: from mail-vs1-xe31.google.com (mail-vs1-xe31.google.com [IPv6:2607:f8b0:4864:20::e31]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0B5AE3A1527 for <ace@ietf.org>; Thu, 3 Sep 2020 19:58:14 -0700 (PDT)
Received: by mail-vs1-xe31.google.com with SMTP id o184so2928031vsc.0 for <ace@ietf.org>; Thu, 03 Sep 2020 19:58:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=tLU/EB5MAVb7BpXM/EHPbN3UillsW377o4Zq80wBu4Y=; b=a4DRPk1FfkOzoJexWOTfsWc8fQhV0CyoBY5MxFoEdT7L1ohb4BTYvp9uxjQcjW7INK Z7ZhNDkDMEzmCPPTIGTj5K2j7mwU/bMjyB99IKCfEJsmqXBHb3WR818ByM50t7Ve92IQ RxJqKxDUqziXH9AmIroSZ/UUQok5JsHjVoJsUQ9r2cEHlyEt5I4nbUo8Dkdncdknjqi2 +xVg8+r0z1J1ZJQjb5FU1mBjlhXc8NwPgoAQ94V4u3g2C9isJKBw5uKlgjShsSdgoksO FWDykwcazz7/3D7GxCbfCwqmQFNj9bj6STC3EFFSmeYc2XORpn+1Cmsuq9FmsnJJ6hMk 6u6w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=tLU/EB5MAVb7BpXM/EHPbN3UillsW377o4Zq80wBu4Y=; b=fWYiGcGxP3TfzhuHqk1ohU+KYJ7RUWB5XKEQQUhH74uSauHv6owXrNP/biuQkU9qs/ Gien+K1uQ1wSqdn6Ud8MMCQwbgNU6kEMwUDzWMinhhtOjY+jjguScH4e+DuFYpAYGTCG HkoP6oEJDxnbN8pX7f+4aNncON4/Ro+5ZQD4EvLGg+dswFhBbgNVU3gIl+kHigHki/cm UDD8VYhz/4MLYBtBqtJeczSTCULM8YdtZ6qDiIzowge/y6C0me4GeXB6QuF0+8705b0V UqhVbmu2KraV2cI9gy3KqJ6+7qEHWS0vFnO20kys35aHyNWBkRqkH+BvpinmgUu4VKJT UoKg==
X-Gm-Message-State: AOAM5334zRlZ4NMgb2Xsn/lUYl/9ckvAYVV5flSAWFyVq1BvaCnOT9H3 n9Q5GrCHtNQzG3gnYZSEpDu0btDAQO9zdtoxhGsBEz3EtRo=
X-Google-Smtp-Source: ABdhPJxBHMjHJvQUfCSzhxg4SHeMwsxL8ixbnQBU7bLByUbXJIzETzTFk+9NOc2QO3kRIGe56LorBqPlymxV5lvSVlo=
X-Received: by 2002:a67:8b44:: with SMTP id n65mr3511323vsd.9.1599188292067; Thu, 03 Sep 2020 19:58:12 -0700 (PDT)
MIME-Version: 1.0
References: <CADZyTkmMd7iO3jo359QSS+y1LoSKvoDw+vJonD8VUfheEgXLTA@mail.gmail.com>
In-Reply-To: <CADZyTkmMd7iO3jo359QSS+y1LoSKvoDw+vJonD8VUfheEgXLTA@mail.gmail.com>
From: Daniel Migault <mglt.ietf@gmail.com>
Date: Thu, 03 Sep 2020 22:58:01 -0400
Message-ID: <CADZyTkm9x62oTxHp8EwqWxkQT3Tn6szZ4myuM5XJWt-4FQS92g@mail.gmail.com>
To: Ace Wg <ace@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000013e77305ae740a65"
Archived-At: <https://mailarchive.ietf.org/arch/msg/ace/BOv9hcQ6BHL0S35llarixKcWyco>
Subject: Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile
X-BeenThere: ace@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Authentication and Authorization for Constrained Environments \(ace\)" <ace.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/ace>, <mailto:ace-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ace/>
List-Post: <mailto:ace@ietf.org>
List-Help: <mailto:ace-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ace>, <mailto:ace-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 04 Sep 2020 02:58:19 -0000
Hi, I reviewed the document and believe it is well written. I have some comments/questions inline. I have also started the shepherd write up and need the following elements to be performed or provided: A) Are there existing implementations of the protocol? B) Has each author confirmed that any and all appropriate IPR disclosures required for full conformance with the provisions of BCP 78 and BCP 79 have already been filed C) Miscellaneous warnings: ( from the nits button on the datatracker) == Line 497 has weird spacing: '...rotocol name ...' == Line 901 has weird spacing: '...rotocol name ...' == The document seems to lack the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. ( I think that is an error as I can see the section 1.1.) == Unused Reference: 'RFC7250' is defined on line 1135, but no explicit reference was found in the text -- Unexpected draft version: The latest known version of draft-ietf-ace-oauth-authz is -34, but you're referring to -35. -- Unexpected draft version: The latest known version of draft-ietf-ace-oauth-params is -12, but you're referring to -13. -- Unexpected draft version: The latest known version of draft-ietf-ace-pubsub-profile is -00, but you're referring to -01. D) The IANA section needs to be completed and you MAY start sending a request for the expor ted label. (See more details inline). I also suggest you check with the IANA everything is fine. Please find some comments inline to the current version of the draft. Message Queuing Telemetry Transport (MQTT)-TLS profile of Authentication and Authorization for Constrained Environments (ACE) Framework draft-ietf-ace-mqtt-tls-profile-07 [...] 2. Authorizing Connection Requests This section specifies how Client connections are authorized by the MQTT Broker. Figure 1 shows the basic protocol flow during connection set-up. The token request and response use the token endpoint at the AS, specified in Section 5.6 of the ACE framework [I-D.ietf-ace-oauth-authz]. Steps (D) and (E) are optional and use the introspection endpoint, specified in Section 5.7 of the ACE framework. The Client and the Broker use HTTPS to communicate to AS via these endpoints. The Client and the Broker use MQTT to communicate between them. If the Client is resource-constrained, a Client Authorisation Server may carry out the token request on behalf of the Client, and later, onboard the Client with the token. <mglt> I understand the Client Authorization Server as a proxy. If that is not a well known term, I am wondering if we need to have a specific designation ? The current designation might be confusing with the AS, is not represented in the figure and as far as I understand is more related to a client than to a server. Client Authorization Server Interface or Client Authorization Server Client ? I am fine leaving it at is in any case. </mglt> [...] 2.1. Client Token Request to the Authorization Server (AS) The first step in the protocol flow (Figure 1 (A)) is the token acquisition by the Client from the AS. The Client and the AS MUST perform mutual authentication. The Client requests an access token from the AS as described in Section 5.6.1 of the ACE framework [I-D.ietf-ace-oauth-authz], however, it MUST set the profile parameter to 'mqtt_tls'. The media format is 'application/ace+json'. The AS uses JSON in the payload of its responses to both to the Client and the RS. <mglt> This is perhaps my reading, but I do expect however to bring a contradiction to 5.6.1. This does not seems the case here. I understand that the ace_profile MUST be set to mqtt_tls. I am wondering if s/however ... /with the profile set to mqtt_tls. is not sufficient. This is not a strong push from my side either. There is a nit "to both to" </mglt> If the AS successfully verifies the access token request and authorizes the Client for the indicated audience (i.e. RS) and scopes (i.e. publish/subscribe permissions over topics), the AS issues an access token (Figure 1 (B)). The response includes the parameters described in Section 5.6.2 of the ACE framework [I-D.ietf-ace-oauth-authz]. The returned token is a Proof-of- Possession (PoP) token by default. This document follows RFC 7800 [RFC7800] for PoP semantics for JWTs. The PoP token includes a 'cnf' parameter with a symmetric or asymmetric PoP key. Note that the <mglt> I am wondering if the PoP token should not be the access token instead ? I would rather expect the 'cnf' to contain the PoP, but I must admit I am not too familiar with terminology or usage so I might be wrong. </mglt> [...] 'cnf' parameter in the web tokens are to be consumed by the RS and not the Client. For the asymmetric case, the PoP token may include the 'rs_cnf' parameter containing the information about the public key to be used by the RS to authenticate as described in [I-D.ietf-ace-oauth-params]. <mglt> Same comment regarding the PoP token. </mglt> The AS returns error responses for JSON-based interactions following Section 5.2 of RFC 6749 [RFC6749]. When CBOR is used, the interactions must implement Section 5.6.3 of the ACE framework [I-D.ietf-ace-oauth-authz]. 2.2. Client Connection Request to the Broker (C) 2.2.1. Client-Server Authentication over TLS and MQTT The Client and the Broker MUST perform mutual authentication. The Client MUST authenticate to the Broker either over MQTT or TLS. For MQTT, the options are "None" and "ace". For TLS, the options are "Anon" for an anonymous client, and "Known(RPK/PSK)" for Raw Public Keys (RPK) and Pre-Shared Keys (PSK), respectively. Combined, client authentication has the following options: o "TLS:Anon-MQTT:None": This option is used only for the topics that do not require authorization, including the "authz-info" topic. Publishing to the "authz-info" topic is described in Section 2.2.2. o "TLS:Anon-MQTT:ace": The token is transported inside the CONNECT message, and MUST be validated using one of the methods described in Section 2.2.2. This option also supports a tokenless connection request for AS discovery. o "TLS:Known(RPK/PSK)-MQTT:none": For the RPK, the token MUST have been published to the "authz-info" topic. For the PSK, the token MAY be, alternatively, provided in the "psk_identity". The TLS session set-up is as described in DTLS profile for ACE [I-D.ietf-ace-dtls-authorize]. o "TLS:Known(RPK/PSK)-MQTT:ace": This option SHOULD NOT be chosen. In any case, the token transported in the CONNECT overwrites any permissions passed during the TLS authentication. It is RECOMMENDED that the Client follows TLS:Anon-MQTT:ace. The Broker MUST be authenticated during the TLS handshake. If the Client authentication uses TLS:Known(RPK/PSK), then the Broker is authenticated using the respective method. Otherwise, to authenticate the Broker, the client MUST validate a public key from a Sengul, et al. Expires February 26, 2021 [Page 9] Internet-Draft MQTT-TLS profile of ACE August 2020 X.509 certificate or an RPK from the Broker against the 'rs_cnf' parameter in the token response. The AS MAY include the thumbprint of the RS's X.509 certificate in the 'rs_cnf' (thumbprint as defined in [I-D.ietf-cose-x509]). In this case, the client MUST validate the RS certificate against this thumbprint. <mglt> I am considering two main ways to authenticate the client TLS:Anon-MQTT:ace and TLS:Known(RPK/PSK)-MQTT:none. If a server supports both it is unclear to me how he can distinguish one method of authentication versus the other. TLS:Known(PSK)-MQTT:none If the TLS client provides a psk_identity, the TLS server may take this as an indication and lookup in the authz-info to see if there is a matching identity. This would assume that that kid is mentioned in the PoP. TLS:Known(RPSK)-MQTT:none If the client provides a post_handshake_auth, this may be taken as a hint that the client is associated to a RPSK. The Broker may instead chose to send a CertificateRequest, and upon receiving the Certificate message verify there is a matching RPK. If the client does not provide the post_handshake_auth, it is unclear to me how the broker may distinguish a TLS:Known(RPSK)-MQTT:none from a TLS:Anon-MQTT:ace. In case there is no matching RPK, I am wondering if the broker falls back in a expected TLS:Anon-MQTT:ace. I might be missing something, but it seems that the authentication method is pre-agreed. Maybe some text may be added here. </mglt> 2.2.2. authz-info: The Authorization Information Topic In the cases when the Client MUST transport the token to the Broker first, <mglt> Just to make sure I understand properly, this corresponds to the MQTT:None and the motivation to publish the access token on the authz_info topic to to further proceed to an authentication. As a result, the token is only provided to the broker first to perform TLS:Known(PSK/RPK-MQTT:None. Am I missing something ? </mglt> the Client connects to the Broker to publish its token to the "authz-info" topic. The "authz-info" topic MUST be publish-only (i.e. the Clients are not allowed to subscribe to it). "authz-info" is not protected, and hence, the Client uses the "TLS:Anon-MQTT:None" option over a TLS connection. After publishing the token, the Client disconnects from the Broker and is expected to reconnect using client authentication over TLS (i.e. TLS:Known(RPK/PSK)-MQTT:none). <mglt> ok. </mglt> 2.2.3. Transporting Access Token Inside the MQTT CONNECT This section describes how the Client transports the token to the Broker (RS) inside the CONNECT message. If this method is used, the Client TLS connection is expected to be anonymous, and the Broker is authenticated during the TLS connection set-up. The approach described in this section is similar to an earlier proposal by Fremantle et al [fremantle14]. After sending the CONNECT, the client MUST NOT send any packets other than DISCONNECT or AUTH that is in response to the broker AUTH until it has received a CONNACK. Similarly, the server MUST NOT process any packets other than DISCONNECT or an AUTH that is sent in response to its AUTH before it has sent a CONNACK. <mglt> The wording seems quite complex. I understand the text as saying: The broker responds to a CONNECT from the client with an AUTH. A client MUST only response to the broker AUTH with DISCONNECT or AUTH. Only after receiving a CONNACK, the client MAY start publishing or receive subscription. </mglt> [...] The CONNECT message flags are Username, Password, Will retain, Will QoS, Will Flag, Clean Start, and Reserved. Figure 8 shows how the flags MUST be set to use AUTH packets for authentication and authorisation, i.e. the username and password flags MUST be set to 0. An MQTT v5.0 RS MAY also support token transport using Username and Password to provide a security option for MQTT v3.1.1 clients, as described in Section 6. <mglt> Maybe that is clarified in section 6, but I am wondering if the text clearly prevents the use of username and password flags MUST NOT be used with MQTT v5 client even if they also support MQTTv3.1.1 clients. </mglt> [ ... ] If necessary, the Broker MAY support session continuation, and hence, maintain and use client state from the existing session. The session state kept at the server MAY include token and its introspection result (for reference tokens) in addition to the MQTT session state. The MQTT session state is identified by the Client identifier and includes state on client subscriptions, QoS 1 and QoS 2 messages which have have not been completely acknowledged or pending transmission to the Client, and if the Session is currently not connected, the time at which the Session will end and Session State will be discarded. <mglt> have have isn't "have" pending ... ? and"," if .... or maybe the sentence may be split. </mglt> [...] 2.2.4. Authentication Using AUTH Property To use AUTH, the Client MUST set the Authentication Method as a property of a CONNECT packet by using the property identifier 21 (0x15). This is followed by a UTF-8 Encoded String containing the name of the Authentication Method, which MUST be set to 'ace'. If the RS does not support this profile, it sends a CONNACK with a Reason Code of '0x8C (Bad authentication method)'. The Authentication Method is followed by the Authentication Data, which has a property identifier 22 (0x16) and is binary data. The binary data in MQTT is represented by a two-byte integer length, which indicates the number of data bytes, followed by that number of bytes. Based on the Authentication Data, this profile allows: o Proof-of-Possession using a challenge from the TLS session o Proof-of-Possession via Broker generated challenge/response <mglt> At this stage it is unclear to me how the RS knows or selected PoP of its choice. >From 2.2.4.1 it seems the distinction is performed form the length. It also means that both method MUST be supported by the RS, and the method is selected by the client. It might worth clarifying here unless there are reasons for not doing it I am missing. </mglt> [ ... ] 2.2.5. Token Validation The RS MUST verify the validity of the token either locally (e.g. in the case of a self-contained token) or the RS MAY send an introspection request to the AS. RS MUST verify the claims according to the rules set in the Section 5.8.1.1 of the ACE framework [I-D.ietf-ace-oauth-authz]. To authenticate the Client, the RS validates the signature or the MAC, depending on how the PoP protocol is implemented. HS256 and Ed25519 are mandatory to implement depending on the choice of <mglt> Seems to me that mandatory is normative here and MUST implement may be used instea </mglt> symmetric or asymmetric validation. Validation of the signature or MAC MUST fail if the signature algorithm is set to "none", when the key used for the signature algorithm cannot be determined, or the computed and received signature/MAC do not match. [...] 2.2.6.1. Unauthorised Request: Authorisation Server Discovery If the Client does not provide a valid token or omits the <mglt> I have not checked but it seems that we are using different designation for the token/access token / PoP token. Maybe one should pick a single designation. </mglt> [ ... ] 2.2.6.2. Authorisation Success On success, the reason code of the CONNACK is '0x00 (Success)'. If the Broker starts a new session, it MUST also set Session Present to 0 in the CONNACK packet to signal a clean session to the Client. Otherwise, it MUST set Session Present to 1. In case of an invalid PoP token, the CONNACK reason code is '0x87 (Not Authorized)'. <mglt> Same comment regarding the PoP token. </mglt> [ ...] 3. Authorizing PUBLISH and SUBSCRIBE Messages To authorize a Client's PUBLISH and SUBSCRIBE messages, the Broker uses the scope field in the token (or in the introspection result). The scope field contains the publish and subscribe permissions for the Client. The scope is a JSON array, each item following the Authorization Information Format (AIF) for ACE [I-D.bormann-core-ace-aif]. The specific data model for MQTT is: AIF-MQTT = AIF-Generic<topic_filter, permissions> AIF-Generic<topic_filter, permissions> = [* [topic_filter,permissions]] topic_filter = tstr permissions = [+permission] permission = "pub"/"sub" <mglt> I suspect that we will need to have I-D.bormann-core-ace-aif out to move this document. white space is missing after topic_filter, , maybe that is to fit the line space limit. It is unclear to me at that point what: "tstr" stands for. </mglt> Figure 5: AIF-MQTT data model Topic filters are implemented according to Section 4.7 of MQTT v5.0 - the OASIS Standard [MQTT-OASIS-Standard-v5] and includes special wildcard characters. The multi-level wildcard, '#', matches any number of levels within a topic, and the single-level wildcard, '+', matches one topic level. An example scope field may contain: [["topic1", ["pub","sub"]], ["topic2/#",["pub"]], ["+/topic3",["sub"]]] Figure 6: Example scope This access token gives publish ("pub") and subscribe ("sub") permissions to the 'topic1', publish permission to all the subtopics of 'topic2', and subscribe permission to all topic3, skipping one level. If the Will Flag is set, then the Broker MUST check that the token allows the publication of the Will message (i.e. the Will Topic filter is found in the scope). 3.1. PUBLISH Messages from the Publisher Client to the Broker On receiving the PUBLISH message, the Broker MUST use the type of message (i.e. PUBLISH) and the Topic name in the message header to match against the scope array items in the cached token or its introspection result. Following the example in the previous section, a client sending a PUBLISH message to 'topic2/a' would be allowed, as the scope array includes the '["topic2/#",["pub"]]'. If the Client is allowed to publish to the topic, the Broker must <mglt> I have the impression MUST would be acceptable too. I am not saying "must" is not acceptable but I would like we check this is not a mistake. </mglt> [ ... ] 3.2. PUBLISH Messages from the Broker to the Subscriber Clients To forward PUBLISH messages to the subscribing Clients, the Broker identifies all the subscribers that have valid matching topic subscriptions (i.e. the tokens are valid, and token scopes allow a subscription to the particular topic). The Broker sends a PUBLISH message with the Topic name to all the valid subscribers. The Broker MUST NOT forward messages to the unauthorized subscribers. <mglt> from the text above these subscribers seems more to me non valid subscribers (for a topic). I have the impression that invalid token will not generate a CONNACK in which case the RS will not even possibly send a PUBLISH message. If I am correct, I am wondering whether the text below needs to be mentioned </mglt> There is no way to inform the Clients with invalid tokens that an authorization error has occurred other than sending a DISCONNECT message. The Broker SHOULD send a DISCONNECT message with the reason code '0x87 (Not authorized)'. 3.3. Authorizing SUBSCRIBE Messages In MQTT, a SUBSCRIBE message is sent from a Client to the Broker to create one or more subscriptions to one or more topics. The SUBSCRIBE message may contain multiple Topic Filters. The Topic Filters may include wildcard characters. On receiving the SUBSCRIBE message, the Broker MUST use the type of message (i.e. SUBSCRIBE) and the Topic Filter in the message header to match against the scope field of the stored token or introspection result. The Topic Filters MUST be equal or a subset of at least one <mglt> I have the impression that Topic Filters MAY contain multiple filters. and must match one filter in the scope of the token not to be rejected. But the subscription will be considered for topics mentioned in the Topic Filters and mentioned in the token. The current text is not clear to me but I suspect this is due to a nit. </mglt> of the 'topic_filter' fields in the scope array found in the Client's token. [ ... ] 4. Token Expiration and Reauthentication [...] The token expiration is checked by checking the 'exp' claim of a JWT or introspection response, or via performing an introspection request with the AS as described in Section 5.7 of the ACE framework [I-D.ietf-ace-oauth-authz]. Token expirations may trigger the RS to send PUBACK, SUBACK and DISCONNECT messages with return code set to 'Not authorized'. After sending a DISCONNECT message, the network connection is closed, and no more messages can be sent. However, as a response to the PUBACK and SUBACK, the Client MAY reauthenticate. The Clients MAY also proactively update their tokens, i.e. before they receive a message with a 'Not authorized' return code. <mglt> Just for my knowledge, there is no possibility for the broker to send any warning or initiate the re-authentication. </mglt> [...] Authorized' return code to the Client. 6. Reduced Protocol Interactions for MQTT v3.1.1 This section describes a reduced set of protocol interactions for the MQTT v3.1.1 Clients. An MQTT v5.0 Broker MAY implement these interactions for the MQTT v3.1.1 clients; MQTT v5.0 clients are NOT Sengul, et al. Expires February 26, 2021 [Page 19] Internet-Draft MQTT-TLS profile of ACE August 2020 RECOMMENDED to use the flows described in this section. Brokers that do not support MQTT v3.1.1 clients return a CONNACK packet with Reason Code '0x84 (Unsupported Protocol Version)' in response to the connection requests. <mglt> I guess this has been discussed and RECOMMENDED was preferred over MUST NOT. If that is the case, I do not recall the reason... and maybe re-ask whether we shoudl not have MUST NOT instead. </mglt> 6.1. Token Transport As in MQTT v5.0, The Token MAY either be transported before by publishing to the "authz-info" topic, or inside the CONNECT message. <mglt> It seems that Token is another variant of access token/token... I also suspect that the context As in MQTT has been added after the initial sentence and the starting "The" of the initial sentence has not been changed. </mglt> In MQTT v3.1.1, after the Client published to the "authz-info" topic, the Broker cannot communicate the result of the token validation as PUBACK reason codes or server-side DISCONNECT messages are not supported. In any case, an invalid token would fail the subsequent TLS handshake, which can prompt the Client to obtain a valid token. <mglt> Just for my understanding, a published ticket that cannot be validated ( not able to decrypt, not able to authenticate, ..." will be rejected in which case the PSK RPK would be unknown to the broker. The broker will not fallback to a TLS:Anon as there is only one method that is pre-agreed between the client and the broker. </mglt> [...] 6.2. Handling Authorization Errors [...] o CONNECT without a token: It is not possible to support AS discovery via sending a tokenless CONNECT message to the Broker. This is because a CONNACK packet in MQTT v3.1.1 does not include a means to provide additional information to the Client. Therefore, AS discovery needs to take place out-of-band. CONNECT attempt MUST fail. <mglt> The last sentence might be missing tokenless or without token </mglt> [...] 7. IANA Considerations This document registers 'EXPORTER-ACE-MQTT-Sign-Challenge' from Section 2.2.4.1 in the TLS Exporter Label Registry TLS-REGISTRIES [RFC8447]. <mglt> This is section 12 I think. There is a Recommended section. I suspect you can ask for "Y". https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels shows a DTLS-OK column. I believe you can start sending a request ls-reg-review@ietf.org see section 17 of 8447. </mglt> In addition, the following registrations are done for the ACE OAuth Profile Registry following the procedure specified in [I-D.ietf-ace-oauth-authz]. Note to the RFC editor: Please replace all occurrences of "[RFC- XXXX]" with the RFC number of this specification and delete this paragraph. Name: mqtt_tls Description: Profile for delegating Client authentication and authorization using MQTT as the application protocol and TLS For transport layer security. CBOR Value: Reference: [RFC-XXXX] 8. Security Considerations [...] For MQTT v5.0, when a Client connects with a long Session Expiry Interval, the RS may need to maintain Client's MQTT session state after it disconnects for an extended period. For MQTT v3.1.1, the session state may need to be stored indefinitely, as it does not have Sengul, et al. Expires February 26, 2021 [Page 23] Internet-Draft MQTT-TLS profile of ACE August 2020 a Session Expiry Interval feature. The RS SHOULD implement administrative policies to limit misuse of the session continuation by the Client. <mglt> I am wondering if the broker could not set a maximum session time and let the client reconnect at least for publisher clients. If MQTT is running over TLS ( and TCP) the broker might be able to detect when subscriber are not present anymore. This may result in messages being lost, but I am wondering if that would make sense. </mglt> On Tue, Sep 1, 2020 at 4:54 PM Daniel Migault <mglt.ietf@gmail.com> wrote: > Hi, > > This email starts a 2 weeks Working Group Last Call for > draft-ietf-ace-mqtt-tls-profile. Please review the document available > here [1] and provide your feed backs by September 15 2020. > > Yours, > Jim and Daniel > > [1] https://datatracker.ietf.org/doc/draft-ietf-ace-mqtt-tls-profile/ > > > -- > Daniel Migault > Ericsson > -- Daniel Migault Ericsson
- [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Daniel Migault
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Daniel Migault
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Marco Tiloca
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Cigdem Sengul
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Cigdem Sengul
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Marco Tiloca
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Cigdem Sengul
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Daniel Migault
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Cigdem Sengul
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Daniel Migault
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Cigdem Sengul
- Re: [Ace] WGLC draft-ietf-ace-mqtt-tls-profile Daniel Migault