Conversation
executeRenewal() read le-mail from config.yml directly, so the email passed to request() (the runner config, including a --le-mail runtime override) was ignored on renewal while the first-request path used it. Pass it through instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
On renewal,
getOrCreateDistinguishedName()rebuilt the CSR's distinguished name using the stored email (from first issuance) and ignored thele-mailvalue, andexecuteRenewal()re-readle-mailfrom config.yml instead of using the email passed torequest(). So after changingle-mail, renewal CSRs and the storeddistinguished_name.jsonkept the original address. Note: Let's Encrypt drops CSR subject fields other than the CN, so the email never appears in issued certificates, and the ACME account contact is not updated by this change (that would need an account update).Fix
When a stored distinguished name exists, use the passed
$emailif it is non-empty, falling back to the stored email only when none is provided. The updated DN is persisted as before, so the new email sticks for future renewals. All other DN fields and the SAN list are unchanged.Testing
Manual: change
le-mail, force a renewal → the CSR subject andacme-conf/var/<domain>/distinguished_name.jsoncarry the new email;--le-mail=<x>onssl-renewis honoured too; with an emptyle-mail, the DN falls back to the stored address.Tested on PHP 7.4 and 8.5 by running the real renewal code against a stub ACME client and capturing the CSR (new, runtime and empty emails), and on Ubuntu 26.04 with EasyEngine 4.12.0 for regressions (self-signed create,
ssl-renew --all,ssl-renewon a non-LE site).