Re: [OAUTH-WG] WGLC on draft-ietf-oauth-mtls-07

Neil Madden <> Thu, 29 March 2018 15:19 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 5335E127241 for <>; Thu, 29 Mar 2018 08:19:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id K_hSOWzPj0QM for <>; Thu, 29 Mar 2018 08:19:04 -0700 (PDT)
Received: from ( [IPv6:2a00:1450:400c:c09::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 5F6DA126BF0 for <>; Thu, 29 Mar 2018 08:19:04 -0700 (PDT)
Received: by with SMTP id v21so11507276wmc.1 for <>; Thu, 29 Mar 2018 08:19:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=google; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=MWu7I7pswaG77C0KKCZrF9h+9WaHthDO0WKRnXVYxHk=; b=PgDWJCHhBlg58S0byBL6xP9st0e/Fn8m9H15EsfDfjbiUYxdNfxnihh0vm4O2X+v+c XkxicYU7E2UQzQ0XlBRUgWfZc6KSNaLYJqk0g4rd2bILa3UO7/q2HoQlJvVgcovRAfS7 Kt0Wfg30NMHadVgJaP/ccZBVAGTE7Hw93TgjU=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=MWu7I7pswaG77C0KKCZrF9h+9WaHthDO0WKRnXVYxHk=; b=Ce9rRQxla0tVRLf2kveP/TxmPP7h1XBSNG5WGuVVIoexqCCrtQm83qK44uV/ruRMGs MQb5H8V92PGTivFP1ZCI9lcR797BiqDGAddBYuVyi5OunQ1HrndegUiERlZEh+nz13bh 92lFekR92WiykSkKxh+13SXcGidlJr7SKtkXGiv8WnnTNYLh7HreOYMGLum9lEMh7JNi quZCIku9mq+2ylB2A4l+tE/LCEGWBFmp7DbUxHn8xpgdXb8/rZbF5qrz8zLw5Y2mtYmu Laj7zi7+nGsCeMN+NFGf8zWhJlQTJU9iDS5lhXqRAnwFQ3v9FiVg2+jQi2HzImdOJ7be 0Ecw==
X-Gm-Message-State: AElRT7F+lLrYlk2RjCkXej+n5A3djbdnWvV/RM8K7uMfWj89tl7MYxPD 3qqtnguXt7VdqMqAJdUi0tJrgg==
X-Google-Smtp-Source: AIpwx49OGeO2d25ZyAJRdHHFFwPmcbccxkBdRZ4VDuz4tiMItdLmzyMjaAbcl9E5yN6F9HJE6+GWIQ==
X-Received: by with SMTP id 65mr6383776wmj.29.1522336742445; Thu, 29 Mar 2018 08:19:02 -0700 (PDT)
Received: from guest2s-mbp.home ( []) by with ESMTPSA id n49sm10065729wrn.90.2018. (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 29 Mar 2018 08:19:01 -0700 (PDT)
From: Neil Madden <>
Message-Id: <>
Content-Type: multipart/signed; boundary="Apple-Mail=_8366DBC1-39B6-4AE8-B95C-6F73FCB5EDB2"; protocol="application/pgp-signature"; micalg="pgp-sha256"
Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
Date: Thu, 29 Mar 2018 16:18:59 +0100
In-Reply-To: <>
Cc: oauth <>
To: Rifaat Shekh-Yusef <>
References: <>
X-Mailer: Apple Mail (2.3445.5.20)
Archived-At: <>
Subject: Re: [OAUTH-WG] WGLC on draft-ietf-oauth-mtls-07
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: OAUTH WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 29 Mar 2018 15:19:07 -0000


I have reviewed this draft and have a number of comments, below. ForgeRock have not yet implemented this draft, but there is interest in implementing it at some point. (Disclaimer: We have no firm commitments on this at the moment, I do not speak for ForgeRock, etc).

1. defines a new confirmation method “x5t#S256”. However, there is already a confirmation method “jwk” that can contain a JSON Web Key, which itself can contain a “x5t#S526” claim with exactly the same syntax and semantics. The draft proposes:

	{ “cnf”: { “x5t#S256”: “…” } }

but you can already do:

	{ “cnf”: { “jwk”: { … , “x5t#S256”: “…” } } }

If the intent is just to save some space and avoid the mandatory fields of the existing JWK types, maybe this would be better addressed by defining a new JWK type which only has a thumbprint? e.g., { “kty”: “x5t”, “x5t#S256”: “…” }.

2. I find the naming “mutual TLS” and “mTLS” a bit of a misnomer: it’s really only the client authentication that we are interested here, and the fact that the server also authenticates with a certificate is not hugely relevant to this particular spec (although it is to the overall security of OAuth). Also, TLS defines non-certificate based authentication mechanisms (e.g. TLS-SRP extension for password authenticated key exchange, PSK for pre-shared key authentication) and even non-X.509 certificate types ( I’d prefer that the draft explicitly referred to “X.509 Client Certificate Authentication” rather than mutual TLS, and changed identifiers like ‘tls_client_auth’ ( to something more explicit like ‘tls_x509_pki_client_auth’.

This is especially confusing in section 3 on sender constrained access tokens, as there are two different servers involved: the AS and the protected resource server, but there is no “mutual” authentication between them, only between each of them and the client.

3. The draft links to the TLS 1.2 RFC, while the original OAuth 2.0 RFC only specifies TLS 1.0. Is the intention that TLS 1.2+ is required? The wording in Section 5.1 doesn’t seem clear if this could also be used with TLS 1.0 or 1.1, or whether it is only referring to future TLS versions.

4. It might be useful to have a discussion for implementors of whether TLS session resumption (and PSK in TLS 1.3) and/or renegotiation impact the use of client certificates, if at all?

5. Section 3 defines sender-constrained access tokens in terms of the confirmation key claims (e.g., RFC 7800 for JWT). However, the OAuth 2.0 Pop Architecture draft defines sender constraint and key confirmation as different things ( The draft should decide which of those it is implementing and if sender constraint is intended, then reusing the confirmation key claims seems misleading. (I think this mTLS draft is doing key confirmation so should drop the language about sender constrained tokens).

6. The OAuth 2.0 PoP Architecture draft says (

	 Strong, fresh session keys:

		Session keys MUST be strong and fresh.  Each session deserves an
      		independent session key, i.e., one that is generated specifically
		for the intended use.  In context of OAuth this means that keying
		material is created in such a way that can only be used by the
		combination of a client instance, protected resource, and
		authorization scope.

However, the mTLS draft section 3 ( says:

	The client makes protected resource requests as described in
   	[RFC6750], however, those requests MUST be made over a mutually
	authenticated TLS connection using the same certificate that was used
	for mutual TLS at the token endpoint.

These two statements are contradictory: the OAuth 2.0 PoP architecture effectively requires a fresh key-pair to be used for every access token request, whereas this draft proposes reusing the same long-lived client certificate for every single access token and every resource server.

In the self-signed case (and even in the CA case, with a bit of work - e.g., it is perfectly possible for the client to generate a fresh key-pair for each access token and include the certificate on the token request (e.g., as per - in which case an appropriate “alg” value should probably be described). This should probably at least be an option.

7. The use of a single client certificate with every resource server (RS) should be called out in a Privacy Considerations section, as it allows correlation of activity.

8. This is maybe a more general point, but RFC 6750 defines the Authorization: Bearer scheme ( for a client to communicate it’s access token to the RS in a standard way. As sender-constrained access tokens are not strictly bearer tokens any more, should this draft also register a new scheme for that? Should there be a generic PoP scheme?

9. The Security Considerations should really make some mention of the long history of attacks against X.509 certificate chain validation, e.g. failure to check the “CA” bit in the basic constraints, errors in parsing DNs, etc. It should be strongly suggested to use an existing TLS library to perform these checks rather than implementing your own checks. This relates to Justin’s comments around DN parsing and normalisation.

10. The PKI client authentication method ( makes no mention at all of certificate revocation and how to handle checking for that (CRLs, OCSP - with stapling?). Neither does the Security Considerations. If this is a detail to be agreed between then AS and the CA (or just left up to the AS TLS stack) then that should perhaps be made explicit. Again, there are privacy considerations with some of these mechanisms, as OCSP requests are typically sent in the clear (plain HTTP) and so allow an observer to see which clients are connecting to which AS.

11. The same comment applies to how the protected resource checks for revocation of the certificate presented during sender constrained access token usage. Should the RS make its own revocation checks based on the information in the certificate presented, or should it trust the certificate while the access token is still valid? If the latter case, is the AS responsible for revoking any access tokens whose certificate have been revoked (if so, should it be doing an OCSP call on every token introspection request, and should the RS be passing on the certificate/serial number on that request)? If the Client request uses OCSP Stapling ( how can the RS verify the signature on that if it does not have a separate trust relationship with the CA already?

12. The use of only SHA-256 fingerprints means that the security strength of the sender-constrained access tokens is limited by the collision resistance of SHA-256 - roughly “128-bit security" - without a new specification for a new thumbprint algorithm. An implication of this is that is is fairly pointless for the protected resource TLS stack to ever negotiate cipher suites/keys with a higher level of security. In more crystal ball territory, if a practical quantum computer becomes a possibility within the lifetime of this spec, then the expected collision resistance of SHA-256 would drop quadratically, allowing an attacker to find a colliding certificate in ~2^64 effort. If we are going to pick just one thumbprint hash algorithm, I would prefer we pick SHA-512.



> On 19 Mar 2018, at 22:34, Rifaat Shekh-Yusef <> wrote:
> All,
> As discussed during the meeting today, we are starting a WGLC on the MTLS document:
> Please, review the document and provide feedback on any issues you see with the document.
> The WGLC will end in two weeks, on April 2, 2018.
> Regards,
>  Rifaat and Hannes
> _______________________________________________
> OAuth mailing list