Re: [Iot-onboarding] what can pinned-domain-cert actually pin?

Michael Richardson <> Tue, 27 August 2019 19:21 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id B7FC9120827 for <>; Tue, 27 Aug 2019 12:21:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.199
X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id k8amrtm6VVtf for <>; Tue, 27 Aug 2019 12:21:48 -0700 (PDT)
Received: from ( [IPv6:2607:f0b0:f:3:216:3eff:fe7c:d1f3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 63005120838 for <>; Tue, 27 Aug 2019 12:21:48 -0700 (PDT)
Received: from ( [IPv6:2607:f0b0:f:2::247]) by (Postfix) with ESMTP id 26B8A3818E; Tue, 27 Aug 2019 15:20:38 -0400 (EDT)
Received: from localhost (localhost [IPv6:::1]) by (Postfix) with ESMTP id E8D2C8F1; Tue, 27 Aug 2019 15:21:45 -0400 (EDT)
From: Michael Richardson <>
To: Kent Watsen <>
In-Reply-To: <>
References: <2693.1566923418@localhost> <>
X-Mailer: MH-E 8.6; nmh 1.7+dev; GNU Emacs 24.5.1
X-Face: $\n1pF)h^`}$H>Hk{L"x@)JS7<%Az}5RyS@k9X%29-lHB$Ti.V>2bi.~ehC0; <'$9xN5Ub# z!G,p`nR&p7Fz@^UXIn156S8.~^@MJ*mMsD7=QFeq%AL4m<nPbLgmtKK-5dC@#:k
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature"
Date: Tue, 27 Aug 2019 15:21:45 -0400
Message-ID: <12738.1566933705@localhost>
Archived-At: <>
Subject: Re: [Iot-onboarding] what can pinned-domain-cert actually pin?
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Discussion of IoT onboarding mechanisms <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 27 Aug 2019 19:21:51 -0000

Kent Watsen <> wrote:
    > The "private CA roll-over" scenario you mention is side-stepped by
    > enabling the Owner Certificate to itself be a partial chain (i.e.,
    > total-chain = partial-root-chain + partial-owner-cert-chain), hence the
    > partial-root-chain part can be protected by some offline HSM while
    > signing (e.g., annually) some middle-level CAs that are used to sign
    > the actual Owner Cert EE cert.

i.e. adding a layer of indirection solves the problem in the classic way.

    > Separately in SZTP, there is the notion the device dynamically (during
    > bootstrap) receiving the TA for a bootstrap server it it being
    > redirected to.  In this case, the bootstrap servers are presenting a
    > TLS-based service (specifically, HTTPS), and so EE certs MAY have a
    > public root TA.  It was discussed at one point that the TA cert may
    > expire and thus wouldn't it be better to enable the TA to be expressed
    > as a 2-tuple [ <long-lived TA cert (MAY be a public CA)>, <name of some
    > 'subject' matter in the TA-issued CA cert>].  But this became
    > complicated and, instead, we opted for introducing alerts/alarms for
    > when certificates are nearing expiration.

When certificates, or when vouchers?

    > Part of what made it complicated is that one can imagine an
    > organization obtaining a single top-level organization-wide commercial
    > CA certificate that it uses for a variety of reasons, only one of which
    > is to sign vouchers.

These organization-wide commerical CA certificates seem impossible to obtain
today.  At least, I haven't found a CA willing to sell that anymore, and I
would love to be told I'm wrong.

    > Thus, in such cases, the 2-tuple becomes a
    > 3-tuple (and perhaps even an N-tuple), e.g.: [ <long-lived TA cert (MAY
    > be a public CA)>, <name of some 'subject' matter in the TA-issued CA
    > cert>, <name of some 'subject' matter in the voucher-issuer's cert>].

    > Related, though not exactly, I regret that RFC 8366 states that the
    > pinned-domain-cert value is a single X.509 cert, as opposed to a
    > potential chain of certs.  One reason is so as to simplify support for
    > path-validations, as not all libraries support partial-chain
    > validation.

A revision could change it from single item to an array of items.
That would be relatively easy to figure out in code, but I'm not entirely
sure I understand the use case.  Are these independant anchors, or are the
intended to be related.

]               Never tell me the odds!                 | ipv6 mesh networks [
]   Michael Richardson, Sandelman Software Works        |    IoT architect   [
]        |   ruby on rails    [