Re: [nfsv4] questions w.r.t RPC-over-TLS draft

Chuck Lever <chuck.lever@oracle.com> Tue, 21 January 2020 15:55 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 A0D9B120818 for <nfsv4@ietfa.amsl.com>; Tue, 21 Jan 2020 07:55:51 -0800 (PST)
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 SOxKD9QOI6RI for <nfsv4@ietfa.amsl.com>; Tue, 21 Jan 2020 07:55:45 -0800 (PST)
Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) (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 7C9CB120170 for <nfsv4@ietf.org>; Tue, 21 Jan 2020 07:55:45 -0800 (PST)
Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id 00LFrxr3065892; Tue, 21 Jan 2020 15:55:44 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-2019-08-05; bh=SECO75KEqQFSeQJ/zSlPlflAGIxr/qg1AX+LQp2uvjU=; b=fa+MCiIbLoNBe7H989n3TXamLXRiA3RI1i8Dr0QD0Dvn1Bldj/19KOI1DYmOUgSLFojU aPnf5UWir2qJ5mzKCpBzpTDiqqWHEhJnDKI2wyqlL3ytsYCEK1OpOcXueSqSe0HUYW07 JRDh79y6D51FPf9DOD0D/IAV19Sjr8v07rzHFSNgYE53gHTUvYPk7Pcy4FNVYZfPQBrW BR1uLVi5503r2Nh4oWdq+uZOUrGWaRp4xGPYO18JtwX4Wm+rw7HqIuzXaWHdOjxMk6jn eE5YBVR8+7PBGLKa/SiAbDsGOi155k07x0u5XGaxfceM6F2mb2YZh6eYWTyIQsexbKXr uA==
Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 2xkseue1n7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 21 Jan 2020 15:55:44 +0000
Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.27/8.16.0.27) with SMTP id 00LFsvm9020769; Tue, 21 Jan 2020 15:55:44 GMT
Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userp3030.oracle.com with ESMTP id 2xnsa8vv7y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 21 Jan 2020 15:55:44 +0000
Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 00LFtfMR031638; Tue, 21 Jan 2020 15:55:42 GMT
Received: from anon-dhcp-152.1015granger.net (/68.61.232.219) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 21 Jan 2020 07:55:41 -0800
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\))
From: Chuck Lever <chuck.lever@oracle.com>
In-Reply-To: <YQBPR0101MB1427364BAFED4564FD0FD67BDD320@YQBPR0101MB1427.CANPRD01.PROD.OUTLOOK.COM>
Date: Tue, 21 Jan 2020 10:55:40 -0500
Cc: "nfsv4@ietf.org" <nfsv4@ietf.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <0FF8087F-E4C6-4ABB-8F92-6224724939FC@oracle.com>
References: <YQBPR0101MB142761C64D6A842CB99EADC0DD320@YQBPR0101MB1427.CANPRD01.PROD.OUTLOOK.COM> <0E8060A0-B8DA-462E-915E-9121824A7A3D@oracle.com> <YQBPR0101MB1427364BAFED4564FD0FD67BDD320@YQBPR0101MB1427.CANPRD01.PROD.OUTLOOK.COM>
To: Rick Macklem <rmacklem@uoguelph.ca>
X-Mailer: Apple Mail (2.3445.104.11)
X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9506 signatures=668685
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1911140001 definitions=main-2001210127
X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9506 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-1911140001 definitions=main-2001210127
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/7l8pXmh2E-W9M0zxnL7C4QnXuUs>
Subject: Re: [nfsv4] questions w.r.t RPC-over-TLS draft
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: Tue, 21 Jan 2020 15:55:52 -0000


> On Jan 20, 2020, at 6:08 PM, Rick Macklem <rmacklem@uoguelph.ca> wrote:
> 
> Chuck Lever wrote:
>> May I add the FreeBSD implementation of RPC/TLS to Section 6? Did I
>> already ask you this and simply forgot to add it?
> Definitely a "work in progress" at this time, so you can decide if it should be
> mentioned. (I am making pretty good progress, but the FreeBSD kernel TLS
> only works for send at this time, unless you have hardware that does TOE.
> It may be a few months before the kernel TLS can do receive, so that it
> actually works.)
> 
>>> On Jan 19, 2020, at 7:30 PM, Rick Macklem <rmacklem@uoguelph.ca> wrote:
>>> 
>>> Hi,
>>> 
>>> I've started implementing RPC-over-TLS for NFS and have run into a couple
>>> of questions related to the draft (#4, I haven't downloaded #5).
>>> 
>>> 1 - Given this description...
>>>  The flavor value of the verifier received in the reply message from
>>>  the server MUST be AUTH_NONE.  The bytes of the verifier's string
>>>  encode the fixed ASCII characters "STARTTLS".
>>> 
>>> Is the verifier coded as:
>>> A:   verifier length: 8
>>>     bytes STARTTLS
>>> OR
>>> B:   verifier length: 12
>>>     string length: 8
>>>     bytes STARTTLS
>>> 
>>> ie. Is there supposed to be a string length as coded by xdr_string() in the
>>> verifier? (It is the words "verifier string" the above that I find confusing.)
>> 
>> I agree, "string" is confusing. It should rather say "fixed-length
>> opaque".
> This might still hint at an extra length field.

A "fixed-length opaque" is explicitly defined in Section 3.9 of RFC 1832.
No length field.


> How about something like "The body of the verifier consists of the 8 ASCII bytes STARTTLS"?
> (Btw, this is how I had coded it and then, when I read "verifier string" I wasn't sure.)

OK, here's what I've changed it to:

>    The flavor value of the verifier received in the reply message from
>    the server MUST be AUTH_NONE.  The length of the verifier's body
>    field is eight.  The bytes of the verifier's body field encode the
>    ASCII characters "STARTTLS" as a fixed-length opaque.


Thoughts?


>> Section 7.2 of RFC 1831 has this:
>> 
>> enum auth_flavor {
>>     AUTH_NONE = 0,
>>     AUTH_SYS = 1,
>>    AUTH_SHORT = 2
>>     /* and more to be defined */
>> 
>> };
>> 
>> struct opaque_auth {
>>     auth_flavor flavor;
>>     opaque body<400>;
>> 
>> };
>> 
>> The flavor field contains AUTH_NONE (0), the opaque's length field
>> contains 8, and the opaque's data contains the ASCII characters
>> "STARTTLS".
>> 
>> 
>>> Then there is this sentence...
>>>  AUTH_ERROR.  If the client sends a STARTTLS after it has sent other
>>>  non-encrypted RPC traffic or after a TLS session has already been
>>>  negotiated, the server MUST silently discard it.
>>> 
>>> Does "other non-encrypted RPC traffic" refer specifically to traffic between
>>> the NULL RPC with AUTH_TLS and the STARTTLS or does it refer to non-NULL RPC traffic >or??
>> 
>> The client can't start a TLS session on a connection after it
>> has sent non-NULL RPC traffic.
> Cool. Maybe it needs to say that the NULL RPC with authentication flavor of AUTH_TLS
> constitutes a STARTTLS operation.

It's meant only to indicate that the sender supports RPC-over-TLS.
Is that really the same as a STARTTLS operation?

The replacement text reads:

>    If an RPC client attempts to use AUTH_TLS for anything other than the
>    NULL RPC procedure, the RPC server MUST respond with a reject_stat of
>    AUTH_ERROR.  If the client initiates a TLS session after it has sent
>    unencrypted non-NULL RPC traffic the server MUST silently discard it.



> That still doesn't really clarify if a NULL RPC with authentication flavor of AUTH_NULL
> is also allowed before the NULL RPC with authentication flavor of AUTH_TLS.

It seems to me the new text clearly allows an unencrypted NULL RPC at any
time. I'm not sure that's even feasible, but it's an implementer's choice.


> (FreeBSD currently uses NULL RPCs with AUTH_NULL as a "ping" to figure out if
> the server is up, however it uses a separate TCP connection to do this, so it shouldn't
> matter if it allowed on the same connection.)

The NULL with AUTH_TLS should be able to act as both announcing support
for RPC-over-TLS and a ping for a particular RPC Program.


>>> I am also confused about what "sends a STARTTLS" actually means?
>>> (I'll admit I know nothing about TLS and can only find STARTTLS mentioned w.r.t.
>>> an SMTP email command.)
>>> 
>>> Does this mean that the 8 bytes STARTTLS goes on the wire immediately after
>>> a NULL RPC with AUTH_TLS or does it mean the 8 bytes STARTTLS goes in a
>>> TCP RPC message (an 8byte message as indicated by the RPC over TCP record
>>> mark, which would normally be too small) or does "sends a STARTTLS" just saying
>>> that the TLS handshake should come immediately after the NULL RPC with AUTH_TLS?
>> 
>> 
>> "sends a STARTTLS" means "initiates a TLS session."
> That clarifies it. It might be even clearer if it said "initiates a TLS handshake"?
> Alternately, defining the NULL RPC with authentication flavor AUTH_TLS as a STARTTLS
> command would do so as well.
> 
> One slight problem here is that the above would seem to be TCP specific, since it assumes
> ordering, but is not in the TCP section. I know nothing about the UDP case and have no intention of implementing it, but it does seem that is TCP specific? (Would the UDP variant be non-NULL RPC traffic from the same client
> IP address or do you just not worry about this for UDP?)

Agreed, that language should probably be moved to Section 5.1.1.

--
Chuck Lever