Re: [Acme] Support for domains with redundant but not immediately synchronized servers

"Manger, James" <James.H.Manger@team.telstra.com> Mon, 07 December 2015 00:32 UTC

Return-Path: <James.H.Manger@team.telstra.com>
X-Original-To: acme@ietfa.amsl.com
Delivered-To: acme@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 28B961A8AEE for <acme@ietfa.amsl.com>; Sun, 6 Dec 2015 16:32:24 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.098
X-Spam-Level: *
X-Spam-Status: No, score=1.098 tagged_above=-999 required=5 tests=[BAYES_05=-0.5, HELO_EQ_AU=0.377, HOST_EQ_AU=0.327, J_CHICKENPOX_34=0.6, RCVD_IN_DNSWL_LOW=-0.7, RELAY_IS_203=0.994] autolearn=no
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 tiKwyegeGUBE for <acme@ietfa.amsl.com>; Sun, 6 Dec 2015 16:32:21 -0800 (PST)
Received: from ipxano.tcif.telstra.com.au (ipxano.tcif.telstra.com.au [203.35.82.200]) by ietfa.amsl.com (Postfix) with ESMTP id 783861A8AEF for <acme@ietf.org>; Sun, 6 Dec 2015 16:32:21 -0800 (PST)
X-IronPort-AV: E=Sophos;i="5.20,392,1444654800"; d="scan'208";a="48573073"
Received: from unknown (HELO ipcani.tcif.telstra.com.au) ([10.97.216.200]) by ipoani.tcif.telstra.com.au with ESMTP; 07 Dec 2015 11:32:17 +1100
X-IronPort-AV: E=McAfee;i="5700,7163,8007"; a="48747391"
Received: from wsmsg3757.srv.dir.telstra.com ([172.49.40.85]) by ipcani.tcif.telstra.com.au with ESMTP; 07 Dec 2015 11:32:17 +1100
Received: from WSMSG3153V.srv.dir.telstra.com ([172.49.40.159]) by wsmsg3757.srv.dir.telstra.com ([fe80::b5b0:1190:625a:50ad%22]) with mapi; Mon, 7 Dec 2015 11:32:17 +1100
From: "Manger, James" <James.H.Manger@team.telstra.com>
To: Peter Eckersley <pde@eff.org>, Jonas Wielicki <jonas@wielicki.name>, "acme@ietf.org" <acme@ietf.org>
Date: Mon, 07 Dec 2015 11:32:15 +1100
Thread-Topic: [Acme] Support for domains with redundant but not immediately synchronized servers
Thread-Index: AdEucDqktFKUlSP3RQiCvLfk4g6S9wCDN+Cg
Message-ID: <255B9BB34FB7D647A506DC292726F6E13BB473EFFB@WSMSG3153V.srv.dir.telstra.com>
References: <565C84A1.9040102@wielicki.name> <20151204084601.GQ18430@eff.org>
In-Reply-To: <20151204084601.GQ18430@eff.org>
Accept-Language: en-US, en-AU
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
acceptlanguage: en-US, en-AU
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Archived-At: <http://mailarchive.ietf.org/arch/msg/acme/JqKmfvIW5e0wwPJkJKheo93Utdc>
Subject: Re: [Acme] Support for domains with redundant but not immediately synchronized servers
X-BeenThere: acme@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Automated Certificate Management Environment <acme.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/acme>, <mailto:acme-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/acme/>
List-Post: <mailto:acme@ietf.org>
List-Help: <mailto:acme-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/acme>, <mailto:acme-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 07 Dec 2015 00:32:24 -0000

>> Ideally, it [Let's Encrypt] would use the IP of the 
>> requester (of course only after it has verified that the IP is in the
>> DNS) or allow the requester to specify a preferred IP.

This is quite a sensible feature request from Jonas. It supports multiple servers for a domain while encouraging keys that are tied to a single piece of hardware, without adding extra coordination requirements. It doesn't feel too onerous for CAs to implement.

> There's a fairly good solution available with the current protocol, which is to serve a (long lived) redirect from /.well-known/acme-challenge/ on all of the servers to a different URL that is always answered by the machine you run an ACME client on.

This redirect-based workaround feels far from ideal. It assumes 1 server does all the ACME bits, which discourages per-hardware keys. It requires more coordination between servers (1 is different; others need its IP; need some extra mechanism to distribute key+cert once issued). Section 9.2 "Integrity of Authorizations" [draft-ietf-acme-acme-01] warns that an ACME CA following redirects can be risky as a web site might have a catch-all redirect rule. Even worse, the spec hints that CAs might not (or must not?) follow redirects at all due to the risk when it says: "suppose an ACME server follows HTTP redirects in Simple HTTP validation…".

App-level redirects might be necessary to cope with some load balancing schemes, but specifying that an ACME server must prefer the requester's IP or a specified IP from the A/AAAA records DNS returns would still be useful.

--
James Manger


-----Original Message-----
From: Acme [mailto:acme-bounces@ietf.org] On Behalf Of Ryan Pendleton
Sent: Friday, 4 December 2015 8:53 PM

Personally, I think that's a more appropriate approach.

Even if a protocol change was made that allowed an ACME client to pin the challenge to a certain IP address, the requested IP may not always be returned by the authoritative DNS server. Any type of latency, geo or weighted routing algorithm could potentially get in the way.


-----Original Message-----
From: Acme [mailto:acme-bounces@ietf.org] On Behalf Of Peter Eckersley
Sent: Friday, 4 December 2015 7:46 PM
To: Jonas Wielicki <jonas@wielicki.name>
Cc: acme@ietf.org
Subject: Re: [Acme] Support for domains with redundant but not immediately synchronized servers

There's a fairly good solution available with the current protocol, which is to serve a (long lived) redirect from /.well-known/acme-challenge/ on all of the servers to a different URL that is always answered by the machine you run an ACME client on.

Are there any cases where that is sufficiently unworkable to warrant a protocol change?


-----Original Message-----
From: Acme [mailto:acme-bounces@ietf.org] On Behalf Of Jacob Hoffman-Andrews
Sent: Friday, 4 December 2015 10:27 AM

I think there are a few possible approaches to domain validation for hostnames that resolve to multiple IP addresses:

1) It is sufficient to deploy a challenge response on any IP address.
2) The challenge response must be deployed on all IP addresses.
3) The server tries one deterministic IP address and succeeds or fails based on whether the challenge is deployed there.

Let's Encrypt currently does (3), but it's probably the worst of both worlds and we should fix it.

Arguably (2) is the most secure, since a single-machine compromise isn't sufficient to issue a certificate.

And (1) is the easiest and most user-friendly. I think it's also similar to existing practice in the wild.

Jonas, security-wise your proposal is equivalent to (1). Rather than adding a preferred IP address to the spec, why not specif that ACME servers SHOULD implement (1)? Alternately we could state in the spec that the choice of IP is a policy choice of the CA, and lay out the two most reasonable options (1 and 2).

On Mon, Nov 30, 2015 at 06:17:21PM +0100, Jonas Wielicki wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> 
> Hi list,
> 
> I have asked this in the IRC and was pointed to this mailing list. I 
> tried to get a certificate for klausurschokola.de via Let’s Encrypt 
> during the currently running limited beta (we have the domain 
> whitelisted). The name has the following address records:
> 
> 1800 	IN 	A	176.9.101.187
> 1800 	IN 	A 	217.115.12.71
> 
> (in addition, there is one AAAA record for each of the machines 
> addressed by the A records)
> 
> As you can see, two different machines are addressed. Those are 
> physically separated machines with different main administrators.
> Both are pulling their web content from the same source, but it is not 
> supposed to be dynamic, so there is no "fast" (order of seconds) way 
> to mirror the content.
> 
> Our wish would be to be able to use different private keys and 
> certificates for both hosts, and renew these independently from the 
> other host. We thought that this would be possible using Let’s Encrypt.
> 
> The problem is that currently, the Let’s Encrypt server sometimes 
> chooses the wrong of the two IPs to ask for the file in 
> /.well-known/acme-challenge. Ideally, it would use the IP of the 
> requester (of course only after it has verified that the IP is in the
> DNS) or allow the requester to specify a preferred IP.
> 
> For example, on 176.9.101.187:
> 
> # letsencrypt certonly -c ~/schoko.ini -d klausurschokola.de -d 
> www.klausurschokola.de
> 
> [… curses …]
> 
> Failed authorization procedure. klausurschokola.de (http-01):
> unauthorized :: The client lacks sufficient authorization :: Invalid 
> response from 
> http://klausurschokola.de/.well-known/acme-challenge/c5HJrtp8t8JhfNgTX
> VC
> 8N7OsCrguAWGw-JTIJxCFeIQ
> [217.115.12.71]: 404
> 
> 
> Is such a thing planned? Are there security reasons against doing 
> this? Are there security reasons against doing this on a DNSSEC signed 
> domain (which klausurschokola.de is)?
> 
> best regards,
> Jonas