@@ -28,6 +28,7 @@ public class SslStoreCaProxy : IAnyCAPlugin
2828 public string PartnerCode { get ; set ; }
2929 public string AuthenticationToken { get ; set ; }
3030 public int PageSize { get ; set ; }
31+ public int RenewalWindow { get ; set ; }
3132
3233 public void Initialize ( IAnyCAPluginConfigProvider configProvider , ICertificateDataReader certificateDataReader )
3334 {
@@ -42,6 +43,7 @@ public void Initialize(IAnyCAPluginConfigProvider configProvider, ICertificateDa
4243 PartnerCode = _config . PartnerCode ;
4344 AuthenticationToken = _config . AuthToken ;
4445 PageSize = _config . PageSize > 0 ? _config . PageSize : SslStoreCAPluginConfig . DefaultPageSize ;
46+ RenewalWindow = _config . RenewalWindow > 0 ? _config . RenewalWindow : 30 ;
4547
4648 _requestManager = new RequestManager ( this ) ;
4749
@@ -245,16 +247,32 @@ public async Task<EnrollmentResult> Enroll(string csr, string subject, Dictionar
245247 var orderStatusResponse = await client . SubmitOrderStatusRequestAsync ( orderStatusRequest ) ;
246248 _logger . LogTrace ( $ "orderStatusResponse JSON { JsonConvert . SerializeObject ( orderStatusResponse ) } ") ;
247249
248- // Try renewal first, fall back to reissue
249- var renewRequest = _requestManager . GetRenewalRequest ( orderStatusResponse , csr ) ;
250- _logger . LogTrace ( $ "renewRequest JSON { JsonConvert . SerializeObject ( renewRequest ) } ") ;
250+ // Determine renewal vs reissue based on order expiry and RenewalWindow
251+ var shouldRenew = false ;
252+ if ( DateTime . TryParse ( orderStatusResponse . OrderExpiryDateInUtc , out var orderExpiry ) )
253+ {
254+ var daysUntilOrderExpiry = ( orderExpiry - DateTime . UtcNow ) . TotalDays ;
255+ _logger . LogTrace ( $ "Order expiry: { orderExpiry : u} , days remaining: { daysUntilOrderExpiry : F0} , renewal window: { RenewalWindow } days") ;
256+ shouldRenew = daysUntilOrderExpiry <= RenewalWindow ;
257+ }
258+ else
259+ {
260+ _logger . LogWarning ( $ "Could not parse OrderExpiryDateInUTC '{ orderStatusResponse . OrderExpiryDateInUtc } ', defaulting to renewal") ;
261+ shouldRenew = true ;
262+ }
251263
252- enrollmentResponse = await client . SubmitRenewRequestAsync ( renewRequest ) ;
253- _logger . LogTrace ( $ "enrollmentResponse JSON { JsonConvert . SerializeObject ( enrollmentResponse ) } ") ;
264+ if ( shouldRenew )
265+ {
266+ _logger . LogTrace ( "Order is within renewal window, performing renewal (new order)..." ) ;
267+ var renewRequest = _requestManager . GetRenewalRequest ( orderStatusResponse , csr ) ;
268+ _logger . LogTrace ( $ "renewRequest JSON { JsonConvert . SerializeObject ( renewRequest ) } ") ;
254269
255- if ( enrollmentResponse != null && enrollmentResponse . AuthResponse != null && enrollmentResponse . AuthResponse . IsError )
270+ enrollmentResponse = await client . SubmitRenewRequestAsync ( renewRequest ) ;
271+ _logger . LogTrace ( $ "enrollmentResponse JSON { JsonConvert . SerializeObject ( enrollmentResponse ) } ") ;
272+ }
273+ else
256274 {
257- _logger . LogTrace ( "Renewal failed, attempting reissue..." ) ;
275+ _logger . LogTrace ( "Order has life remaining, performing reissue (same order) ..." ) ;
258276 var reIssueRequest = _requestManager . GetReIssueRequest ( orderStatusResponse , csr , false ) ;
259277 _logger . LogTrace ( $ "reIssueRequest JSON { JsonConvert . SerializeObject ( reIssueRequest ) } ") ;
260278
0 commit comments