all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
@ 2026-04-21 14:46 Manuel Federanko
  2026-04-22  6:49 ` Christian Ebner
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Manuel Federanko @ 2026-04-21 14:46 UTC (permalink / raw)
  To: pbs-devel

Start renewing a certificate once 2/3 of its total lifetime have passed,
instead of the hardcoded 30 days. This stays consistent with many
certificates, which are valid for 90 days.

The update service runs daily, impose a 3 day minimum remaining lifetime
to still be able to handle transient failures for certificate renewals.

Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
---
 src/api2/node/certificates.rs          | 21 +++++++++++++++++++--
 src/bin/proxmox-daily-update.rs        |  3 ++-
 src/bin/proxmox_backup_manager/acme.rs |  3 ++-
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/api2/node/certificates.rs b/src/api2/node/certificates.rs
index a69f6511..6e7b3326 100644
--- a/src/api2/node/certificates.rs
+++ b/src/api2/node/certificates.rs
@@ -306,16 +306,33 @@ pub fn new_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<Str
 /// parameter is set).
 pub fn renew_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<String, Error> {
     if !cert_expires_soon()? && !force {
-        bail!("Certificate does not expire within the next 30 days and 'force' is not set.")
+        let lead = cert_renew_lead_time()? / (24 * 60 * 60);
+        bail!("Certificate does not expire within the next {lead} days and 'force' is not set.")
     }
 
     spawn_certificate_worker("acme-renew-cert", force, rpcenv)
 }
 
+/// When to start checking for new certs.
+pub fn cert_renew_lead_time() -> Result<i64, Error> {
+    let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
+    if let (Some(notafter), Some(notbefore)) =
+        (cert.not_after_unix().ok(), cert.not_before_unix().ok())
+    {
+        // gets usually checked every day by the daily-update service,
+        // start checking at least 3 days before expiry
+        let lifetime = notafter - notbefore;
+        let lead = std::cmp::max(lifetime / 3, 3 * 24 * 60 * 60);
+        Ok(lead)
+    } else {
+        Ok(30 * 24 * 60 * 60)
+    }
+}
+
 /// Check whether the current certificate expires within the next 30 days.
 pub fn cert_expires_soon() -> Result<bool, Error> {
     let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
-    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + 30 * 24 * 60 * 60)
+    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + cert_renew_lead_time()?)
         .map_err(|err| format_err!("Failed to check certificate expiration date: {}", err))
 }
 
diff --git a/src/bin/proxmox-daily-update.rs b/src/bin/proxmox-daily-update.rs
index c4d68e30..e5e96eb9 100644
--- a/src/bin/proxmox-daily-update.rs
+++ b/src/bin/proxmox-daily-update.rs
@@ -75,7 +75,8 @@ async fn check_acme_certificates(rpcenv: &mut dyn RpcEnvironment) -> Result<(),
     }
 
     if !api2::node::certificates::cert_expires_soon()? {
-        log::info!("Certificate does not expire within the next 30 days, not renewing.");
+        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
+        log::info!("Certificate does not expire within the next {lead} days, not renewing.");
         return Ok(());
     }
 
diff --git a/src/bin/proxmox_backup_manager/acme.rs b/src/bin/proxmox_backup_manager/acme.rs
index 57431225..d1a2323f 100644
--- a/src/bin/proxmox_backup_manager/acme.rs
+++ b/src/bin/proxmox_backup_manager/acme.rs
@@ -415,7 +415,8 @@ pub fn plugin_cli() -> CommandLineInterface {
 async fn order_acme_cert(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
     if !param["force"].as_bool().unwrap_or(false) && !api2::node::certificates::cert_expires_soon()?
     {
-        println!("Certificate does not expire within the next 30 days, not renewing.");
+        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
+        println!("Certificate does not expire within the next {lead} days, not renewing.");
         return Ok(());
     }
 
-- 
2.47.3




^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-21 14:46 [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime Manuel Federanko
@ 2026-04-22  6:49 ` Christian Ebner
  2026-04-22  9:10   ` Shannon Sterz
  2026-04-22  9:10 ` Shannon Sterz
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Christian Ebner @ 2026-04-22  6:49 UTC (permalink / raw)
  To: Manuel Federanko, pbs-devel

On 4/21/26 4:45 PM, Manuel Federanko wrote:
> Start renewing a certificate once 2/3 of its total lifetime have passed,
> instead of the hardcoded 30 days. This stays consistent with many
> certificates, which are valid for 90 days.
> 
> The update service runs daily, impose a 3 day minimum remaining lifetime
> to still be able to handle transient failures for certificate renewals.
> 
> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
> ---

@Shannon, can you have a look at this to avoid potential conflicts with 
your TLS certificate rotation series [0]?

[0] 
https://lore.proxmox.com/pbs-devel/20260407135714.490747-1-s.sterz@proxmox.com/T/#t




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-21 14:46 [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime Manuel Federanko
  2026-04-22  6:49 ` Christian Ebner
@ 2026-04-22  9:10 ` Shannon Sterz
  2026-04-22  9:15   ` Manuel Federanko
  2026-04-23 13:48 ` superseded: " Manuel Federanko
  2026-04-23 18:57 ` applied: " Thomas Lamprecht
  3 siblings, 1 reply; 8+ messages in thread
From: Shannon Sterz @ 2026-04-22  9:10 UTC (permalink / raw)
  To: Manuel Federanko, pbs-devel

On Tue Apr 21, 2026 at 4:46 PM CEST, Manuel Federanko wrote:
> Start renewing a certificate once 2/3 of its total lifetime have passed,
> instead of the hardcoded 30 days. This stays consistent with many
> certificates, which are valid for 90 days.
>
> The update service runs daily, impose a 3 day minimum remaining lifetime
> to still be able to handle transient failures for certificate renewals.
>
> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
> ---
>  src/api2/node/certificates.rs          | 21 +++++++++++++++++++--
>  src/bin/proxmox-daily-update.rs        |  3 ++-
>  src/bin/proxmox_backup_manager/acme.rs |  3 ++-
>  3 files changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/src/api2/node/certificates.rs b/src/api2/node/certificates.rs
> index a69f6511..6e7b3326 100644
> --- a/src/api2/node/certificates.rs
> +++ b/src/api2/node/certificates.rs
> @@ -306,16 +306,33 @@ pub fn new_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<Str
>  /// parameter is set).
>  pub fn renew_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<String, Error> {
>      if !cert_expires_soon()? && !force {
> -        bail!("Certificate does not expire within the next 30 days and 'force' is not set.")
> +        let lead = cert_renew_lead_time()? / (24 * 60 * 60);
> +        bail!("Certificate does not expire within the next {lead} days and 'force' is not set.")
>      }
>
>      spawn_certificate_worker("acme-renew-cert", force, rpcenv)
>  }
>
> +/// When to start checking for new certs.
> +pub fn cert_renew_lead_time() -> Result<i64, Error> {
> +    let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
> +    if let (Some(notafter), Some(notbefore)) =
> +        (cert.not_after_unix().ok(), cert.not_before_unix().ok())

no need to convert between `Option` and `Result` here. simply do:

    if let (Ok(notafter), Ok(notbefore)) = (cert.not_after_unix(), cert.not_before_unix()) {

here :)

> +    {
> +        // gets usually checked every day by the daily-update service,
> +        // start checking at least 3 days before expiry
> +        let lifetime = notafter - notbefore;
> +        let lead = std::cmp::max(lifetime / 3, 3 * 24 * 60 * 60);

i talked to Fabian a bit and we came to the following consensus
regarding the 3 day cut-off here. this function should probably just
encode the lead time itself, not the 3 day cut off as that is an
artifact of how we refresh acme certificates in the daily-update task.
essentially the plan is to have this function return the lead time as
follows:

1. for short-lived certificates (< 10 days) the lead time should be half
   of the lifetime of the certificate [1].
2. for other certificates the lead time should be 1/3 of the
   certificates lifetime [2].

this is based on recommendations by let's encrypt [1,2]. for
ultra-short-lived certificates, however, the daily update service will
only have very limited chances to successfully renew the certificate,
since it will only run once a day. hence, the 3 day cut-off should be
moved to the daily update service. the service should check the validity
of the certificate with the 3 day cut-off in mind. it should then call
the acme renewal endpoint with the `force` parameter set to `true` to
by-pass the validity check based on the lead time outlined above. does
that make sense?

[1]: https://letsencrypt.org/docs/integration-guide/
[2]: https://letsencrypt.org/2025/12/02/from-90-to-45#action-required

> +        Ok(lead)
> +    } else {
> +        Ok(30 * 24 * 60 * 60)
> +    }

tiny nit: imo it might be a bit cleaner to do `return Ok(lead)` in the
if branch above, drop the else and return `Ok(30 * 24 * 60 * 60)` by
default.

> +}
> +
>  /// Check whether the current certificate expires within the next 30 days.
>  pub fn cert_expires_soon() -> Result<bool, Error> {
>      let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
> -    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + 30 * 24 * 60 * 60)
> +    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + cert_renew_lead_time()?)
>          .map_err(|err| format_err!("Failed to check certificate expiration date: {}", err))
>  }
>
> diff --git a/src/bin/proxmox-daily-update.rs b/src/bin/proxmox-daily-update.rs
> index c4d68e30..e5e96eb9 100644
> --- a/src/bin/proxmox-daily-update.rs
> +++ b/src/bin/proxmox-daily-update.rs
> @@ -75,7 +75,8 @@ async fn check_acme_certificates(rpcenv: &mut dyn RpcEnvironment) -> Result<(),
>      }
>
>      if !api2::node::certificates::cert_expires_soon()? {
> -        log::info!("Certificate does not expire within the next 30 days, not renewing.");
> +        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
> +        log::info!("Certificate does not expire within the next {lead} days, not renewing.");
>          return Ok(());
>      }
>
> diff --git a/src/bin/proxmox_backup_manager/acme.rs b/src/bin/proxmox_backup_manager/acme.rs
> index 57431225..d1a2323f 100644
> --- a/src/bin/proxmox_backup_manager/acme.rs
> +++ b/src/bin/proxmox_backup_manager/acme.rs
> @@ -415,7 +415,8 @@ pub fn plugin_cli() -> CommandLineInterface {
>  async fn order_acme_cert(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
>      if !param["force"].as_bool().unwrap_or(false) && !api2::node::certificates::cert_expires_soon()?
>      {
> -        println!("Certificate does not expire within the next 30 days, not renewing.");
> +        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
> +        println!("Certificate does not expire within the next {lead} days, not renewing.");
>          return Ok(());
>      }
>






^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-22  6:49 ` Christian Ebner
@ 2026-04-22  9:10   ` Shannon Sterz
  2026-04-22  9:18     ` Manuel Federanko
  0 siblings, 1 reply; 8+ messages in thread
From: Shannon Sterz @ 2026-04-22  9:10 UTC (permalink / raw)
  To: Christian Ebner, Manuel Federanko, pbs-devel

On Wed Apr 22, 2026 at 8:49 AM CEST, Christian Ebner wrote:
> On 4/21/26 4:45 PM, Manuel Federanko wrote:
>> Start renewing a certificate once 2/3 of its total lifetime have passed,
>> instead of the hardcoded 30 days. This stays consistent with many
>> certificates, which are valid for 90 days.
>>
>> The update service runs daily, impose a 3 day minimum remaining lifetime
>> to still be able to handle transient failures for certificate renewals.
>>
>> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
>> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
>> ---
>
> @Shannon, can you have a look at this to avoid potential conflicts with
> your TLS certificate rotation series [0]?
>
> [0]
> https://lore.proxmox.com/pbs-devel/20260407135714.490747-1-s.sterz@proxmox.com/T/#t

thanks for the heads-up, but from what i can tell not really. this
series addresses acme certificates, whereas mine is only relevant for
the self-signed certificates that pbs & pdm fall back on by default. imo
it would make sense to have these changes expand to include pdm too,
tho.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-22  9:10 ` Shannon Sterz
@ 2026-04-22  9:15   ` Manuel Federanko
  0 siblings, 0 replies; 8+ messages in thread
From: Manuel Federanko @ 2026-04-22  9:15 UTC (permalink / raw)
  To: Shannon Sterz, pbs-devel

On 2026-04-22 11:08 AM, Shannon Sterz wrote:
> On Tue Apr 21, 2026 at 4:46 PM CEST, Manuel Federanko wrote:
>> Start renewing a certificate once 2/3 of its total lifetime have passed,
>> instead of the hardcoded 30 days. This stays consistent with many
>> certificates, which are valid for 90 days.
>>
>> The update service runs daily, impose a 3 day minimum remaining lifetime
>> to still be able to handle transient failures for certificate renewals.
>>
>> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
>> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
>> ---
>>  src/api2/node/certificates.rs          | 21 +++++++++++++++++++--
>>  src/bin/proxmox-daily-update.rs        |  3 ++-
>>  src/bin/proxmox_backup_manager/acme.rs |  3 ++-
>>  3 files changed, 23 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/api2/node/certificates.rs b/src/api2/node/certificates.rs
>> index a69f6511..6e7b3326 100644
>> --- a/src/api2/node/certificates.rs
>> +++ b/src/api2/node/certificates.rs
>> @@ -306,16 +306,33 @@ pub fn new_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<Str
>>  /// parameter is set).
>>  pub fn renew_acme_cert(force: bool, rpcenv: &mut dyn RpcEnvironment) -> Result<String, Error> {
>>      if !cert_expires_soon()? && !force {
>> -        bail!("Certificate does not expire within the next 30 days and 'force' is not set.")
>> +        let lead = cert_renew_lead_time()? / (24 * 60 * 60);
>> +        bail!("Certificate does not expire within the next {lead} days and 'force' is not set.")
>>      }
>>
>>      spawn_certificate_worker("acme-renew-cert", force, rpcenv)
>>  }
>>
>> +/// When to start checking for new certs.
>> +pub fn cert_renew_lead_time() -> Result<i64, Error> {
>> +    let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
>> +    if let (Some(notafter), Some(notbefore)) =
>> +        (cert.not_after_unix().ok(), cert.not_before_unix().ok())
> 
> no need to convert between `Option` and `Result` here. simply do:
> 
>     if let (Ok(notafter), Ok(notbefore)) = (cert.not_after_unix(), cert.not_before_unix()) {
> 
> here :)

right, that makes sense. Will change in v2

>> +    {
>> +        // gets usually checked every day by the daily-update service,
>> +        // start checking at least 3 days before expiry
>> +        let lifetime = notafter - notbefore;
>> +        let lead = std::cmp::max(lifetime / 3, 3 * 24 * 60 * 60);
> 
> i talked to Fabian a bit and we came to the following consensus
> regarding the 3 day cut-off here. this function should probably just
> encode the lead time itself, not the 3 day cut off as that is an
> artifact of how we refresh acme certificates in the daily-update task.
> essentially the plan is to have this function return the lead time as
> follows:
> 
> 1. for short-lived certificates (< 10 days) the lead time should be half
>    of the lifetime of the certificate [1].
> 2. for other certificates the lead time should be 1/3 of the
>    certificates lifetime [2].
> 
> this is based on recommendations by let's encrypt [1,2]. for
> ultra-short-lived certificates, however, the daily update service will
> only have very limited chances to successfully renew the certificate,
> since it will only run once a day. hence, the 3 day cut-off should be
> moved to the daily update service. the service should check the validity
> of the certificate with the 3 day cut-off in mind. it should then call
> the acme renewal endpoint with the `force` parameter set to `true` to
> by-pass the validity check based on the lead time outlined above. does
> that make sense?
> 
> [1]: https://letsencrypt.org/docs/integration-guide/
> [2]: https://letsencrypt.org/2025/12/02/from-90-to-45#action-required
> 
>> +        Ok(lead)
>> +    } else {
>> +        Ok(30 * 24 * 60 * 60)
>> +    }
> 
> tiny nit: imo it might be a bit cleaner to do `return Ok(lead)` in the
> if branch above, drop the else and return `Ok(30 * 24 * 60 * 60)` by
> default.

ack, will change in v2

>> +}
>> +
>>  /// Check whether the current certificate expires within the next 30 days.
>>  pub fn cert_expires_soon() -> Result<bool, Error> {
>>      let cert = pem_to_cert_info(get_certificate_pem()?.as_bytes())?;
>> -    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + 30 * 24 * 60 * 60)
>> +    cert.is_expired_after_epoch(proxmox_time::epoch_i64() + cert_renew_lead_time()?)
>>          .map_err(|err| format_err!("Failed to check certificate expiration date: {}", err))
>>  }
>>
>> diff --git a/src/bin/proxmox-daily-update.rs b/src/bin/proxmox-daily-update.rs
>> index c4d68e30..e5e96eb9 100644
>> --- a/src/bin/proxmox-daily-update.rs
>> +++ b/src/bin/proxmox-daily-update.rs
>> @@ -75,7 +75,8 @@ async fn check_acme_certificates(rpcenv: &mut dyn RpcEnvironment) -> Result<(),
>>      }
>>
>>      if !api2::node::certificates::cert_expires_soon()? {
>> -        log::info!("Certificate does not expire within the next 30 days, not renewing.");
>> +        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
>> +        log::info!("Certificate does not expire within the next {lead} days, not renewing.");
>>          return Ok(());
>>      }
>>
>> diff --git a/src/bin/proxmox_backup_manager/acme.rs b/src/bin/proxmox_backup_manager/acme.rs
>> index 57431225..d1a2323f 100644
>> --- a/src/bin/proxmox_backup_manager/acme.rs
>> +++ b/src/bin/proxmox_backup_manager/acme.rs
>> @@ -415,7 +415,8 @@ pub fn plugin_cli() -> CommandLineInterface {
>>  async fn order_acme_cert(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
>>      if !param["force"].as_bool().unwrap_or(false) && !api2::node::certificates::cert_expires_soon()?
>>      {
>> -        println!("Certificate does not expire within the next 30 days, not renewing.");
>> +        let lead = api2::node::certificates::cert_renew_lead_time()? / (24 * 60 * 60);
>> +        println!("Certificate does not expire within the next {lead} days, not renewing.");
>>          return Ok(());
>>      }
>>
> 
> 




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-22  9:10   ` Shannon Sterz
@ 2026-04-22  9:18     ` Manuel Federanko
  0 siblings, 0 replies; 8+ messages in thread
From: Manuel Federanko @ 2026-04-22  9:18 UTC (permalink / raw)
  To: Shannon Sterz, Christian Ebner, pbs-devel

On 2026-04-22 11:08 AM, Shannon Sterz wrote:
> On Wed Apr 22, 2026 at 8:49 AM CEST, Christian Ebner wrote:
>> On 4/21/26 4:45 PM, Manuel Federanko wrote:
>>> Start renewing a certificate once 2/3 of its total lifetime have passed,
>>> instead of the hardcoded 30 days. This stays consistent with many
>>> certificates, which are valid for 90 days.
>>>
>>> The update service runs daily, impose a 3 day minimum remaining lifetime
>>> to still be able to handle transient failures for certificate renewals.
>>>
>>> Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
>>> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6372
>>> ---
>>
>> @Shannon, can you have a look at this to avoid potential conflicts with
>> your TLS certificate rotation series [0]?
>>
>> [0]
>> https://lore.proxmox.com/pbs-devel/20260407135714.490747-1-s.sterz@proxmox.com/T/#t
> 
> thanks for the heads-up, but from what i can tell not really. this
> series addresses acme certificates, whereas mine is only relevant for
> the self-signed certificates that pbs & pdm fall back on by default. imo
> it would make sense to have these changes expand to include pdm too,
> tho.
Thanks for the input. I will also include this in PDM.
I'm currently working on ARI, so this might change anyways, though I think it is
still valuable until ARI is implemented, also, not all CAs support ARI.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* superseded: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-21 14:46 [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime Manuel Federanko
  2026-04-22  6:49 ` Christian Ebner
  2026-04-22  9:10 ` Shannon Sterz
@ 2026-04-23 13:48 ` Manuel Federanko
  2026-04-23 18:57 ` applied: " Thomas Lamprecht
  3 siblings, 0 replies; 8+ messages in thread
From: Manuel Federanko @ 2026-04-23 13:48 UTC (permalink / raw)
  To: pbs-devel

Superseded-by: https://lore.proxmox.com/pbs-devel/20260423134607.105229-2-m.federanko@proxmox.com/




^ permalink raw reply	[flat|nested] 8+ messages in thread

* applied: [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime
  2026-04-21 14:46 [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime Manuel Federanko
                   ` (2 preceding siblings ...)
  2026-04-23 13:48 ` superseded: " Manuel Federanko
@ 2026-04-23 18:57 ` Thomas Lamprecht
  3 siblings, 0 replies; 8+ messages in thread
From: Thomas Lamprecht @ 2026-04-23 18:57 UTC (permalink / raw)
  To: pbs-devel, Manuel Federanko

On Tue, 21 Apr 2026 16:46:45 +0200, Manuel Federanko wrote:
> Start renewing a certificate once 2/3 of its total lifetime have passed,
> instead of the hardcoded 30 days. This stays consistent with many
> certificates, which are valid for 90 days.
> 
> The update service runs daily, impose a 3 day minimum remaining lifetime
> to still be able to handle transient failures for certificate renewals.
> 
> [...]

Applied with a small set of mostly cosmetic follow-ups on top, thanks!

[1/1] acme: partially fix #6372: scale certificate renewal checks by lifetime
      commit: 29bd6b89ca3b3d33e89bd0277daf46b39b210273




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-04-23 18:58 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-21 14:46 [PATCH proxmox-backup] acme: partially fix #6372: scale certificate renewal checks by lifetime Manuel Federanko
2026-04-22  6:49 ` Christian Ebner
2026-04-22  9:10   ` Shannon Sterz
2026-04-22  9:18     ` Manuel Federanko
2026-04-22  9:10 ` Shannon Sterz
2026-04-22  9:15   ` Manuel Federanko
2026-04-23 13:48 ` superseded: " Manuel Federanko
2026-04-23 18:57 ` applied: " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal