Re: [nfsv4] New Version Notification for draft-cel-nfsv4-rpc-tls-01.txt

Chuck Lever <chuck.lever@oracle.com> Mon, 01 April 2019 22:58 UTC

Return-Path: <chuck.lever@oracle.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9FDC91201B1 for <nfsv4@ietfa.amsl.com>; Mon, 1 Apr 2019 15:58:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.3
X-Spam-Level:
X-Spam-Status: No, score=-4.3 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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=oracle.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 nv0M2MQHBR2O for <nfsv4@ietfa.amsl.com>; Mon, 1 Apr 2019 15:58:42 -0700 (PDT)
Received: from aserp2130.oracle.com (aserp2130.oracle.com [141.146.126.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 976A5120193 for <nfsv4@ietf.org>; Mon, 1 Apr 2019 15:58:42 -0700 (PDT)
Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x31MsosS026502; Mon, 1 Apr 2019 22:58:41 GMT
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=content-type : mime-version : subject : from : in-reply-to : date : cc : content-transfer-encoding : message-id : references : to; s=corp-2018-07-02; bh=I/HMy1VxH9HspLtUUfkH3OoZ6wn8zj4+ouW8eJtGLuY=; b=PQ1VNDbCVIiK1Dmp3s58agZpuX1g7MGW+mJMQiITsPwOMn5llylXh5cheZ1s7dmHmqh4 7pSBKyST31Ou7nDc+qUHFibQEN912C66kq/2qAVho7oo2UO7h6y+fgzz5LvuHmmzeq+Z l1bPggZY8XcxtCPwDWWQREUSwBj5xceE1f3gUW1rfpFroo+g65WlbeBrEu+IXhkxE7Co Ilwo/wWai+TG4AKdAvvNaJqjOX12mrodZ+5UoPYy95ImKQws102toPkf2KV50LUbS9Oa lVZ4yzXRR8II8oIZVnVvynpf5j6ku4FwobuuHQ7LamRhzO1ffINbzsVP973+gwRpWE0B EA==
Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp2130.oracle.com with ESMTP id 2rhwyd21uf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 01 Apr 2019 22:58:40 +0000
Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id x31MweDw014875 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Apr 2019 22:58:40 GMT
Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x31Mwdv9004822; Mon, 1 Apr 2019 22:58:39 GMT
Received: from anon-dhcp-171.1015granger.net (/68.61.232.219) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 01 Apr 2019 15:58:39 -0700
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 12.2 \(3445.102.3\))
From: Chuck Lever <chuck.lever@oracle.com>
In-Reply-To: <CAN-5tyEReyhjJn60QtqS4amMtz8B1W6Z7qpoXKWZLDeK2k0CYQ@mail.gmail.com>
Date: Mon, 01 Apr 2019 18:58:38 -0400
Cc: NFSv4 <nfsv4@ietf.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <BA8346C3-F491-42B6-8059-6DDAE52C58BA@oracle.com>
References: <154264272736.5235.8955444239583271708.idtracker@ietfa.amsl.com> <CO2PR0601MB7597A7490C43DAE5A3268E6B5D80@CO2PR0601MB759.namprd06.prod.outlook.com> <39802AA5-3F70-48C7-824B-CAC0FB871016@oracle.com> <CADaq8jc82bfxpjxz_f6Uy-4c0yazJujOrKo+TejPkx-q6qq_3Q@mail.gmail.com> <1480794517.422703.1553504031783.JavaMail.zimbra@desy.de> <4F7BC6A0-50F9-47BC-8465-28833835E7F6@oracle.com> <1119874674.601037.1553546666143.JavaMail.zimbra@desy.de> <946EFDD8-F04D-49CD-A1C8-D8E8A6D5EE35@oracle.com> <2020506870.740381.1553612716598.JavaMail.zimbra@desy.de> <CAN-5tyGggDUe2DNSjRc6vAyXgGo4LVwYVK5zmTOyr0soPFVKrQ@mail.gmail.com> <3705AA25-10DF-43BF-BE1D-B0BE27F705DE@eggert.org> <0E00BED9-74D4-4594-A7AC-FCD624461DD7@eggert.org> <880CC259-A82A-401F-A81D-5FCD6A9758B3@oracle.com> <SN4PR2101MB0736EF7A385F5D95107D4118A05F0@SN4PR2101MB0736.namprd21.prod.outlook.com> <3A634328-B190-473B-A6D7-C5878CC2654B@oracle.com> <SN4PR2101MB073663820F28F2AAA8766E38A05A0@SN4PR2101MB0736.namprd21.prod.outlook.com> <D43B092E-03D1-470F-AF57-1E9416E8518E@oracle.com> <CAN-5tyFU_9v=OQcvEfkC-YLJZTEenRyNa67YPJBBnNG8g0EsTQ@mail.gmail.com> <1362131D-77D7-4BF0-AD50-9B775508F439@oracle.com> <CAN-5tyEReyhjJn60QtqS4amMtz8B1W6Z7qpoXKWZLDeK2k0CYQ@mail.gmail.com>
To: Olga Kornievskaia <aglo@umich.edu>
X-Mailer: Apple Mail (2.3445.102.3)
X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9214 signatures=668685
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1904010147
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/ee5wbeD59gxKIUuow5TXszRPpB4>
Subject: Re: [nfsv4] New Version Notification for draft-cel-nfsv4-rpc-tls-01.txt
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 01 Apr 2019 22:58:47 -0000


> On Apr 1, 2019, at 4:31 PM, Olga Kornievskaia <aglo@umich.edu> wrote:
> 
> On Mon, Apr 1, 2019 at 1:50 PM Chuck Lever <chuck.lever@oracle.com> wrote:
>> 
>> Olga, thanks for your comments.
>> 
>> 
>>> On Apr 1, 2019, at 12:06 PM, Olga Kornievskaia <aglo@umich.edu> wrote:
>>> 
>>> Comments about the draft-1 and section 4.3 Authentication.
>>> 
>>> 1. Why is there no option of no client authentication and simply using
>>> server-side authentication and using AUTH_SYS on top of it (and
>>> perhaps this is addressed by the 2nd editorial comment in the [] but
>>> the lack including this as an option bothered me). I think this is the
>>> most useful option to be considered.
>> 
>> I quite agree that it is the most useful. I don't see where we are
>> specifically excluding that option, however.
> 
> Ok I guess I have issues with wording. That section talks about "host
> and user authentication". What is "host" here? Is this the NFS server
> or is this a client machine where a "user" might execute NFS
> operations? I really hope that "host" means an NFS server and it's the
> NFS server that will be authenticated via TLS (which means a
> server-side certificate will be used).

I thought that "host authentication" had an unambiguous meaning.
It means that the peer host is authenticated.

RPCSEC GSS performs host authentication using the service principals
on both peers.

With TLS, AIUI, the client can always authenticate the server, because
the server is required to have an identity (typically a certificate).
The server can authenticate a connecting client if the client has an
identity and presents it during the TLS handshake.

I can add "host authentication" and "user authentication" in the
Terminology section if people feel that would be helpful. Or should
I use "machine authentication" instead of "host authentication" ?


> That leads to Option 1 wording.
> It's not clear which side would used a self-signed certificate and why
> we right away restricting/suggestion the type of the certificate. I
> think it would be better to say: "To establish a secure TLS connection
> at least a server-side PKI certificate is required and can provides
> server authentication. Statement: "end-to-end encryption is provided
> client certificate material" ... I don't think that's what end-to-end
> encryption typically means. I would rather say. "Mutual authentication
> is provided when client also presents a PKI certification during a TLS
> handshake." (or something of that sorts).
> 
> My wording of the options:
> TLS server-side authentication only with AUTH_SYS identity: To
> establish a secure TLS connection a server-side PKI certificate is
> required and provides server authentication (either self-signed or
> CA-certified certificates can be used). After TLS connection is
> established, the RPC client uses AUTH_SYS to identify users with the
> guarantee that the UID and GID values cannot be observed or altered in
> transit.
> 
> TLS mutual authentication with AUTH_SYS:  During TLS negotiation, the
> client identifies itself to the server with a PKI certificate.  As
> with encryption-only with AUTH_SYS, UID and GID values are well
> protected.  In addition, the server can use the client's PKI identity
> to perform additional authorization of this client's requests.
> 
> TLS server-side authentication only with RPCSEC GSS Kerberos identify:
> To establish a secure TLS connection a server-side PKI certificate is
> required and provides server authentication (either self-signed or
> CA-certified certificates can be used). The RPC client uses Kerberos
> to identify the client host and its users, but does not request GSS
> integrity or privacy services as the connection is already secured.
> 
> TLS mutual authentication with AUTH_NONE:  Each user establishes her
> own TLS context with the server, identified by a user PKI certficate.
> There is no need for any additional information at the RPC layer, so
> the RPC client can use the simplest authentication flavor for RPC
> transactions.  This configuration is not typical for NFS deployments,
> but it does enable strong certificate-based user authentication, which
> is currently not afforded by GSS.

This appears to be based on an outdated version of this document.
The latest version is here:

https://datatracker.ietf.org/doc/draft-ietf-nfsv4-rpc-tls/

I hope Section 4.2 of the latest revision answers your questions.


> If by "host" you don't mean the "server" and mean client's machine.
> And for the server we are not implying that it's OK to use self-signed
> certificates (which I really hoped we were not suggestion).
> 
> Then the options I propose should be:
> 1. TLS server-side authentication + AUTH_SYS user identity: this is
> the favorable option of no certificates on the client at all and only
> server is authenticated.
> 
> 2. TLS mutual authentication with machine certificates + AUTH_SYS user
> identity . This is where I think a suggestion to use a self-signed
> certificate can be made (however see my view below that I don't this
> client-side authentication gains us anything).
> 
> 3. TLS mutual authentication with user certificates + AUTH_SYS user identify
> 
> 4. TLS mutual authentication with machine certificate + Kerberos user identify
> 
> 5. TLS mutual authentication with user certificates + Kerberos user identify
> 
> 6. TLS mutual authentication with user certificates + AUTH_NONE
> 
> 
> 
>>> I don't see how adding
>>> self-signed client certificates adds to the security of the system but
>>> instead this adds a costly PKI operation that would impact the time it
>>> takes to establish a secure connection.
>> 
>> Self-signed certificates allow a form of weak authentication by the
>> server. At least it can audit which client is connecting. The
>> discussion of self-signed certs can be removed if it's not something
>> we want to explicitly commend.
> 
> In my personal option, adding self-signed (user) authentication
> provides no benefits as there no attack that it protects from. We are
> not proposing to use the identity gotten from the client-side of the
> TLS connection and map it to an nfs4 identity, are we (cue in the SPKM
> troubles here).

IIRC we eventually decided not to support the use of user certs
for RPC on TLS.


>> It can be made a little more robust by using DANE, maybe.
>> 
>> 
>>> 2. If there is an addition of certificated-based authentication (and
>>> specifically for option #4 of PKI-based crews + AUTH_NONE) shouldn't
>>> there be wording on what it means to do PKI-based authentication (the
>>> whole fun of interpreting X.509-based certification etc).
>> 
>> Feel free to propose text, or point us to an example discussion.
> 
> Haha, sorry I probably shouldn't have said anything as I have nothing
> of use to add. Andy and I wrote the SPKM spec and dealing with X509
> identities is what killed it. Thus I don't know how to fix it. But I
> strongly feel that using generic words for allowing PKI-based
> authentication and not specifying the details might lead to
> implementation problems.
> 
>>> 3. This is about the wording of option #3 and specifically ".. doesn't
>>> need to enable costly GSS integrity or privacy services". This to me
>>> reads that GSS integrity/privacy services is more costly that doing
>>> the same with TLS which I don't believe is a true statement.
>> 
>> It is a true statement in the sense that TLS may be offloaded from the
>> host. Otherwise, I agree: if encryption is done by the host CPU, there
>> is going to be little or no difference in computational cost.
> 
> Hm, I'm curious where you would offload TLS (and specifically what)
> and why can't we state that encryption operations can be offloaded for
> the current implementation.

https://en.wikipedia.org/wiki/TLS_acceleration


>>> Shouldn't
>>> it be something like "it can forego using GSS integrity/privacy
>>> services because the transport layer already provides an encrypted
>>> connection" or something of the sorts that say we don't need to do
>>> integrity/privacy twice?
>> 
>> Sure, that's fair. I'll revise that text.
>> 
>> 
>>> 4. This is somewhat implementation specific question. If the draft is
>>> introducing an AUTH_TLS RPC security mechanism, I assume in linux we'd
>>> translate it to "sec=tls" option to be like other RPC AUTH mechanisms.
>>> But "sec=tls" doesn't quite work, it better fits with the "proto=tls"
>>> option group because "tls" by itself isn't enough. It'll always be
>>> combined with a traditional "sec=sys" or "sec=krb5". Then we are
>>> really introducing an option like "sec=tls+sys" or "sec=tls+krb5".
>> 
>> This is an implementation issue rather than a protocol issue, of
>> course, but I don't feel that sec= makes sense at this point. We
>> are not changing the way RPC users are authenticated, which is what
>> sec= controls.
> 
> You say you are not changing the way RPC users are authentication but
> isn't the option of TLS authentication + AUTH_NONE indeed changes how
> the RPC user is authenticated?
> 
>> 
>> 
>>> Then shouldn't we be introducing something like AUTH_TLS_SYS and
>>> AUTH_TLS_GSS?
>> 
>> No. The purpose of AUTH_TLS is simply to discover server support for
>> TLS. It is explicitly forbidden to be used after the TLS handshake.
> 
> So by adding AUTH_TLS you are overloading what the "enum auth_flavor"
> list provides. It lists authentication flavors so I feel it's a bit
> sinister to use it for negotiation and not authentication.

Can you elaborate on that?


>>> Or if we are really talking about "proto=tls" (or
>>> proto=dtls) do we even need AUTH_TLS and couldn't it be port-based
>>> decision to support it or not (but yes I read the RFC 2595 that
>>> discourages the use of "secure" ports as they could lead to user and
>>> administrator misconceptions). To reiterate, I feel that if AUTH_TLS
>>> is added but "sec=tls isn't used it would be confusing to users.
>> 
>> See earlier parts of this thread. I think we are purposely trying to
>> avoid introducing new ports and portmapper dependencies. A netid-
>> based solution is probably a non-starter.
>> 
>> I expect we will add a family of TLS mount and export options to
>> control transport-level security, separate from transport protocol
>> and user authentication mode.
>> 
>> 
>>> On Fri, Mar 29, 2019 at 10:18 AM Chuck Lever <chuck.lever@oracle.com> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On Mar 28, 2019, at 8:35 PM, Tom Talpey <ttalpey@microsoft.com> wrote:
>>>>> 
>>>>>> -----Original Message-----
>>>>>> From: Chuck Lever <chuck.lever@oracle.com>
>>>>>> Sent: Thursday, March 28, 2019 3:43 PM
>>>>>> To: Tom Talpey <ttalpey@microsoft.com>
>>>>>> Cc: Lars Eggert <lars@eggert.org>; NFSv4 <nfsv4@ietf.org>
>>>>>> Subject: Re: [nfsv4] New Version Notification for draft-cel-nfsv4-rpc-tls-01.txt
>>>>>> 
>>>>>> 
>>>>>>> On Mar 26, 2019, at 1:58 PM, Tom Talpey <ttalpey@microsoft.com> wrote:
>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: nfsv4 <nfsv4-bounces@ietf.org> On Behalf Of Chuck Lever
>>>>>>>> Sent: Tuesday, March 26, 2019 1:52 PM
>>>>>>>> To: Lars Eggert <lars@eggert.org>
>>>>>>>> Cc: NFSv4 <nfsv4@ietf.org>
>>>>>>>> Subject: Re: [nfsv4] New Version Notification for draft-cel-nfsv4-rpc-tls-
>>>>>> 01.txt
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Mar 26, 2019, at 12:35 PM, Lars Eggert <lars@eggert.org> wrote:
>>>>>>>>> 
>>>>>>>>> On 2019-3-26, at 17:33, Lars Eggert <lars@eggert.org> wrote:
>>>>>>>>>> Also note that STARTTLS is somewhat less secure than running TLS
>>>>>> directly.
>>>>>>>> See for example Section 6 of RFC3207:
>>>>>>>>>> 
>>>>>>>>>> A man-in-the-middle attack can be launched by deleting the "250
>>>>>>>>>> STARTTLS" response from the server.  This would cause the client not
>>>>>>>>>> to try to start a TLS session.  Another man-in-the-middle attack is
>>>>>>>>>> to allow the server to announce its STARTTLS capability, but to alter
>>>>>>>>>> the client's request to start TLS and the server's response.
>>>>>>>>>> 
>>>>>>>>>> ...
>>>>>>>>> 
>>>>>>>>> And RFC8314 recommends (for mail) that "implicit TLS" should be used
>>>>>>>> instead of STARTTLS.
>>>>>>>> 
>>>>>>>> Perhaps that is what we should require for RPC on TLS;
>>>>>>>> that is, "STARTTLS MUST NOT be used"?
>>>>>>> 
>>>>>>> It's a fine requirement, but there may need to be a justification for the MUST.
>>>>>>> 
>>>>>>> It's important to note that such a requirement means you'll need to allocate
>>>>>>> a new port number for such connections. This would apply to any upper
>>>>>>> layer using the new RPC flavor, which in turn might impact the portmapper.
>>>>>>> Note, it may also have implications on the proposed negotiation. If TLS is
>>>>>>> a "done deal", negotiating the auth flavor may be moot.
>>>>>> 
>>>>>> We could create a new netid for this purpose.
>>>>>> 
>>>>>> Advertise an RPC program with this new netid, and no STARTTLS would
>>>>>> be needed. The client simply connects and begins TLS negotiation.
>>>>> 
>>>>> But, the current draft proposes using a new AUTH_TLS exchange, which
>>>>> if successful allows the client to perform a STARTTLS. If you define a netid
>>>>> and/or port number, the client would simply start in TLS, prior to even
>>>>> sending its first RPC.
>>>>> 
>>>>> Would that not simply make the whole draft unnecessary?
>>>> 
>>>> No. The current revision places a number of restrictions on how TLS
>>>> is used, and that is needed in any case. But, the draft could define
>>>> new netids and reserve a new port number for making portmapper requests
>>>> using TLS.
>>>> 
>>>> Anyway, this is a strawman. I wanted to bring it up to ensure we are
>>>> happy with using STARTTLS.
>>>> 
>>>> 
>>>> --
>>>> Chuck Lever
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> nfsv4 mailing list
>>>> nfsv4@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/nfsv4
>>> 
>>> _______________________________________________
>>> nfsv4 mailing list
>>> nfsv4@ietf.org
>>> https://www.ietf.org/mailman/listinfo/nfsv4
>> 
>> --
>> Chuck Lever

--
Chuck Lever