Re: [Emu] EAP/EMU recommendations for client cert validation logic

Alan DeKok <aland@deployingradius.com> Tue, 17 December 2019 19:07 UTC

Return-Path: <aland@deployingradius.com>
X-Original-To: emu@ietfa.amsl.com
Delivered-To: emu@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DCC361208CC; Tue, 17 Dec 2019 11:07:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 Wl-5gXamTRKr; Tue, 17 Dec 2019 11:07:30 -0800 (PST)
Received: from mail.networkradius.com (mail.networkradius.com [62.210.147.122]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 6D75D1208C9; Tue, 17 Dec 2019 11:07:22 -0800 (PST)
Received: from [192.168.20.177] (206-248-138-162.dsl.teksavvy.com [206.248.138.162]) by mail.networkradius.com (Postfix) with ESMTPSA id E450A64E; Tue, 17 Dec 2019 19:07:16 +0000 (UTC)
Authentication-Results: NetworkRADIUS; dmarc=none header.from=deployingradius.com
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3601.0.10\))
From: Alan DeKok <aland@deployingradius.com>
In-Reply-To: <6719.1576608669@localhost>
Date: Tue, 17 Dec 2019 14:07:15 -0500
Cc: "spasm@ietf.org" <spasm@ietf.org>, EMU WG <emu@ietf.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <83F3F036-4D6A-4899-AC02-FAEE7685D8C9@deployingradius.com>
References: <MN2PR11MB3901F9B86DAC83AF67FBA49DDB560@MN2PR11MB3901.namprd11.prod.outlook.com> <6719.1576608669@localhost>
To: Michael Richardson <mcr+ietf@sandelman.ca>
X-Mailer: Apple Mail (2.3601.0.10)
Archived-At: <https://mailarchive.ietf.org/arch/msg/emu/skFLLb5WThFgZLbKHnFlEvfRbZE>
Subject: Re: [Emu] EAP/EMU recommendations for client cert validation logic
X-BeenThere: emu@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "EAP Methods Update \(EMU\)" <emu.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/emu>, <mailto:emu-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/emu/>
List-Post: <mailto:emu@ietf.org>
List-Help: <mailto:emu-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/emu>, <mailto:emu-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 17 Dec 2019 19:07:33 -0000

On Dec 17, 2019, at 1:51 PM, Michael Richardson <mcr+ietf@sandelman.ca> wrote:
> } If at some point in the future, there is one or more well-known trust
> } anchors that (IoT?) devices can build in, and these CAs are willing to issue
> } certs with some or all of the above fields, can we design a transition
> } process from one-touch provisioned private CAs to a common DN+extension
> } based common anchor?

  I hope so.

  My $0.02 is that configuration belongs in a machine-readable format, not in fields in a GUI.  i.e. fields in a cert.

  Once we have a machine-readable format, transition plans become simpler, because we have a better handle on what systems are doing.

>> The ideal experience would be along these lines for a client with real user
>> interactions:
> 
>    1> - client connects to an EAP server
>    2> - client prompts user for userId + realm and password
>    3> - client verifies server cert has id-kp-eapOverLAN set
>    4> - NAIRealm in cert matches user’s realm
>    5> - verify the cert signing chain
> 
> <2> and <3> seem in the wrong order.
> If the certificate has NAIRealm, why would we need to ask the user for the
> realm?  Wouldn't we instead ask them: "What is your userID in REALM FOO"

  The server certificate is presented before the user credentials are sent (PEAP / TTLS).  So the client can automatically derive the NAIRealm.

  The issue is that users are slow.  It's bad to have the EAP session hang while the user enters "name / password" in a GUI.  That's the only real reason why name / password is requested before the EAP session starts.

>> The reality today is that if the server cert is issued by a public CA, then
>> all that client can really check is:
> 
>    1> - id-kp-serverAuth is set
>    2> - dNSName in cert matches user’s realm
>    3> - verify the cert signing chain
> 
> I think that <3> happens first, and the connection is dropped if it does not
> validate.  Maybe you aren't expressing an order here at all.

  The only reason to order these checks is cost.  i.e. simple checks should run first, before complex checks.

>> It seems like logic should be something like:
> 
>> - recommend EAP operators with private CA issued certs on their EAP servers
>> set id-kp-eapOverLAN and NAIRealm set
>> - recommend EAP operators using public CAs get EAP server certs with
>> id-kp-serverAuth and dNSName set
>> - recommend clients enable trust in public CAs
>> - recommend clients implement different cert verification logic depending on
>> whether the EAP server cert is issued by a public CA or private CA
> 
> Would setting dNSNAME on private CA issued certs reduce complexity?

  No.  The DNS names at at least the realm names (example.com), but they could be more (radius.example.com).

  There's no good way to automatically derive the NAIrealm from a DNS name.  Given both, you can check if they're compatible.  But that's it.

>> - as a longer term goal see if public CAs will issue id-kp-eapOverLAN and
>> NAIRealm. Although of course if some were to start doing this, then there is
>> a migration challenge, and clients cannot make a hard check for these values
>> against all public CAs. This doesn’t really seem practical in the near term
>> at all.
> 
> Trust NAIRealm extension only if id-kp-eapOverLAN is set.
> having implemented the dNSNAME code path, it seems like there is no point in
> implementing the other path.

  The NAIRealm tells you exactly which Realm you're using.  The DNSName path doesn't.

  The NAIRealm can be used to skip the step where the user is prompted for the realm.

  Alan DeKok.