Re: [certid] [Gen-art] Gen-ART LC Review of draft-saintandre-tls-server-id-check-11

Ben Campbell <ben@nostrum.com> Wed, 08 December 2010 21:29 UTC

Return-Path: <ben@nostrum.com>
X-Original-To: certid@core3.amsl.com
Delivered-To: certid@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 3392D3A698E; Wed, 8 Dec 2010 13:29:28 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -101.819
X-Spam-Level:
X-Spam-Status: No, score=-101.819 tagged_above=-999 required=5 tests=[AWL=-0.419, BAYES_00=-2.599, J_CHICKENPOX_62=0.6, J_CHICKENPOX_72=0.6, SPF_PASS=-0.001, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id e+dUQTR6Z40b; Wed, 8 Dec 2010 13:29:26 -0800 (PST)
Received: from nostrum.com (nostrum-pt.tunnel.tserv2.fmt.ipv6.he.net [IPv6:2001:470:1f03:267::2]) by core3.amsl.com (Postfix) with ESMTP id 0E8E33A6818; Wed, 8 Dec 2010 13:29:25 -0800 (PST)
Received: from dn3-174.estacado.net (vicuna-alt.estacado.net [75.53.54.121]) (authenticated bits=0) by nostrum.com (8.14.3/8.14.3) with ESMTP id oB8LUqEO076048 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Wed, 8 Dec 2010 15:30:52 -0600 (CST) (envelope-from ben@nostrum.com)
Mime-Version: 1.0 (Apple Message framework v1082)
Content-Type: text/plain; charset="us-ascii"
From: Ben Campbell <ben@nostrum.com>
In-Reply-To: <4CFFE028.5070102@stpeter.im>
Date: Wed, 08 Dec 2010 15:30:52 -0600
Content-Transfer-Encoding: quoted-printable
Message-Id: <1880840A-D7F4-4E93-A6F9-DD097260AE52@nostrum.com>
References: <p06240832c922cb7e04d9@[10.20.30.151]> <4CFEB1C5.4010103@stpeter.im> <E7A814CA-E758-460A-A340-6444CA82B267@nostrum.com> <4CFF114B.5010204@stpeter.im> <19F8341D-9815-4BB7-8837-83850FAC4F9E@nostrum.com> <4CFFA82C.80508@stpeter.im> <210039F2-D368-485E-BECA-D3CE6D6B05D1@nostrum.com> <4CFFE028.5070102@stpeter.im>
To: Peter Saint-Andre <stpeter@stpeter.im>
X-Mailer: Apple Mail (2.1082)
Received-SPF: pass (nostrum.com: 75.53.54.121 is authenticated by a trusted mechanism)
Cc: draft-saintandre-tls-server-id-check.all@tools.ietf.org, General Area Review Team <gen-art@ietf.org>, certid@ietf.org
Subject: Re: [certid] [Gen-art] Gen-ART LC Review of draft-saintandre-tls-server-id-check-11
X-BeenThere: certid@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Representation and verification of identity in certificates <certid.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/certid>, <mailto:certid-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/certid>
List-Post: <mailto:certid@ietf.org>
List-Help: <mailto:certid-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/certid>, <mailto:certid-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 08 Dec 2010 21:29:28 -0000

On Dec 8, 2010, at 1:44 PM, Peter Saint-Andre wrote:

> On 12/8/10 11:34 AM, Ben Campbell wrote:

[...]

>> 
>> As you mention, 4.2.1 says "The inputs used by the client to
>> construct its list of reference identifiers might be a URI that a
>> user has typed into an interface..." and "The client might need to
>> extract the source domain and service type from the input(s) it has
>> received."
>> 
>> In the case of SIP (and of HTTP if we pretended it used URI-IDs, that
>> input as typed in by a user is likely to contain stuff that has to be
>> stripped out of the reference identifier. For example, in SIP, this
>> input is very likely to be the AoR of the person you want to call.
> 
> This is what I don't understand.
> 
> Let's say you are sip:ben@nostrum.com and I am sip:stpeter@stpeter.im.
> Why does my client need to resolve nostrum.com in order to communicate
> with you? It seems to me that my client needs to resolve stpeter.im and
> then connect to that as my "home" server on the SIP network. My server
> then does the work of routing signalling traffic from stpeter.im to your
> server at nostrum.com, but my client doesn't communicate directly with
> nostrum.com because I'm not registered there.
> 

It could work either way. It's common for me to have a service that I send outbound requests through, but it's not required by the protocol or the architecture so much as it is an artifact of pesky NATs and SBCs.   But even if you do connect via your own service, some device in the "stpeter.im" service is going to eventually have to connect to the "nostrum.com" service. It does that based on the original user input of "sip:ben@nostrum.com".

> (I freely grant that my understanding might be based on email and XMPP,
> whereas SIP might have a different architecture.)

Even for XMPP and email, something in your service would eventually have to connect to something in my service, based on my JID or email address. 

HTTP might be a better example. If I enter "https://stpeter.im/index.php/2010/11/17/another-xmpp-wg-update/" into my browser, it by default attempts to form a TLS connection directly to speter.im.  (Too bad HTTP doesn't use URI-IDs, since it would make an easier to understand example than SIP.)


> 
>> i.e. a URI identifying a user. I am suggesting a soup to nuts example
>> of how a real world input such as that gets converted to a resulting
>> URI reference identity.
> 
> Yes, examples always help.
> 
>> I don't think this is peculiar to SIP, other than due to the fact
>> that SIP uses URI-IDs. If HTTP were to use URI-IDs, then you would
>> have similar issues of getting from the URI as entered by a user to a
>> source identifier in URI  form.
> 
> In the case of HTTP, my client (browser) is going to pull out the
> "authority" component of the URI:
> 
> http://www.example.com/foobar.html => www.example.com
> 
> But I think we already say that in Section 4.2.1:
> 
>   The client might need to extract the source domain and service type
>   from the input(s) it has received.  The extracted data MUST include
>   only information that can be securely parsed out of the inputs (e.g.,
>   extracting the fully-qualified DNS domain name from the "authority"
>   component of a URI or extracting the service type from the scheme of
>   a URI) or information for which the extraction is performed in a
>   manner that is not subject to subversion by network attackers (e.g.,
>   pulling the data from a delegated domain that is explicitly
>   established via client or system configuration, resolving the data
>   via [DNSSEC], or obtaining the data from a third-party domain mapping
>   service in which a human user has explicitly placed trust and with
>   which the client communicates over a connection that provides both
>   mutual authentication and integrity checking).  These considerations
>   apply only to extraction of the source domain from the inputs;
>   naturally, if the inputs themselves are invalid or corrupt (e.g., a
>   user has clicked a link provided by a malicious entity in a phishing
>   attack), then the client might end up communicating with an
>   unexpected application service.
> 
> See also Section 4.3:
> 
>   o  For a reference identifier of type URI-ID, the DNS domain name
>      portion is the "reg-name" part of the "authority" component and
>      the application type portion is the scheme name matching the
>      [ABNF] "scheme" rule from [URI] (not including the ':' separator).
>      As previously mentioned, this document specifies that a URI-ID
>      always contains an "authority" component whose "host" subcomponent
>      contains a "reg-name".  (Matching only the "reg-name" rule from
>      [URI] limits verification to DNS domain names, thereby
>      differentiating a URI-ID from a uniformResourceIdentifier entry
>      that contains an IP address or a mere host name, or that does not
>      contain an "authority" component at all.).  Furthermore, note that
>      extraction of the "reg-name" might necessitate normalization of
>      the URI (as explained in [URI].  As an example, a URI-ID of "sip:
>      voice.example.edu" would be split into a DNS domain name portion
>      of "voice.example.edu" and an application type of "sip" (mapping
>      to an application protocol of SIP as explained in [SIP-CERTS]).

Most of that text is specification, not example. The example in 4.3 is trivial in the sense that all that the source URI contained was the scheme and the authority. The implementation basically had to cut out a colon :-)

> 
> However, perhaps we need to say more in Section 4.2.1, including some
> examples?

I think 4.2.1 says the right things as far as the specification language goes. Perhaps merely expanding the example in 4.3 bullet 4 to u say something along the lines of "A SIP Address of Record of "sip:user@voice.example.edu" would yield a DNS domain portion of "voice.example.edu" and an application type of "sip", yielding a URI-ID of "sip:voice.example.net"

Alternately, a URI-ID example in 4.2.2 could work, although I realize none of the other examples in that section start with the raw user input.