@@ -241,7 +241,7 @@ private async Task PerformCertificateStatusChecks(CancellationToken cancelToken,
241241 }
242242 else
243243 {
244- if ( ocspCheck != Models . Certify . Models . CertificateStatusType . TryLater )
244+ if ( ocspCheck != Models . Certify . Models . CertificateStatusType . TryLater && ocspCheck != Models . Certify . Models . CertificateStatusType . OcspNotSupported )
245245 {
246246 completedOcspUpdateChecks . Add ( item . Id ) ;
247247 }
@@ -271,88 +271,96 @@ private async Task PerformCertificateStatusChecks(CancellationToken cancelToken,
271271 break ;
272272 }
273273
274- try
274+ if ( item . CertificateRevoked || item . DateExpiry < DateTimeOffset . UtcNow )
275275 {
276- var caAccount = await GetAccountDetails ( item , allowFailover : false , isResumedOrder : true ) ;
277- var provider = await GetACMEProvider ( item , caAccount ) ;
278-
279- if ( provider != null )
276+ // skip items that are already revoked or expired
277+ _serviceLog . Warning ( "Skipping renewal info check for item which is no longer valid: {itemName}" , item . Name ) ;
278+ }
279+ else
280+ {
281+ try
280282 {
281- var providerKey = provider . GetAcmeBaseURI ( ) ;
282- directoryInfoCache . TryGetValue ( providerKey , out var directoryInfo ) ;
283+ var caAccount = await GetAccountDetails ( item , allowFailover : false , isResumedOrder : true ) ;
284+ var provider = await GetACMEProvider ( item , caAccount ) ;
283285
284- if ( directoryInfo = = null )
286+ if ( provider ! = null )
285287 {
286- directoryInfo = await provider ? . GetAcmeDirectory ( ) ;
288+ var providerKey = provider . GetAcmeBaseURI ( ) ;
289+ directoryInfoCache . TryGetValue ( providerKey , out var directoryInfo ) ;
287290
288- if ( directoryInfo != null && directoryInfo . NewAccount ! = null )
291+ if ( directoryInfo = = null )
289292 {
290- try
293+ directoryInfo = await provider ? . GetAcmeDirectory ( ) ;
294+
295+ if ( directoryInfo != null && directoryInfo . NewAccount != null )
291296 {
292- directoryInfoCache . Add ( providerKey , directoryInfo ) ;
297+ try
298+ {
299+ directoryInfoCache . Add ( providerKey , directoryInfo ) ;
300+ }
301+ catch { }
293302 }
294- catch { }
295303 }
296- }
297-
298- if ( directoryInfo ? . RenewalInfo != null && ! string . IsNullOrWhiteSpace ( item . CertificateThumbprintHash ) )
299- {
300- _serviceLog . Verbose ( $ "Checking renewal info for { item . Name } ") ;
301304
302- if ( item . ARICertificateId != null && ! item . ARICertificateId . Contains ( "." ) )
305+ if ( directoryInfo ? . RenewalInfo != null && ! string . IsNullOrWhiteSpace ( item . CertificateThumbprintHash ) )
303306 {
304- // ARI certificate ID not current format, will need to be recomputed.
305- item . ARICertificateId = null ;
306- }
307+ _serviceLog . Verbose ( $ "Checking renewal info for { item . Name } ") ;
308+
309+ if ( item . ARICertificateId != null && ! item . ARICertificateId . Contains ( "." ) )
310+ {
311+ // ARI certificate ID not current format, will need to be recomputed.
312+ item . ARICertificateId = null ;
313+ }
307314
308315#if NET9_0_OR_GREATER
309316 var x509Cert2 = System . Security . Cryptography . X509Certificates . X509CertificateLoader . LoadPkcs12FromFile ( item . CertificatePath , await GetPfxPassword ( item ) ) ;
310317#else
311- var x509Cert2 = new System . Security . Cryptography . X509Certificates . X509Certificate2 ( File . ReadAllBytes ( item . CertificatePath ) , await GetPfxPassword ( item ) ) ;
318+ var x509Cert2 = new System . Security . Cryptography . X509Certificates . X509Certificate2 ( File . ReadAllBytes ( item . CertificatePath ) , await GetPfxPassword ( item ) ) ;
312319#endif
313- var ariCertId = item . ARICertificateId ?? Certify . Shared . Core . Utils . PKI . CertUtils . GetARICertIdBase64 ( x509Cert2 ) ;
314- var info = await provider . GetRenewalInfo ( ariCertId ) ;
320+ var ariCertId = item . ARICertificateId ?? Certify . Shared . Core . Utils . PKI . CertUtils . GetARICertIdBase64 ( x509Cert2 ) ;
321+ var info = await provider . GetRenewalInfo ( ariCertId ) ;
315322
316- var nextRenewal = ManagedCertificate . CalculateNextRenewalAttempt ( item , CoreAppSettings . Current . RenewalIntervalDays , CoreAppSettings . Current . RenewalIntervalMode ?? RenewalIntervalModes . DaysAfterLastRenewal ) ;
323+ var nextRenewal = ManagedCertificate . CalculateNextRenewalAttempt ( item , CoreAppSettings . Current . RenewalIntervalDays , CoreAppSettings . Current . RenewalIntervalMode ?? RenewalIntervalModes . DaysAfterLastRenewal ) ;
317324
318- if ( info != null && nextRenewal ? . DateNextRenewalAttempt != null )
319- {
320- // if planned next renewal is beyond the suggested window, set new scheduled renewal date. This allows the user to prefer their own earlier renewal but lets the CA suggest that an even earlier renewal is required (e.g. revocation)
321- // in the future would could add a pref for the user to "Let the CA decide when best to renew" in order to more strictly keep the renewal within the "suggested" window.
322- if ( nextRenewal . DateNextRenewalAttempt > info . SuggestedWindow ? . Start || nextRenewal ? . DateNextRenewalAttempt > info . SuggestedWindow ? . End )
325+ if ( info != null && nextRenewal ? . DateNextRenewalAttempt != null )
323326 {
324- var dateSpan = info . SuggestedWindow . End - info . SuggestedWindow . Start ;
325- var randomMinsInSlot = new Random ( ) . Next ( ( int ) dateSpan . Value . TotalMinutes ) ;
326-
327- var scheduledRenewalDate = info . SuggestedWindow ? . Start . Value . AddMinutes ( randomMinsInSlot ) ?? nextRenewal . DateNextRenewalAttempt ;
328-
329- if ( scheduledRenewalDate . HasValue )
327+ // if planned next renewal is beyond the suggested window, set new scheduled renewal date. This allows the user to prefer their own earlier renewal but lets the CA suggest that an even earlier renewal is required (e.g. revocation)
328+ // in the future would could add a pref for the user to "Let the CA decide when best to renew" in order to more strictly keep the renewal within the "suggested" window.
329+ if ( nextRenewal . DateNextRenewalAttempt > info . SuggestedWindow ? . Start || nextRenewal ? . DateNextRenewalAttempt > info . SuggestedWindow ? . End )
330330 {
331- _serviceLog . Information ( $ "Random renewal date { scheduledRenewalDate } within ARI renewal window [{ info . SuggestedWindow ? . Start } to { info . SuggestedWindow ? . End } ] has been set for { item . Name } ") ;
331+ var dateSpan = info . SuggestedWindow . End - info . SuggestedWindow . Start ;
332+ var randomMinsInSlot = new Random ( ) . Next ( ( int ) dateSpan . Value . TotalMinutes ) ;
332333
333- itemsViaARI . Add ( item . Id , scheduledRenewalDate . Value ) ;
334+ var scheduledRenewalDate = info . SuggestedWindow ? . Start . Value . AddMinutes ( randomMinsInSlot ) ?? nextRenewal . DateNextRenewalAttempt ;
334335
335- if ( scheduledRenewalDate < DateTimeOffset . Now )
336+ if ( scheduledRenewalDate . HasValue )
336337 {
337- // item requires immediate renewal
338- if ( ! itemsWhichRequireRenewal . Contains ( item . Id ) )
338+ _serviceLog . Information ( $ "Random renewal date { scheduledRenewalDate } within ARI renewal window [{ info . SuggestedWindow ? . Start } to { info . SuggestedWindow ? . End } ] has been set for { item . Name } ") ;
339+
340+ itemsViaARI . Add ( item . Id , scheduledRenewalDate . Value ) ;
341+
342+ if ( scheduledRenewalDate < DateTimeOffset . Now )
339343 {
340- itemsWhichRequireRenewal . Add ( item . Id ) ;
344+ // item requires immediate renewal
345+ if ( ! itemsWhichRequireRenewal . Contains ( item . Id ) )
346+ {
347+ itemsWhichRequireRenewal . Add ( item . Id ) ;
348+ }
341349 }
342350 }
343351 }
344352 }
345- }
346- else
347- {
348- _serviceLog . Verbose ( $ "Renewal info unavailable or not supported for { item . Name } " ) ;
353+ else
354+ {
355+ _serviceLog . Verbose ( $ "Renewal info unavailable or not supported for { item . Name } " ) ;
356+ }
349357 }
350358 }
351359 }
352- }
353- catch ( Exception ex )
354- {
355- _serviceLog . Warning ( "Failed to perform renewal info check for {itemName} : {ex}" , item . Name , ex ) ;
360+ catch ( Exception ex )
361+ {
362+ _serviceLog . Warning ( "Failed to perform renewal info check for {itemName} : {ex}" , item . Name , ex ) ;
363+ }
356364 }
357365
358366 completedRenewalInfoChecks . Add ( item . Id ) ;
0 commit comments