Package: release.debian.org Severity: normal Tags: buster User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: hlieber...@debian.org, team+letsencr...@tracker.debian.org
Hello Release Team! As part of the deprecation of the Let's Encrypt v1 endpoint beginning in January, they are going to begin causing intermittant failures increasing to a complete shutdown June 2021. To prevent users from being affected by this transition, I've prepared a backport of the piece of code that switches renewals automatically to v2. In this version of the code, new certificates were already being issued through the v2 URL. A debdiff is attached. Sincerely, -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (900, 'testing') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.9.0-4-amd64 (SMP w/4 CPU threads) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
diff -Nru python-certbot-0.31.0/debian/changelog python-certbot-0.31.0/debian/changelog --- python-certbot-0.31.0/debian/changelog 2019-02-09 19:39:59.000000000 -0500 +++ python-certbot-0.31.0/debian/changelog 2020-12-04 21:33:11.000000000 -0500 @@ -1,3 +1,15 @@ +python-certbot (0.31.0-1~deb10u1) buster; urgency=high + + * Switch to use of ACMEv2 API to prevent renewal failures. (Closes: #971045) + + Let's Encrypt's ACMEv1 API is deprecated and in the process of being + shut down. Beginning with brownouts in January 2021, and ending with a + total shutdown in June 2021, the Let's Encrypt APIs will become + unavailable. To prevent users having disruptions to their certificate + renewals, this update backports the switch over to the ACMEv2 API. + + -- Harlan Lieberman-Berg <hlieber...@debian.org> Fri, 04 Dec 2020 21:33:11 -0500 + python-certbot (0.31.0-1) unstable; urgency=medium * New upstream version 0.31.0 diff -Nru python-certbot-0.31.0/debian/patches/0002-acmev2-api.patch python-certbot-0.31.0/debian/patches/0002-acmev2-api.patch --- python-certbot-0.31.0/debian/patches/0002-acmev2-api.patch 1969-12-31 19:00:00.000000000 -0500 +++ python-certbot-0.31.0/debian/patches/0002-acmev2-api.patch 2020-12-04 21:30:36.000000000 -0500 @@ -0,0 +1,88 @@ +From 8a15bd7927e2b8956bb1f4d062423e471e473ccf Mon Sep 17 00:00:00 2001 +From: Alex Zorin <a...@zorin.id.au> +Date: Thu, 21 May 2020 22:58:40 +1000 +Subject: [PATCH 1/2] renewal: disregard acme-v01 in renewal configs + +Fixes #7979 +--- + certbot/_internal/constants.py | 2 ++ + certbot/_internal/renewal.py | 17 +++++++++++++++-- + certbot/tests/renewal_test.py | 8 ++++++++ + 3 files changed, 25 insertions(+), 2 deletions(-) + +Index: python-certbot/certbot/constants.py +=================================================================== +--- python-certbot.orig/certbot/constants.py ++++ python-certbot/certbot/constants.py +@@ -120,6 +120,8 @@ CLI_DEFAULTS = dict( + ) + STAGING_URI = "https://acme-staging-v02.api.letsencrypt.org/directory" + ++V1_URI = "https://acme-v01.api.letsencrypt.org/directory" ++ + # The set of reasons for revoking a certificate is defined in RFC 5280 in + # section 5.3.1. The reasons that users are allowed to submit are restricted to + # those accepted by the ACME server implementation. They are listed in +Index: python-certbot/certbot/renewal.py +=================================================================== +--- python-certbot.orig/certbot/renewal.py ++++ python-certbot/certbot/renewal.py +@@ -17,6 +17,7 @@ import OpenSSL + from acme.magic_typing import List # pylint: disable=unused-import, no-name-in-module + + from certbot import cli ++from certbot import constants + from certbot import crypto_util + from certbot import errors + from certbot import interfaces +@@ -247,16 +248,28 @@ def _restore_int(name, value): + raise errors.Error("Expected a numeric value for {0}".format(name)) + + +-def _restore_str(unused_name, value): ++def _restore_str(name, value): + """Restores an string key-value pair from a renewal config file. + +- :param str unused_name: option name ++ :param str name: option name + :param str value: option value + + :returns: converted option value to be stored in the runtime config + :rtype: str or None + + """ ++ # Previous to v0.5.0, Certbot always stored the `server` URL in the renewal config, ++ # resulting in configs which explicitly use the deprecated ACMEv1 URL, today ++ # preventing an automatic transition to the default modern ACME URL. ++ # (https://github.com/certbot/certbot/issues/7978#issuecomment-625442870) ++ # As a mitigation, this function reinterprets the value of the `server` parameter if ++ # necessary, replacing the ACMEv1 URL with the default ACME URL. It is still possible ++ # to override this choice with the explicit `--server` CLI flag. ++ if name == "server" and value == constants.V1_URI: ++ logger.info("Using server %s instead of legacy %s", ++ constants.CLI_DEFAULTS["server"], value) ++ return constants.CLI_DEFAULTS["server"] ++ + return None if value == "None" else value + + +Index: python-certbot/certbot/tests/renewal_test.py +=================================================================== +--- python-certbot.orig/certbot/tests/renewal_test.py ++++ python-certbot/certbot/tests/renewal_test.py +@@ -31,6 +31,15 @@ class RenewalTest(test_util.ConfigTestCa + renewal._restore_webroot_config(config, renewalparams) + self.assertEqual(config.webroot_path, ['/var/www/']) + ++ @mock.patch('certbot.renewal.cli.set_by_cli') ++ def test_ancient_server_renewal_conf(self, mock_set_by_cli): ++ from certbot import constants ++ self.config.server = None ++ mock_set_by_cli.return_value = False ++ from certbot.renewal import restore_required_config_elements ++ restore_required_config_elements(self.config, {'server': constants.V1_URI}) ++ self.assertEqual(self.config.server, constants.CLI_DEFAULTS['server']) ++ + + class RestoreRequiredConfigElementsTest(test_util.ConfigTestCase): + """Tests for certbot.renewal.restore_required_config_elements.""" diff -Nru python-certbot-0.31.0/debian/patches/series python-certbot-0.31.0/debian/patches/series --- python-certbot-0.31.0/debian/patches/series 2019-02-05 22:13:56.000000000 -0500 +++ python-certbot-0.31.0/debian/patches/series 2020-12-04 21:30:27.000000000 -0500 @@ -1 +1,2 @@ 0001-remove-external-images.patch +0002-acmev2-api.patch