diff --git a/src/helper/Site_Letsencrypt.php b/src/helper/Site_Letsencrypt.php index 0669eaf1..80cbf0d7 100644 --- a/src/helper/Site_Letsencrypt.php +++ b/src/helper/Site_Letsencrypt.php @@ -439,7 +439,7 @@ public function request( $domain, $altNames = [], $email, $force = false ) { if ( $this->hasValidCertificate( $domain, $alternativeNames ) ) { \EE::debug( "Certificate found for $domain, executing renewal" ); - return $this->executeRenewal( $domain, $alternativeNames, $force ); + return $this->executeRenewal( $domain, $alternativeNames, $email, $force ); } \EE::debug( "No certificate found, executing first request for $domain" ); @@ -573,9 +573,10 @@ public function isRenewalNecessary( $domain ) { * * @param string $domain * @param array $alternativeNames + * @param string $email * @param bool $force */ - private function executeRenewal( $domain, array $alternativeNames, $force = false ) { + private function executeRenewal( $domain, array $alternativeNames, $email, $force = false ) { try { // Check expiration date to avoid too much renewal \EE::log( "Loading current certificate for $domain" ); @@ -615,7 +616,7 @@ private function executeRenewal( $domain, array $alternativeNames, $force = fals // Distinguished name \EE::debug( 'Loading domain distinguished name...' ); - $distinguishedName = $this->getOrCreateDistinguishedName( $domain, $alternativeNames, \EE\Utils\get_config_value( 'le-mail' ) ); + $distinguishedName = $this->getOrCreateDistinguishedName( $domain, $alternativeNames, $email ); // Order $domains = array_merge( [ $domain ], $alternativeNames ); @@ -691,6 +692,9 @@ private function getOrCreateDistinguishedName( $domain, array $alternativeNames, if ( $this->repository->hasDomainDistinguishedName( $domain ) ) { $original = $this->repository->loadDomainDistinguishedName( $domain ); + // Honor an updated le-mail on renewal; fall back to stored email only when none is passed. + $email_address = ! empty( $email ) ? $email : $original->getEmailAddress(); + $distinguishedName = new DistinguishedName( $domain, $original->getCountryName(), @@ -698,7 +702,7 @@ private function getOrCreateDistinguishedName( $domain, array $alternativeNames, $original->getLocalityName(), $original->getOrganizationName(), $original->getOrganizationalUnitName(), - $original->getEmailAddress(), + $email_address, $alternativeNames ); } else {