[certid] open issue: wildcards in component fragments

Peter Saint-Andre <stpeter@stpeter.im> Wed, 06 October 2010 21:47 UTC

Return-Path: <stpeter@stpeter.im>
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 7894B3A713F for <certid@core3.amsl.com>; Wed, 6 Oct 2010 14:47:47 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -102.554
X-Spam-Level:
X-Spam-Status: No, score=-102.554 tagged_above=-999 required=5 tests=[AWL=0.045, BAYES_00=-2.599, 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 f1Huw7XHuLsc for <certid@core3.amsl.com>; Wed, 6 Oct 2010 14:47:45 -0700 (PDT)
Received: from stpeter.im (stpeter.im [207.210.219.233]) by core3.amsl.com (Postfix) with ESMTP id 4FBF33A70FA for <certid@ietf.org>; Wed, 6 Oct 2010 14:47:45 -0700 (PDT)
Received: from leavealone.cisco.com (72-163-0-129.cisco.com [72.163.0.129]) (Authenticated sender: stpeter) by stpeter.im (Postfix) with ESMTPSA id 27C8C40074 for <certid@ietf.org>; Wed, 6 Oct 2010 15:54:57 -0600 (MDT)
Message-ID: <4CACEEBC.8010109@stpeter.im>
Date: Wed, 06 Oct 2010 15:48:44 -0600
From: Peter Saint-Andre <stpeter@stpeter.im>
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: IETF cert-based identity <certid@ietf.org>
X-Enigmail-Version: 1.1.1
OpenPGP: url=http://www.saint-andre.com/me/stpeter.asc
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Subject: [certid] open issue: wildcards in component fragments
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, 06 Oct 2010 21:47:47 -0000

I'm reading through the mailing list threads and working to identity the
remaining open issues. Jeff and I might post additional, focused
requests for feedback in the near future, so stay tuned. However, I
think that our working copy addresses nearly all the feedback that's
been posted during and after the IETF Last Call, so we plan to publish a
revised I-D as soon as possible.

This message covers the open issue of wildcard matching, specifically
matching of component fragments (e.g., foo*.example.com).

RFC 2818 states:

   Names may contain the wildcard
   character * which is considered to match any single domain name
   component or component fragment. E.g., *.a.com matches foo.a.com but
   not bar.foo.a.com. f*.com matches foo.com but not bar.com.

Version -01 of draft-saintandre-tls-server-id-check (August 31, 2009)
had this text:

   A dNSName MAY contain the wildcard character '*' (ASCII 42).  The
   wildcard character applies only to the left-most (least significant)
   domain name component or component fragment and matches any single
   component or component fragment.  For instance, a dNSName of
   *.example.com matches foo.example.com but not bar.foo.example.com or
   example.com itself; similarly, a dNSName of baz*.example.net matches
   baz1.example.net and baz2.example.net but not qux.example.net or
   example.net itself.

Version -02 of draft-saintandre-tls-server-id-check (October 2, 2009)
had this modified text:

   Unless otherwise specified by an application protocol, the dNSName
   MAY contain one instance of the wildcard character '*'.  The wildcard
   character applies only to the left-most domain name component and
   matches any single component (thus a dNSName of *.example.com matches
   foo.example.com but not bar.foo.example.com or example.com itself).
   The wildcard character is not allowed in component fragments (thus a
   dNSName of baz*.example.net is not allowed and shall not be taken to
   match baz1.example.net and baz2.example.net).

And version -09 has similar text:

   A client employing this specification's rules MAY match the reference
   identifier against a presented identifier containing one instance of
   the wildcard character '*', but only as the left-most label of the
   domain name, e.g. *.example.com (following the definition of "label"
   from [DNS]).

   If such a wildcard identifier is presented, the wildcard MUST be used
   to match only the one position-wise corresponding label (thus
   *.example.com matches foo.example.com but not bar.foo.example.com or
   example.com).  The client MUST fail to match a presented identifier
   in which the wildcard character is contained within a label fragment
   (e.g., baz*.example.net is not allowed and MUST NOT be taken to match
   baz1.example.net and baz2.example.net), or in which the wildcard
   character does not comprise the left-most label in the presented
   identifier (e.g., neither bar.*.example.net nor bar.f*o.example.net
   are allowed).

If I recall correctly, I added that the rule against matching of
component fragments in response to feedback from Alexey Melnikov, who
was reporting on discussion within the IESG, perhaps regarding
draft-ietf-sip-domain-certs (now RFC 5922), which states:

###

         Implementations MUST NOT match any form of wildcard, such as a
         leading "." or "*." with any other DNS label or sequence of
         labels.  For example, "*.example.com" matches only
         "*.example.com" but not "foo.example.com".  Similarly,
         ".example.com" matches only ".example.com", and does not match
         "foo.example.com".

            RFC 2818 [7] (HTTP over TLS) allows the dNSName component to
            contain a wildcard; e.g., "DNS:*.example.com".  RFC 5280
            [6], while not disallowing this explicitly, leaves the
            interpretation of wildcards to the individual specification.
            RFC 3261 [2] does not provide any guidelines on the presence
            of wildcards in certificates.  Through the rule above, this
            document prohibits such wildcards in certificates for SIP
            domains.

###

On the topic of wildcard matching, Martin Rex posted as follows on
September 16...

<http://www.ietf.org/mail-archive/web/certid/current/msg00337.html>

###

(e.g., baz*.example.net is not allowed and MUST NOT be taken to match
   baz1.example.net and baz2.example.net)

This is in clear contradiction to the wildcard matching specified
in rfc-2818 Section 3.1.  And without any rationale for this U-Turn,
that seems to be entirely inappropriate for a BCP.

In my implementation of RFC-2818 wildcard matching, I deliberately
ignore DNS names that contain more than one wildcard character,
have a wildcard character in different but the leftmost label
or have a wildcard character and less than 3 DNS labels.
But I certainly do the substring match specified in rfc-2818
and I'm not going to remove the substring match from my
implementation without a convincing rationale...

What exactly is the benefit of allowing a full wildcard match but
prohibiting a partial/substring wildcard match of the leftmost label?

###

Martin Rex also posted as follows in that same thread:

<http://www.ietf.org/mail-archive/web/certid/current/msg00345.html>

###

Partial wildcard match will allow you to use one single server cert
for a server farm behind a load-balancing NAT with hostnames such as
"www1.example.com", "www2.example.com", ... "wwwNN.,example.com"
by using the pattern "www*.example.com" that will neither match
"kdc.example.com", "ldap.example.com", nor "imap.example.com"
To me, that seems significantly more useful than only a full
wildcard match.  The current draft could be read to mean (without a
single word of rationale) that partial wildcard matching is so much more
dangerous than full wildcard matching that MUST NOT be used by anyone
anymore. If this is not removed from the draft, this will result in a
completely inconsistent behaviour within the installed based causing
headaches with no ends to end-users, admins and helpdesks--for those
servers that actively use this sensible alternative to full wildcard
certs as specified in rfc-2818.

###

What is the sense of this list regarding wildcard matching on component
fragments? Martin has made his arguments so I'm especially interested in
feedback from other folks.

Thanks!

Peter

-- 
Peter Saint-Andre
https://stpeter.im/