Re: [Acme] Specify which JWS serialization is used

Martin Thomson <martin.thomson@gmail.com> Sun, 04 March 2018 22:36 UTC

Return-Path: <martin.thomson@gmail.com>
X-Original-To: acme@ietfa.amsl.com
Delivered-To: acme@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 83AEC126BFD for <acme@ietfa.amsl.com>; Sun, 4 Mar 2018 14:36:53 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: YES
X-Spam-Score: 18.001
X-Spam-Level: ******************
X-Spam-Status: Yes, score=18.001 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLACK=20] autolearn=no 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 7WBIHslEmQqW for <acme@ietfa.amsl.com>; Sun, 4 Mar 2018 14:36:51 -0800 (PST)
Received: from mail-ot0-x22a.google.com (mail-ot0-x22a.google.com [IPv6:2607:f8b0:4003:c0f::22a]) (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 36382120227 for <acme@ietf.org>; Sun, 4 Mar 2018 14:36:51 -0800 (PST)
Received: by mail-ot0-x22a.google.com with SMTP id h8so13325313oti.6 for <acme@ietf.org>; Sun, 04 Mar 2018 14:36:51 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=lcsOP+vXByTxND0T3kcOI38W5oQKHQmWOqiPHrca+Do=; b=PIfUbnbp/gszHXofhY7OyA+5GSI5NM/SuVD6mXNzcqXAuosC4jycoABLFqFcOL7uWz S3GQkO+yLfgjc3NtiSOvKSzJqgc4cAC31B8BezGbWvJcskWMKi6bXb3K2mdMg9Ckw06N lT/bELhSJxQblAzJjdxr2PDhWQq/oSG97OiHjK6aMtdsyp8Ixiz6b+k2kPxOpOaY6k3+ q9WXhrS4gKHSI6iGPf20i4jGcgQSlGLfT1aEx7czhpXVkvljO+OjzZ5aUuWCgcD39BRf 72SLVRcr7GGotBmbZyvGMb3ueCpbzwL8bTcXgCcoSsE/ds/iv0uqWJGFpQM7zJogDVm6 t7Pg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lcsOP+vXByTxND0T3kcOI38W5oQKHQmWOqiPHrca+Do=; b=eMrnDfu4h2vouL55tpuS4nQR2wrbcHQhqLbTX75bI0MH3z3TQgJ8xzKrY1MLZ507g7 ku5EtwWXGaX/5g8JdkOSsAI6XZL7U5yJ6AIj+xjux9RKF1PWkmlA7EOPokDdk+bcmLPv wknMcNxstr8nGmgejSOxT0Ush99JHOhNTK9TO6AYhUM4koUaW4lKyIBycZjm+NxTDlwH DQvnRItS0mpJVD4YNCY1v4Ya5HIr1pmznFLTNpW9bMbSO67QpNbyWXUumtXsx0UeYuPB qlTHjm0UdQCS14iNNChK0L3axwiKB0Nr9Lsqy0ScPW3wEt2c0XQzOdqiJ3TvmfG+f195 k57Q==
X-Gm-Message-State: AElRT7FarVGWkuE5Abs7AXcZMte/hLF6hMIwoNAXzginNd4bJK/rm/3d DuDdVzev4QfB0oCQ2dcb1i4+HnM1pkTJvVwDF/k=
X-Google-Smtp-Source: AG47ELufhLCjO+x0fCeUgV5qJVfEvIMIkzmgrNeE0W8aY/YySxOA9YHwLTzgI43PFEkxXTKt8P5ynEje51qXw4lnWgg=
X-Received: by 10.157.53.10 with SMTP id o10mr8584280otc.283.1520203010572; Sun, 04 Mar 2018 14:36:50 -0800 (PST)
MIME-Version: 1.0
Received: by 10.157.16.85 with HTTP; Sun, 4 Mar 2018 14:36:50 -0800 (PST)
Received: by 10.157.16.85 with HTTP; Sun, 4 Mar 2018 14:36:50 -0800 (PST)
In-Reply-To: <CABkgnnVkRMC8RFbQFmFj7+_CakS3QbDU1VZ6m6H5-XxtCMPArg@mail.gmail.com>
References: <CAMmAzEKJhMaUBtCWSNZyGv-f+-edZ-WTq3=WFD_b1bXfvua89A@mail.gmail.com> <20180106001126.GB3076@carrot.tutnicht.de> <CAMmAzELgjpAmVCX6YB0VMvNQV3NH3NDdM_pdcz6d+h=ZO2rJww@mail.gmail.com> <CAMmAzEKMffffrxAihotVWPpqy=LaRkpSJuW9CpSVoQfLQ-nBwQ@mail.gmail.com> <CAL02cgRLXkkQECF5ssGh39uFL0xJp-3EODxGSQVzfPuEnE7FgA@mail.gmail.com> <63F4F466-8398-41E6-BD25-5414ADA9D1B3@felipegasper.com> <CAMmAzEKksnuBi0LPHsAsd2qs1brbMqrJBdtsbArTr6HhGrkN+A@mail.gmail.com> <CAL02cgRrH9fG-E9_oc4naSNvE4igaUcs9wXDfTtCTUCx+c4wbg@mail.gmail.com> <20180304125854.GH2161@carrot.tutnicht.de> <CAMmAzEJ0A2iOd2ASSHGJRfuB6Ss-BaOCXWsxUKUZx9UUzbT1ng@mail.gmail.com> <20180304143300.GI2161@carrot.tutnicht.de> <CAMmAzELuDLp4KxPtLgHp8AoyKGLOOjx4HPSrhDJ=yJ9RytU_vw@mail.gmail.com> <CABkgnnVkRMC8RFbQFmFj7+_CakS3QbDU1VZ6m6H5-XxtCMPArg@mail.gmail.com>
From: Martin Thomson <martin.thomson@gmail.com>
Date: Mon, 05 Mar 2018 09:36:50 +1100
Message-ID: <CABkgnnU9hV19d3BW_GvcA0sp9gtchTj-VhSDCnH3hBD2xAQvZw@mail.gmail.com>
To: Logan Widick <logan.widick@gmail.com>
Cc: Jörn Heissler <acme-specs@joern.heissler.de>, Richard Barnes <rlb@ipv.sx>, ACME WG <acme@ietf.org>, Felipe Gasper <felipe@felipegasper.com>, Fraser Tweedale <frase@frase.id.au>
Content-Type: multipart/alternative; boundary="001a113e0e266e865505669dd8d2"
Archived-At: <https://mailarchive.ietf.org/arch/msg/acme/d6bYwtWE4Jdj60iZ7jMEHk6Y-e8>
Subject: Re: [Acme] Specify which JWS serialization is used
X-BeenThere: acme@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Automated Certificate Management Environment <acme.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/acme>, <mailto:acme-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/acme/>
List-Post: <mailto:acme@ietf.org>
List-Help: <mailto:acme-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/acme>, <mailto:acme-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 04 Mar 2018 22:36:54 -0000

There needs to be a stronger benefit demonstrated than this. As Richard
says, implementing flat serialization is near trivial. Rather than add more
complexity, settling on precisely one format solves the problem neatly.

On 5 Mar. 2018 02:43, "Logan Widick" <logan.widick@gmail.com> wrote:

How about this: Specify a default format (either "application/jose" for
Compact Serialization, or "application/jose+json" with Flattened
Serialization - I have no preference which one), with optional support for
other formats if needed? Even with JOSE libraries that don't support all
serializations and/or don't provide control over which serialization is
used, a programmer would at least need to know (or experimentally find out)
if a JSON serialization or if the compact one is being produced. If a JSON
serialization is selected as the default, a programmer should be able to
convert between the two JSON serializations easily as needed before and/or
after using a JOSE library. If a JSON format is declared as the default but
the JOSE library only has the compact one, or vice-versa, conversion before
and/or after the JOSE library would be more complex but should still be
doable with guidance.

The directory meta item could be defined as something like:

   - supportedSerializations: An array of supported serialization formats
   as described in {{jws-serialization-formats}}. If this is not specified,
   assume that the server only supports [insert selected default here].

Then, the JWS Serialization Formats section could be changed to something
like the following:

The JSON Web Signature (JWS) specification {{!RFC7515}} contains multiple
JWS serialization formats. When sending an ACME request with a non-empty
body, an ACME client implementation SHOULD use the HTTP Content-Type
{{!RFC7231}} header to indicate which JWS serialization format is used for
encapsulating the ACME request payload.

Each serialization format defined for use in ACME is described with a
content type, and a series of ACME-specific restrictions on root JWS and
nested JWS instances.  A "root JWS" is a JWS used to encapsulate an entire
ACME request payload, and a "nested JWS" is a JWS contained within the ACME
request payload (such as the "externalAccountBinding" described in
{{external-account-binding}} or the "key-change" object described in
{{account-key-roll-over}}). Below are the JWS serialization formats that
are defined for use in ACME:

[same list as before but with the default format coming first]

If no Content-Type is provided, the default serialization type is [insert
selected default here]. Servers MUST support [insert selected default
here]. [NOTE: If a JSON format is selected as the default, say that a
server SHOULD support the other JSON format.] A server MAY support
additional serializations, such as [insert serialization(s) not picked
here], by including a "supportedSerializations" field in the directory
"meta" object as described in {{directory}}.

If a server receives a request using a serialization it does not support,
the server MUST send a response with HTTP status code 415 (Unacceptable
Media Type) and a problem document with error type
"unsupportedSerialization". This problem document SHOULD contain a
"supportedSerializations" array of strings indicating the acceptable
serialization content types.

[TODO: If a client uses the General JSON Serialization but it turns out the
server only supports the Flattened JSON Serialization (or vice-versa),
explain that a 415 response indicates that the client will need to switch
JSON formats]

[TODO: Insert a sentence or two specifying what happens if a supported
serialization is used but the serialization is malformed? Should this be
400 Bad Request + malformed error code + supportedSerializations?]

In the examples below, JWS objects are shown in the Flattened JSON
serialization, with the protected header and payload expressed as
base64url(content) instead of the actual base64-encoded value, so that the
content is readable. [Example readability is a very high priority
regardless of which serialization format is actually chosen as the default,
and the current convention of Flattened JSON + base64url(content) is about
as readable as it gets, so I don't think any changes will need to be made
here]


On Sun, Mar 4, 2018 at 8:33 AM, Jörn Heissler <acme-specs@joern.heissler.de>
wrote:

> On Sun, Mar 04, 2018 at 07:45:36 -0600, Logan Widick wrote:
> > Good catch. Should it be 415 (Unsupported Media Type) plus which of the
> > following (or which combination of the following):
> >
> >    - A new problem document field (tentatively named
> >    "supportedSerializations": an array of media type strings)?
> >    - A new directory field (tentatively named "supportedSerializations":
> an
> >    array of media type strings)?
> >       - Should this go in the directory's "meta" object, or in the
> >       directory object itself?
> >    - A HTTP header?
> >    - Something else?
>
> I like the directory approach with meta. Then a client could
> use this information before sending the first POST. Else the client
> would need to change an internal state after receiving the error
> message. For my own client, I'm planning to support the OpenPGP smart
> card. It takes 3 seconds to generate a signature. If a signature is
> wasted to find out that the default serialization is not supported, it
> would be annoying. Having to write a configuration file "use compact by
> default for CA foo" would be stupid too.
>
> This, and the problem document field. "supportedSerializations" sounds
> fine.
>
> Should the two features be OPTIONAL?
>
> I don't like HTTP headers, it's quite complicated to parse them correctly.
> JSON is so much easier.
>
>
> Or... specify that flattened MUST BE used :-)
>
> Cheers
> Joern Heissler
>


_______________________________________________
Acme mailing list
Acme@ietf.org
https://www.ietf.org/mailman/listinfo/acme