Hi Brian, Thanks for the detailed responses. Comments in line below (marked with ***).
Neil > On Wednesday, Apr 11, 2018 at 9:47 pm, Brian Campbell > <bcampb...@pingidentity.com (mailto:bcampb...@pingidentity.com)> wrote: > Thanks for the review and feedback, Neil. I apologize for my being slow to > respond. As I said to Justin recently > (https://mailarchive.ietf.org/arch/msg/oauth/cNmk8fSuxp37L-z8Rvr6_EnyCug), > I've been away from things for a while. Also there's a lot here to get > through so took me some time. > > It looks like John touched on some of your comments but not all. I'll try and > reply to them as best I can inline below. > > > On Thu, Mar 29, 2018 at 9:18 AM, Neil Madden <neil.mad...@forgerock.com > (mailto:neil.mad...@forgerock.com)> wrote: > > Hi, > > > > 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. https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-3.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”: > > “…” }. > > The intent of the x5t#S256 confirmation method was to be space efficient and > straightforward while utilizing the framework and registry that RFC 7800 > gives. Even a new JWK type like that would still use more space.. And I'd > argue that the new confirmation method is considerably more straightforward > than registering a new JWK type (and the implications that would have on JWK > implementations in general) in order to use the existing "jwk" confirmation > method. > > *** OK, that is reasonable. Given that the draft says SHOULD rather than MUST > for using this confirmation key method, I think it is currently allowed to > use either representation. > > > > > 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 > > (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3). > > 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’ > > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1.1) 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. > > Choosing names and terminology is difficult and the "right" wording is often > subjective. I believe that the current wording sufficiently conveys what is > going on in the draft to most readers. Most readers thus far seem to agree. > There is some text now that does say that the mutual auth in the draft is in > fact X.509 client cert authn but, in the next revision, I'll look for other > opportunities where it could be stated more clearly. > > *** Thanks. > > > > > 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. > > The reference to BCP 195 (which unfortunately the original OAuth 2.0 RFC > doesn't have because it didn't exist then) is meant to account for changing > versions and recommendations around TLS. Currently that BCP says TLS 1.2 is a > must and suggests against 1.1 & 1.0 but doesn't outright prohibit them. > > *** OK, that seems good to me. > > > > > 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? > > That might well be useful but I don't myself know what it would say. I've > (maybe naively) figured those are deployment details that will just work out. > Perhaps you could propose some text around such a discussion that the WG > could consider? > > *** > To be honest, when I raised this it was because I didn’t really know what the > implications were. I’ve done some reading around and I think it should all > just work - both session resumption and PSK-based resumption preserve the > original client and server authentication context so we can assume that any > presented client cert is still valid for the resumed session. So I think we > can leave out any discussion of this and assume it works as expected. > > > > > > 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 > > (https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-6.2). > > 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). > > I will say again that choosing names and terminology is difficult... > > Although I must admit that I started using "sender constrained" somewhat > indiscriminately at first and it's just sort of stuck. At the time I was > trying to incorporate bits of draft-sakimura-oauth-jpop in a way that might > help bring on and keep the authors of that draft onboard with this mtls > draft. In retrospect it looks like I did that part wrong anyway. But that was > the thinking at the time and the history, for whatever it's worth. More > recently, Nat was requesting that "sender constrained" be included in the > title. So there's that too. > > In defense of my mistake, however, if there's a line between "sender > constrained" and "key confirmation" tokens, it's a bit of a fuzzy line. And > I'd argue that what this draft is doing pretty close to the line.. > > But ultimately I think you are right that what this mtls draft is doing with > access tokens is more accurately described with the key confirmation term. > > So, yes, the draft should probably drop (or at least minimize) the language > about sender constrained. I'll do that in the next draft version, barring big > objections from the WG. > > The tricky thing with making that change is that there a client and server > metadata parameters with the name > "mutual_tls_sender_constrained_access_tokens" that should probably also > change. But that would be a breaking change (of sorts anyway), which > shouldn't be taken lightly at this stage. I feel that some explicit okays > from the WG are needed before doing so (rough consensus stye) . Any WG > members want to weigh in here and help get a "sense of the group" concerning > changing those metadata names? > > *** Thanks. I agree this might cause compatibility issues. It is not a big > issue for us, but might cause some confusion. > > > > > 6. The OAuth 2.0 PoP Architecture draft says > > (https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-5): > > > > 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 > > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#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., https://www.vaultproject.io/docs/secrets/pki/index.html) 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 > > https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-03#section-5.1 > > - in which case an appropriate “alg” value should probably be described). > > This should probably at least be an option. > > This draft doesn't necessarily seek to align with the (long expired) PoP > architecture draft. Rather it is aiming to provide a pragmatic solution for > PoP style access tokens and OAuth client auth using mTLS client certificates. > > That said, with the current draft, it's certainly possible for a client to > update its cert more frequently, even so far as using a new one for each > access token. The details of how that would work will vary some based on the > token endpoint authentication method. But it's not precluded. > > *** You are right, the text doesn’t preclude that. I am happy with that > solution. I suspect most people will deploy and be happy with reusing a > long-lived cert for every access token, so this may not matter in practice. > > > > 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. > > Practically speaking the access tokens being presented likely already have > correlatable info in them about the client as well as the user. I don't know > that there's much of a (new) concern in reality. If you feel this concern is > unique and import enough though, perhaps there's some text you'd like to > propose for a Privacy Considerations section that the WG could consider? I > mean, I guess it doesn't hurt to mention it but I would like to avoid > overstating the issue. > > *** On reflection, I am going to withdraw this comment. As you say there are > other ways to correlate clients. The privacy issue would mainly arise in the > context of dynamic client registration e.g., a pattern I’ve seen described > where every instance of a mobile app does dynamic client registration to > avoid including credentials directly in the app bundle. This would make > clients one-to-one with users. But (a) those apps are fairly unlikely to be > using TLS certs, and (b) that is more of a privacy consideration for dynamic > client registration rather than this draft. > > > > > 8. This is maybe a more general point, but RFC 6750 defines the > > Authorization: Bearer scheme > > (https://tools.ietf.org/html/rfc6750#section-2) 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? > > The thinking and general consensus (in this draft as well as the OAuth token > binding work) has been that continuing to use the RFC 6750 scheme while > putting the "not strictly bearer" stuff in (or referenced by) the token > itself will be easier on deployment and implementation. And better for > adoption as a result. I believe some early implementation work has borne that > out too. > > *** OK. > > > > > 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. > > Suggesting to use an existing TLS library is certainly sound advice and I > sort of felt is implied in the draft. But saying so more strongly/explicitly > might be worthwhile. And pointing to historical reasons to do so would > probably be good too. Could you propose a new Security Considerations section > or maybe augmentation of §5.2 with that content? > > *** I’ll try and come up with some text. > > > > > 10. The PKI client authentication method > > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1) 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. > > I didn't think that a TLS client could do OCSP stapling? > > *** I think you are right about this. I always assumed it was symmetric (and > I think it technically could work), but the spec only talks about stapling in > the server-side of the handshake. > > That aside, revocation checking (how and even if) is something that's at the > discretion of the AS. I can add something in §2.1 to say that more explicitly. > > *** Thanks. > > > > > > 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 (https://en..wikipedia.org/wiki/OCSP_stapling) how can the RS > > verify the signature on that if it does not have a separate trust > > relationship with the CA already? > > The draft effectively uses cert mtls at the RS as a proof-of-possession > method only and not as authentication. So revocation checking isn't really > applicable. In specific deployment situations, I suppose an RS could check > revocation. But that'd be a deployment decision for the RS that's beyond the > scope of this draft. > > *** OK, that is an interesting observation. If either the client or AS > suspect the key has been compromised they can revoke the access token(s) > instead. > > > > > > 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. > > The idea behind haveing just one thumbprint hash algorithm was to keep things > simple. And SHA-256 seems good enough for the reasonably foreseeable future > (and space aware). Also a new little spec to register a different hash > algorithm, should the need arise, didn't seem particularity onerous. > > That was the thinking anyway. Maybe it is too short sighted though? > > I do think SHA-256 should stay regardless. > > But the draft could also define SHA-512 (and maybe others). What do you and > WG folks think about that? > > *** Yes please. > > It would probably then be useful for the metadata in §3.3 and §3.4 to change > from just boolean values to something to convey what hash alg/cnf method the > client expects and the list of what the server supports.. That's maybe > something that should be done anyway. That'd be a breaking change to the > metadata. But there's already another potential breaking change identified > earlier in this message. So maybe it's worth doing... > > How do folks feel about making this kind of change? > > > > > > Cheers, > > > > Neil > > > > > > > On 19 Mar 2018, at 22:34, Rifaat Shekh-Yusef <rifaat.i...@gmail.com > > > (mailto:rifaat.i...@gmail.com)> wrote: > > > > > > All, > > > > > > As discussed during the meeting today, we are starting a WGLC on the MTLS > > > document: > > > https://tools.ietf.org/html/draft-ietf-oauth-mtls-07 > > > > > > 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 > > > OAuth@ietf.org (mailto:OAuth@ietf.org) > > > https://www.ietf.org/mailman/listinfo/oauth > > > > > > _______________________________________________ > > OAuth mailing list > > OAuth@ietf.org (mailto:OAuth@ietf.org) > > https://www.ietf.org/mailman/listinfo/oauth > > > > > CONFIDENTIALITY NOTICE: This email may contain confidential and privileged > material for the sole use of the intended recipient(s). Any review, use, > distribution or disclosure by others is strictly prohibited. If you have > received this communication in error, please notify the sender immediately by > e-mail and delete the message and any file attachments from your computer. > Thank you.
signature.asc
Description: PGP signature
_______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth