@@ -388,6 +388,7 @@ public void EnsureCreateHttpsCertificate_ReturnsExpiredCertificateIfVersionIsInc
388388 ListCertificates ( ) ;
389389
390390 _manager . AspNetHttpsCertificateVersion = 2 ;
391+ _manager . MinimumAspNetHttpsCertificateVersion = 2 ;
391392
392393 var httpsCertificateList = _manager . ListCertificates ( StoreName . My , StoreLocation . CurrentUser , isValid : true ) ;
393394 Assert . Empty ( httpsCertificateList ) ;
@@ -400,17 +401,40 @@ public void EnsureCreateHttpsCertificate_ReturnsExpiredCertificateForEmptyVersio
400401
401402 var now = DateTimeOffset . UtcNow ;
402403 now = new DateTimeOffset ( now . Year , now . Month , now . Day , now . Hour , now . Minute , now . Second , 0 , now . Offset ) ;
404+ _manager . MinimumAspNetHttpsCertificateVersion = 0 ;
403405 _manager . AspNetHttpsCertificateVersion = 0 ;
404406 var creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
405407 Output . WriteLine ( creation . ToString ( ) ) ;
406408 ListCertificates ( ) ;
407409
408410 _manager . AspNetHttpsCertificateVersion = 1 ;
411+ _manager . MinimumAspNetHttpsCertificateVersion = 1 ;
409412
410413 var httpsCertificateList = _manager . ListCertificates ( StoreName . My , StoreLocation . CurrentUser , isValid : true ) ;
411414 Assert . Empty ( httpsCertificateList ) ;
412415 }
413416
417+ [ ConditionalFact ]
418+ [ SkipOnHelix ( "https://github.com/dotnet/aspnetcore/issues/6720" , Queues = "All.OSX" ) ]
419+ public void EnsureCreateHttpsCertificate_DoNotOverrideValidOldCertificate ( )
420+ {
421+ _fixture . CleanupCertificates ( ) ;
422+
423+ var now = DateTimeOffset . UtcNow ;
424+ now = new DateTimeOffset ( now . Year , now . Month , now . Day , now . Hour , now . Minute , now . Second , 0 , now . Offset ) ;
425+ var creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
426+ Output . WriteLine ( creation . ToString ( ) ) ;
427+ ListCertificates ( ) ;
428+
429+ // Simulate a tool with the same min version as the already existing cert but with a more
430+ // recent generation version
431+ _manager . MinimumAspNetHttpsCertificateVersion = 1 ;
432+ _manager . AspNetHttpsCertificateVersion = 2 ;
433+ var alreadyExist = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
434+ Output . WriteLine ( alreadyExist . ToString ( ) ) ;
435+ Assert . Equal ( EnsureCertificateResult . ValidCertificatePresent , alreadyExist ) ;
436+ }
437+
414438 [ ConditionalFact ]
415439 [ SkipOnHelix ( "https://github.com/dotnet/aspnetcore/issues/6720" , Queues = "All.OSX" ) ]
416440 public void EnsureCreateHttpsCertificate_ReturnsValidIfVersionIsZero ( )
@@ -419,7 +443,7 @@ public void EnsureCreateHttpsCertificate_ReturnsValidIfVersionIsZero()
419443
420444 var now = DateTimeOffset . UtcNow ;
421445 now = new DateTimeOffset ( now . Year , now . Month , now . Day , now . Hour , now . Minute , now . Second , 0 , now . Offset ) ;
422- _manager . AspNetHttpsCertificateVersion = 0 ;
446+ _manager . MinimumAspNetHttpsCertificateVersion = 0 ;
423447 var creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
424448 Output . WriteLine ( creation . ToString ( ) ) ;
425449 ListCertificates ( ) ;
@@ -441,7 +465,7 @@ public void EnsureCreateHttpsCertificate_ReturnValidIfCertIsNewer()
441465 Output . WriteLine ( creation . ToString ( ) ) ;
442466 ListCertificates ( ) ;
443467
444- _manager . AspNetHttpsCertificateVersion = 1 ;
468+ _manager . MinimumAspNetHttpsCertificateVersion = 1 ;
445469 var httpsCertificateList = _manager . ListCertificates ( StoreName . My , StoreLocation . CurrentUser , isValid : true ) ;
446470 Assert . NotEmpty ( httpsCertificateList ) ;
447471 }
@@ -455,16 +479,24 @@ public void ListCertificates_AlwaysReturnsTheCertificate_WithHighestVersion()
455479 var now = DateTimeOffset . UtcNow ;
456480 now = new DateTimeOffset ( now . Year , now . Month , now . Day , now . Hour , now . Minute , now . Second , 0 , now . Offset ) ;
457481 _manager . AspNetHttpsCertificateVersion = 1 ;
482+ _manager . MinimumAspNetHttpsCertificateVersion = 1 ;
458483 var creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
459484 Output . WriteLine ( creation . ToString ( ) ) ;
460485 ListCertificates ( ) ;
461486
462487 _manager . AspNetHttpsCertificateVersion = 2 ;
488+ _manager . MinimumAspNetHttpsCertificateVersion = 2 ;
463489 creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
464490 Output . WriteLine ( creation . ToString ( ) ) ;
465491 ListCertificates ( ) ;
466492
467- _manager . AspNetHttpsCertificateVersion = 1 ;
493+ _manager . AspNetHttpsCertificateVersion = 3 ;
494+ _manager . MinimumAspNetHttpsCertificateVersion = 3 ;
495+ creation = _manager . EnsureAspNetCoreHttpsDevelopmentCertificate ( now , now . AddYears ( 1 ) , path : null , trust : false , isInteractive : false ) ;
496+ Output . WriteLine ( creation . ToString ( ) ) ;
497+ ListCertificates ( ) ;
498+
499+ _manager . MinimumAspNetHttpsCertificateVersion = 2 ;
468500 var httpsCertificateList = _manager . ListCertificates ( StoreName . My , StoreLocation . CurrentUser , isValid : true ) ;
469501 Assert . Equal ( 2 , httpsCertificateList . Count ) ;
470502
@@ -475,13 +507,13 @@ public void ListCertificates_AlwaysReturnsTheCertificate_WithHighestVersion()
475507 firstCertificate . Extensions . OfType < X509Extension > ( ) ,
476508 e => e . Critical == false &&
477509 e . Oid . Value == CertificateManager . AspNetHttpsOid &&
478- e . RawData [ 0 ] == 2 ) ;
510+ e . RawData [ 0 ] == 3 ) ;
479511
480512 Assert . Contains (
481513 secondCertificate . Extensions . OfType < X509Extension > ( ) ,
482514 e => e . Critical == false &&
483515 e . Oid . Value == CertificateManager . AspNetHttpsOid &&
484- e . RawData [ 0 ] == 1 ) ;
516+ e . RawData [ 0 ] == 2 ) ;
485517 }
486518
487519 [ ConditionalFact ]
@@ -532,6 +564,8 @@ public CertFixture()
532564
533565 internal void CleanupCertificates ( )
534566 {
567+ Manager . MinimumAspNetHttpsCertificateVersion = 1 ;
568+ Manager . AspNetHttpsCertificateVersion = 1 ;
535569 Manager . RemoveAllCertificates ( StoreName . My , StoreLocation . CurrentUser ) ;
536570 if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) || RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
537571 {
0 commit comments