Comments on draft-stark-expect-ct-00

Eric Rescorla <> Thu, 10 November 2016 01:02 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 7D15C1295D6 for <>; Wed, 9 Nov 2016 17:02:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -8.397
X-Spam-Status: No, score=-8.397 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-1.497, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id nXfdfGowkgrg for <>; Wed, 9 Nov 2016 17:02:24 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 0EE821294AC for <>; Wed, 9 Nov 2016 17:02:23 -0800 (PST)
Received: from lists by with local (Exim 4.80) (envelope-from <>) id 1c4dhW-00062Q-GR for; Thu, 10 Nov 2016 00:58:46 +0000
Resent-Date: Thu, 10 Nov 2016 00:58:46 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <>) id 1c4dhO-00061W-EZ for; Thu, 10 Nov 2016 00:58:38 +0000
Received: from ([]) by with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <>) id 1c4dhI-0004xC-IR for; Thu, 10 Nov 2016 00:58:33 +0000
Received: by with SMTP id r204so227214938ywb.0 for <>; Wed, 09 Nov 2016 16:58:12 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=TsRGXaPC+qsaud8cW9qzmamH19LRow8RVNd2AvXjiAc=; b=kiDWQOCTBALjfWishF3vZCDquGITudFIxa6Afa6Sin038jAzAV9nJzJRAOpjkTQIqx 4nBwHqWRaN1zaTJFnmyPA+2hcRjBx7uoHsrHf43dnLUsVeVn7KNlUcEbUbJT6FVqKL1s cWdj0hpKURJpRfTkxuYu1ZR/9kt3KCMD7OXB6AH6ReMqOn4p0LmQUt8nsYrKegDRWOW2 wnrcWFz/vlyi9ZrSTsnE4CuY3mYtYH7JziKnT29MRCBDDvnQ3GpsOtTZZ6uXcIY0Mb7m txYubhYRtzT2c+tIjBTcN/W6GQDxosZkgdEw4Mwiq0v1MLvE7BGLzyHEuuC2vcd+fFwP RfzA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=TsRGXaPC+qsaud8cW9qzmamH19LRow8RVNd2AvXjiAc=; b=VQecP0ZRHYpJDaYrq3x/u8qg3N86b1mHM/R44pygxWNPP1ICR4ykXXpK7gK3DlLFfp QHd277sHxAk9YSZZsjdNrNzBE3no8w0CYJ7o5r1dSJvj+zoWW7di9sqZ42AhBcTTDU8B eqXXDhRmY1R6FEd9z+9HpejjH4XPhaIKdvAV0fXzqrneVYZIK8j5p3dhtcRbAWWw/MnQ hkunSN98e+IXwSYX5kMTN28ZFzJjLAz0xUCtmhEd6YjpqpOMHYy2/4Z0BA+agu1EAgNI ECUw0RCUhVxE0moxLF5tN05V8wOup4GWwJfuRHM2zOJMzmt42YJT0oqd4nAWsU6ag6AJ FGJQ==
X-Gm-Message-State: ABUngvf1NmbZfgq7l5NEH461ZThYcPg/x2S04KbdoDfeGYaCc5hW2fG/SiGsYCUDsfcRIexyfLWK514W2WW0Nw==
X-Received: by with SMTP id u1mr2624791ywc.146.1478739486304; Wed, 09 Nov 2016 16:58:06 -0800 (PST)
MIME-Version: 1.0
Received: by with HTTP; Wed, 9 Nov 2016 16:57:25 -0800 (PST)
From: Eric Rescorla <>
Date: Wed, 09 Nov 2016 16:57:25 -0800
Message-ID: <>
To: HTTP Working Group <>
Content-Type: multipart/alternative; boundary="94eb2c0a8f82cc45aa0540e7dd59"
Received-SPF: none client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-6.4
X-W3C-Hub-Spam-Report: AWL=-0.451, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, W3C_AA=-1, W3C_DB=-1, W3C_IRA=-1, W3C_WL=-1
X-W3C-Scan-Sig: 1c4dhI-0004xC-IR 2e1b0b7b948b41733da3bfff722c3e43
Subject: Comments on draft-stark-expect-ct-00
Archived-At: <>
X-Mailing-List: <> archive/latest/32858
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

Is there a reason to not have this be attached to the HSTS header (or,
I guess more weakly to HPKP)?  The syntax seems like it allows it. It
seems like we go to all the trouble of making these headers extensible
(indeed, the syntax in S 2.1) seems almost identical to HSTS but then
we define a new header each time.

At least, it would be nice to merge the report-uri function/description.

I am probably missing something, but I don't see the text that defines
what the actual semantics of enforcing CT are. The document says stuff
like "The UA evaluates each connection to an Expect-CT host for
compliance with the UA's Certificate Transparency (CT) policy" which
leads me to believe that different UAs might have different policies.
Assuming I am correct, this seems like a recipe for interop problems,
even with the compliance checking in S 2.3.1. Consider the case where
a UA's policy is that you must have CT for every cert in the chain
and the operator has two certs, one from a CA which has CT for every
cert in the chain and another from a CA which has CT just for the EE
cert. If the client gets Expect-CT from a host with the first cert,
then it will fail trying to connect to a host with the second cert.

S 2.1.3.
What's the rationale for not caching the directive in report-only mode.
If the purpose of the report-only mode is to tell you when you have
nonconforming servers, then don't you want to be able to turn it on
on server A and detect hwen server B is broken? That seems like it
doesn't work if you don't cache.