Commit Graph
11365 Commits
Author SHA1 Message Date
Will Greenberg 8ebbe24190 Bump version to 5.5.0 2026-03-10 10:47:29 -07:00
Will Greenberg 1ff7e2032a Remove built packages from git 2026-03-10 10:47:29 -07:00
Will Greenberg 95c004cb96 Release 5.4.0 v5.4.0 2026-03-10 10:47:28 -07:00
Will Greenberg 564a7b70d6 Update changelog for 5.4.0 release 2026-03-10 10:46:56 -07:00
ohemorangeandGitHub c31974128b Add thanks section to readme; thank digital ocean (#10592)
Fixes https://github.com/certbot/certbot/issues/10580

Direct link to preview of updated README:
https://github.com/certbot/certbot/blob/47786891acc4cb5031d5934de76399620c08a013/certbot/README.rst#thanks
2026-03-06 17:58:31 -08:00
ohemorangeandGitHub e6efb5c6d3 Add notice about AI generated code policy to pull request checklist (#10590) 2026-03-05 11:02:22 -08:00
ohemorangeandGitHub 15e73753a6 Fix link in docker readme (#10582)
The link in the docker README is no longer accurate, we've changed the
headings on the website. This updates the README to match.
2026-02-25 21:17:09 -08:00
ff281d48a8 Improve the error message when certbot renew is used with the -d option (#10225)
Co-authored-by: Brad Warren <bmw@eff.org>
2026-02-13 23:55:35 +00:00
ohemorangeandGitHub 4c61a450d4 Reset mock call count using reset_mock since new thread-safe implementation means it can no longer just be set to 0 (#10576)
This should fix our failing tests.

Python 3.14.3 has the following in its changelog:

> [gh-142651](https://github.com/python/cpython/issues/142651):
[unittest.mock](https://docs.python.org/3/library/unittest.mock.html#module-unittest.mock):
fix a thread safety issue where
[Mock.call_count](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.call_count)
may return inaccurate values when the mock is called concurrently from
multiple threads.

As a result, we have to call `reset_mock()` instead of using
`.call_count = 0`. See example
[here](https://github.com/matplotlib/matplotlib/pull/31153).

Tests on my machine showing that this change fixes things, and it's the
only place to fix:
```bash
$ brew upgrade pyenv
$ pyenv install 3.14.3
$ pyenv global 3.14.3
$ tools/venv.py
$ source venv/bin/activate
$ pytest certbot -k "test_rollback_too_many" 
====================================================================== test session starts =======================================================================
platform darwin -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0
rootdir: /Users/erica/certbot
configfile: pytest.ini
plugins: anyio-4.12.1, xdist-3.8.0, cov-7.0.0
collected 1039 items / 1038 deselected / 1 selected                                                                                                              

certbot/src/certbot/_internal/tests/reverter_test.py .                                                                                                     [100%]

=============================================================== 1 passed, 1038 deselected in 2.94s ===============================================================
$ git grep 'call_count = 0'
$ git checkout main
$ pytest certbot -k "test_rollback_too_many"
====================================================================== test session starts =======================================================================
platform darwin -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0
rootdir: /Users/erica/certbot
configfile: pytest.ini
plugins: anyio-4.12.1, xdist-3.8.0, cov-7.0.0
collected 1039 items / 1038 deselected / 1 selected                                                                                                              

certbot/src/certbot/_internal/tests/reverter_test.py F                                                                                                     [100%]

============================================================================ FAILURES ============================================================================
_______________________________________________________ TestFullCheckpointsReverter.test_rollback_too_many _______________________________________________________

self = <certbot._internal.tests.reverter_test.TestFullCheckpointsReverter testMethod=test_rollback_too_many>
mock_logger = <MagicMock name='logger' id='4463351456'>

>   ???
E   AssertionError: assert 2 == 1
E    +  where 2 = <MagicMock name='logger.warning' id='4463351792'>.call_count
E    +    where <MagicMock name='logger.warning' id='4463351792'> = <MagicMock name='logger' id='4463351456'>.warning

certbot/src/certbot/_internal/tests/reverter_test.py:363: AssertionError
==================================================================== short test summary info =====================================================================
FAILED certbot/src/certbot/_internal/tests/reverter_test.py::TestFullCheckpointsReverter::test_rollback_too_many - AssertionError: assert 2 == 1
=============================================================== 1 failed, 1038 deselected in 0.48s ===============================================================
$ git grep 'call_count = 0'
certbot/src/certbot/_internal/tests/reverter_test.py:        mock_logger.warning.call_count = 0
```
2026-02-13 13:08:06 -08:00
Jacob Hoffman-AndrewsandGitHub 59a631f21a webroot: add IP address support (#10543)
Part of #10346
2026-02-12 11:00:03 -08:00
Brad WarrenandGitHub 8ae17fd174 update dns-azure URL (#10573)
until sometime in the last year,
https://github.com/binkhq/certbot-dns-azure redirected to
https://github.com/terricain/certbot-dns-azure according to
https://web.archive.org/web/20250901000000*/https://github.com/binkhq/certbot-dns-azure.
since then, that redirect was broken/removed

this has [caused
confusion](https://github.com/certbot/certbot/pull/8727#issuecomment-3880163261)
and since [terricain expressed interest in their plugin being
listed](https://github.com/certbot/certbot/pull/8727#issuecomment-815287041),
let's fix up that link
2026-02-10 14:06:19 -08:00
ohemorangeandGitHub d4681f9a49 Merge pull request #10571 from certbot/candidate-5.3.1
update files from 5.3.1 release
2026-02-10 11:39:30 -08:00
Brad WarrenandGitHub e710fb0488 update credential expiry (#10570)
i just updated this credential in CI and created a calendar event to
help us remember to update it

with the calendar event, i don't think we need the code comment here. it
wasn't updated last time and it's one less thing for us to remember to
do next year

i don't think this PR requires two reviews

with the changes i made to CI and our calendar, i think i can say this
fixes #10563
2026-02-09 16:24:52 -08:00
Brad Warren 29de02c160 Bump version to 5.4.0 2026-02-09 13:20:07 -08:00
Brad Warren 619a519650 Remove built packages from git 2026-02-09 13:20:07 -08:00
Brad Warren ec978d593d Release 5.3.1 v5.3.1 2026-02-09 13:20:05 -08:00
Brad Warren 3c61eadc8b Update changelog for 5.3.1 release 2026-02-09 13:19:25 -08:00
Brad WarrenandGitHub b02f88af21 add changelog entry for point release (#10569) 2026-02-09 13:16:50 -08:00
CharlieandGitHub 420f526062 Fix Cloudflare API tokens link in documentation (#10551) (#10564)
Updated the link to the Cloudflare API tokens page for accuracy.

## Pull Request Checklist

- [ ] The Certbot team has recently expressed interest in reviewing a PR
for this. If not, this PR may be closed due our limited resources and
need to prioritize how we spend them.
- [ ] If the change being made is to a [distributed
component](https://certbot.eff.org/docs/contributing.html#code-components-and-layout),
add a description of your change to the `newsfragments` directory. This
should be a file called `<title>.<type>`, where `<title>` is either a
GitHub issue number or some other unique name starting with `+`, and
`<type>` is either `changed`, `fixed`, or `added`.
* For example, if you fixed a bug for issue number 42, create a file
called `42.fixed` and put a description of your change in that file.
- [ ] Add or update any documentation as needed to support the changes
in this PR.
- [x] Include your name in `AUTHORS.md` if you like.

## Pull Request Checklist

- [ ] The Certbot team has recently expressed interest in reviewing a PR
for this. If not, this PR may be closed due our limited resources and
need to prioritize how we spend them.
- [ ] If the change being made is to a [distributed
component](https://certbot.eff.org/docs/contributing.html#code-components-and-layout),
add a description of your change to the `newsfragments` directory. This
should be a file called `<title>.<type>`, where `<title>` is either a
GitHub issue number or some other unique name starting with `+`, and
`<type>` is either `changed`, `fixed`, or `added`.
* For example, if you fixed a bug for issue number 42, create a file
called `42.fixed` and put a description of your change in that file.
- [ ] Add or update any documentation as needed to support the changes
in this PR.
- [ ] Include your name in `AUTHORS.md` if you like.
2026-02-05 11:52:08 -08:00
ohemorangeandGitHub 9ba139a9ef Fix links to --ip-address PRs in changelog (#10562)
As noted in
https://community.letsencrypt.org/t/certbot-5-3-0-release/245097/2, we
have the wrong link here (and it's missing the manual pr link). Let's
just add those in.
2026-02-03 13:30:58 -08:00
Brad WarrenandGitHub 410ee87242 fix compatibility with pyparsing 3 and update to it (#10560)
on main if you run tools/pinning/current/repin.sh and run our unit
tests, they will fail due to new deprecation warnings from pyparsing.
the cause of these warnings is described at
https://github.com/pyparsing/pyparsing/blob/dc009668d8025b96522eb7503e2ef84c2be58843/docs/whats_new_in_3_0_0.rst?plain=1#L613-L708

this PR fixes these warnings and updates our minimum required pyparsing
version to 3.0 where the new naming convention is available. i ran our
full test suite on the first commit here and it passed

i don't think it's worth trying to keep compatibility with pyparsing<3
unless we get a request for us to do so which i really doubt we will
2026-02-03 11:51:26 -08:00
Brad WarrenandGitHub a9746336b7 Merge pull request #10561 from certbot/candidate-5.3.0
Release 5.3.0
2026-02-03 11:49:39 -08:00
Erica Portnoy 4de1c60534 Remove built packages from git 2026-02-03 09:52:18 -08:00
Erica Portnoy 1ee73eed10 Bump version to 5.4.0 2026-02-03 09:52:18 -08:00
Erica Portnoy 54a3078305 Release 5.3.0 v5.3.0 2026-02-03 09:52:16 -08:00
Erica Portnoy 6b8bb6c0a3 Update changelog for 5.3.0 release 2026-02-03 09:51:43 -08:00
e7c539d3e9 Deprecate functions using acme.crypto_util.Formatto be able to soon remove OpenSSL (#10485)
A few largely unused functions/types have been deprecated in our effort
to remove our pyOpenSSL dependency:
    * Deprecated: `certbot.crypto_util.get_sans_from_cert`
    * Deprecated: `certbot.crypto_util.get_names_from_cert`
    * Deprecated: `certbot.crypto_util.get_names_from_req`
* Deprecated: `certbot.crypto_util.import_csr_file` (and replaced by
`certbot.crypto_util.read_csr_file`)
    * Deprecated: `acme.crypto_util.Format`

`read_csr_file` now always returns a PEM formatted CSR, since that's
what was happening in practice, and therefore lets us stop having to
return a `Format`, so we will be able to stop importing it.

first half of #10433

---------

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2026-02-02 16:25:13 -08:00
5cc2f6b4af List certbot-dns-czechia under 3rd party plugins (#10557)
Fixes https://github.com/certbot/certbot/issues/10553

Link checked as well.

---------

Co-authored-by: Brad Warren <bmw@eff.org>
2026-02-02 23:34:40 +00:00
ohemorangeandGitHub b362109bf6 Fix certbot tests after updating pytest to 9.0.2 (#10545)
Fixes  #10518.

`tools/pinning/current/repin.sh` is not run; only pytest version is
updated. This is because `pypinning` had a bunch of syntax changes that
seem simply but I believe should be in a separate PR, which I think
should be done after this to collect all repin changes.

As discussed further in #10518, these issues were caused by pytest's
internalization of pytest-subtest, which had several implementation
changes.

To fix these, we simply no longer use subtest in the failing tests. The
test in acme is now parametrized instead, and the tests in apache only
ever had a single parameter.

To use parametrization in the acme test, I converted `DNSTest` from
unittest to pytest style, which was pretty straightforward. The only
note there is that while it would be nice to make `ec_secp384r1_key` a
fixture, you [can't use fixtures in
parameters](https://github.com/pytest-dev/pytest/issues/349). You could
use requests, but that seemed less clear and messier, because then you'd
be checking the value of the parameter and only sometimes loading it.
Could also make it a global variable, but that didn't really seem
necessary, as it's only called twice. Happy to consider other options,
not strongly tied to this one, just seemed nicest to me.
2026-02-02 12:13:24 -08:00
Mike LimandGitHub 88af129315 Granular permissions (#9922)
Set granular permissions to TXT DNS records with names starting with
`_acme-challenge.` only
This replaces original policy that is too permissive

The `Condition` clause uses [Route 53 resource record set
permission](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-permissions.html)

Policy tested with Certbot 2.9.0
2026-02-02 11:18:05 -08:00
Brad WarrenandGitHub 991ecd7c8e update dependencies (#10552)
as of writing this, this resolves all alerts those with access can see
at https://github.com/certbot/certbot/security/dependabot

i ran the full test suite on this branch at
https://dev.azure.com/certbot/certbot/_build/results?buildId=10057&view=results
and everything passed

i don't think this PR requires two reviews
2026-02-02 10:09:02 -08:00
1b7c11e6a5 manual plugin: add IP address support (#10544)
The manual plugin offers environment variables for its hook called
CERTBOT_DOMAIN and CERTBOT_ALL_DOMAINS. I added CERTBOT_IDENTIFIER and
CERTBOT_ALL_IDENTIFIERS, while keeping the old variables for backwards
compatibility. Certbot will pass IP addresses in the CERTBOT_DOMAIN
environment variable rather than erroring out.

Part of #10346

---------

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2026-01-29 16:10:45 -08:00
b00e3de9d2 Completely aligns deploy and renew hook behaviors, fully fixing #9978 (#10534)
https://github.com/certbot/certbot/pull/10146 was supposed to do this,
but because of multiple code paths, it did not. This PR simplifies the
code by creating a single code path.

In particular:

- `hooks.renew_hook()` is removed. There are now only calls to
`hooks.deploy_hook()`, which is called during certonly, run, and renew,
and runs both cli and directory hooks.
- `cli_config.renew_hook` is removed. Both `--renew-hook` (hidden option
kept for backwards compatibility purposes and `--deploy-hook` now set
`cli_config.deploy_hook`, which is used internally. When either or both
flags are used multiple times, the last value is kept, which is the
argparse default.
- references to running a "renew hook" internally are changed to "deploy
hook"
- To maintain downgrade compatibility, `deploy_hook` is written out to
renewal config files as `renew_hook`. This is achieved by translating to
and from `renew_hook` in `storage.py` and changing
`renewal.STR_CONFIG_ITEMS` to contain `deploy_hook`.

This results in the following behavior changes:
- Directory hooks are now run when getting a new cert using certonly/run
- If someone set a renew hook on the cli using `--renew-hook`, it would
previously not be run when getting a new (non-renewed) cert, but now
will be. But this option is hidden and should no longer be used anyway.
- When using `certbot reconfigure`, if someone sets `--renew-hook`
certbot will now also ask if someone would like to do a test run of the
new hook, whereas before it would only do so for `--deploy-hook`.

---------

Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2026-01-29 16:03:20 -08:00
Jacob Hoffman-AndrewsandGitHub bd7b64f1e7 Fix HTTP01.uri for IPv6 addresses (#10548)
IPv6 addresses in URLs should be enclosed in square brackets.

Note: I chose to fix this by parsing the identifier rather than changing
the method signature. The obvious choice to change the method signature
would be to take `messages.Identifier`. We could even do this backwards
compatibly by taking `str | messages.Identifier`. However, `messages`
imports `challenges`, so referencing `messages.Identifier` here would
require an import loop.

I also considered implementing a new method on, e.g.
messages.Authorization that would take a challenge as a parameter. But
this would be suboptimal because the `uri` method really is specific to
the http-01 challenge type, so it's nice to have it implemented only on
the relevant class.
2026-01-27 20:42:52 -08:00
ohemorangeandGitHub 3b9a1d0d64 Update integration tests to account for default key type changed to ecdsa (#10546)
Fixes #10423.

In
https://github.com/certbot/certbot/pull/10409#issuecomment-3180214385,
we noted that a comment in
`certbot-ci/src/certbot_integration_tests/certbot_tests/test_main.py:test_renew_with_ec_keys`
says:

> since ecdsa is now default, the integration test is not actually
testing "When running non-interactively, if --key-type is unspecified
but the default value differs to the lineage key type, Certbot should
keep the lineage key type." as it says in the comment. To fix that, it
should be initially created with rsa, not ecdsa.

That is no longer accurate, since the default key type changed to
ecdsda.

This PR adds a new test that does what the comment specifies, and
updates the comment to reflect that the existing test no longer does
that.
2026-01-23 14:09:38 -08:00
7d6c1e7732 Clarify using.rst w.r.t. renewal config files (#10441)
Fixes #10440.

---------

Co-authored-by: ohemorange <ebportnoy@gmail.com>
2026-01-23 19:54:37 +00:00
Rüdiger OlschewskyandGitHub 041581fb33 Add dns-hetzner-cloud to list of third-party plugins (#10541) 2026-01-20 11:47:14 -08:00
Brad WarrenandGitHub f1985bb01d add link to useful convo (#10540)
i don't think the conversation at
https://github.com/certbot/certbot/pull/10495#discussion_r2699618989 is
urgent/important enough to make a github issue for it, but i also feel
like it's worth keeping a link around in case any devs have problems
with this code in the future. i think there was some good ideas in there

i don't think this PR requires two reviews
2026-01-16 13:32:45 -08:00
58724f68ec Add CLI flag --ip-address (#10495)
Co-authored-by: ohemorange <ebportnoy@gmail.com>
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
2026-01-16 13:23:41 -08:00
Brad WarrenandGitHub 1ea35193ab disable towncrier wrapping (#10538)
this PR is a follow up to my comment at
https://github.com/certbot/certbot/pull/10495#discussion_r2683527484

i dislike that jsha chose a slightly different column limit than
towncrier which caused it to generate awkwardly short lines in our
changelog. i also dislike contributors having to remember/know about
towncrier's wrapping behavior when writing changelog entries. i'd like
us to find a way to not have to worry about this

i initially looked into trying to set towncrier's line length limit to a
much higher value, but after searching around
https://towncrier.readthedocs.io/en/stable/configuration.html, i don't
think it's configurable

instead, i'm proposing here that we remove the wrapping entirely.
wrapping was added in response to the discussion at
https://github.com/certbot/certbot/pull/10379#discussion_r2243799585.
every markdown viewer i'm aware of automatically nicely handles wrapping
of long lines in markdown. most also automatically merge manually
wrapped lines to wrap based on the user's display/settings. finally,
since the changelog is automatically edited, i think it'll be rare for
certbot devs to have to manually edit the file

because of all this, i think whether the newsfragment was manually
wrapped or not is largely irrelevant, we shouldn't worry about it, and
we should let people wrap or their newsfragments or not as they see fit

i suppose alternatively we could just let towncrier double/awkwardly
wrap entries since i'm making the case that the wrapping doesn't matter,
but i personally have a slight preference for this approach. let me know
what y'all think
2026-01-16 13:15:23 -08:00
AlexisandGitHub f33a5b12b2 [DOC] Update version support policy in SECURITY.md (#10489)
Keeping the version matrix consistent with our
[policy](https://github.com/certbot/certbot/wiki/Architectural-Decision-Records-2025#-update-to-certbots-version-policy-and-end-of-life-support-on-previous-major-versions).
2026-01-16 12:59:40 -08:00
Brad WarrenandGitHub 7612d880c4 auto-ignore .DS_Store (#10539)
i'm creating this PR in response to
https://github.com/certbot/certbot/pull/10495/changes/47c5c88fe13dfaf3702a954c17db67a490781457
where ohemorange manually deleted .DS_Store on jsha's PR

rather than doing that or having new certbot devs manually configure
their system to ignore these files, let's just do it for them

i don't think this PR requires two reviews
2026-01-16 11:26:28 -08:00
Brad WarrenandGitHub d01a6db68a remove old newsfragment (#10527)
this is a quick fix for the problem i noticed at
https://github.com/certbot/certbot/issues/10526 and that issue is
tracking fixing our tooling to avoid this problem in the future

i personally don't think this PR requires two reviews
2026-01-08 14:38:08 -08:00
Brad WarrenandGitHub 28abca467b remove email address (#10533)
this is the followup from https://github.com/certbot/josepy/pull/254
doing the same thing on this repo

i personally don't think this PR needs two reviews
2026-01-07 19:03:03 +00:00
Brad WarrenandGitHub 837ff26058 try adding codeowners (#10532)
this fixes https://github.com/certbot/certbot/issues/10462 and i
personally think this is a nice change worth trying

now when people open (non-draft) PRs, one of us will automatically be
assigned hopefully helping to both automate and speed up the review
process

i personally don't think this PR requires two reviews
2026-01-07 10:47:33 -08:00
Brad WarrenandGitHub 089581cad2 update centos pyenv deps (#10529)
this PR fixes the recently nightly test failures by installing the
updated [build dependencies needed by pyenv on
centos](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)

you can see tests passing with this change at
https://dev.azure.com/certbot/certbot/_build/results?buildId=9958&view=results

fwiw, i don't think this PR requires two reviews
2026-01-05 12:40:47 -08:00
Brad WarrenandGitHub ac8ed3ba4e move san_test to test dir (#10525)
fixes https://github.com/certbot/certbot/issues/10520

i personally don't think this PR requires a second review
2025-12-17 11:44:26 -08:00
Jacob Hoffman-AndrewsandGitHub 17a1f0e114 Merge pull request #10519 from jsha/dedupe-enforce-domain-sanity
De-duplicate enforce_domain_sanity
2025-12-16 10:31:25 -08:00
Brad WarrenandGitHub fb3e95e372 make _DomainsAction an external attribute of _internal.cli.cli_utils (#10514)
as i mentioned at
https://github.com/certbot/certbot/pull/10509#discussion_r2601282033, i
didn't love how the tests were using `_DomainsAction` when i think the
leading underscore suggests the class is internal to the cli/cl_utils
module

this PR fixes that

also, i don't think this PR requires two reviews
2025-12-15 16:41:39 -08:00
Brad WarrenandGitHub 36ddada4b3 update pinned dependencies (#10516)
this fixes the dependabot alerts those with access can see at
https://github.com/certbot/certbot/security/dependabot

i don't think those alerts are particularly relevant to us, but i think
it's good for us to update anyway
2025-12-15 15:05:27 -08:00