@@ -308,7 +308,7 @@ protected virtual void RunSign(StatusContext statusContext, X509Certificate2Coll
308308 Logger . LogDebug ( "Verifying certificate {cert}" , cert ) ;
309309 statusContext . Status ( "[yellow]Verifying Certificate[/]" ) ;
310310
311- bool verifyCert = VerifyCertificate ( cert ) ;
311+ bool verifyCert = VerifyCertificate ( cert , false ) ;
312312 if ( ! verifyCert )
313313 {
314314 Logger . LogWarning ( "Skipping signing with {cert}" , cert ) ;
@@ -355,7 +355,8 @@ protected virtual void RunSign(StatusContext statusContext, X509Certificate2Coll
355355 /// Runs the verify command.
356356 /// </summary>
357357 /// <param name="statusContext">The status context for interacting with <see cref="AnsiConsole.Status"/>.</param>
358- protected virtual void RunVerify ( StatusContext statusContext )
358+ /// <param name="ignoreTime">A value indicating whether to ignore time validity checks for certificate verification.</param>
359+ protected virtual void RunVerify ( StatusContext statusContext , bool ignoreTime )
359360 {
360361 Logger . LogInformation ( "Running verify command" ) ;
361362
@@ -391,7 +392,7 @@ protected virtual void RunVerify(StatusContext statusContext)
391392 Logger . LogDebug ( "Verifying certificate {cert}" , certificate ) ;
392393 AnsiConsole . MarkupLine ( $ "Verifying Certificate [{ Color . Teal } ]{ certificate . GetNameInfo ( X509NameType . SimpleName , false ) } [/] Issued by [{ Color . Aqua } ]{ certificate . GetNameInfo ( X509NameType . SimpleName , true ) } [/]") ;
393394
394- bool verifyCert = VerifyCertificate ( certificate ) ;
395+ bool verifyCert = VerifyCertificate ( certificate , ignoreTime ) ;
395396 if ( ! verifyCert )
396397 {
397398 Logger . LogWarning ( "Skipping signature verification for {cert}" , certificate ) ;
@@ -516,30 +517,27 @@ protected virtual void RunVerify(StatusContext statusContext)
516517 /// Verifies the validity of a certificate.
517518 /// </summary>
518519 /// <param name="certificate">The certificate to verify.</param>
520+ /// <param name="ignoreTime">A value indicating whether to ignore time validity checks.</param>
519521 /// <returns>True if the certificate is valid; otherwise, false.</returns>
520- protected bool VerifyCertificate ( X509Certificate2 certificate )
522+ protected bool VerifyCertificate ( X509Certificate2 certificate , bool ignoreTime )
521523 {
522524 if ( Bundle == null )
523525 {
524526 throw new ApplicationException ( "Bundle is not initialized" ) ;
525527 }
526528
527- List < bool > verifyResults = [ ] ;
528-
529529 X509Certificate2 ? rootCA ;
530530 if ( ( rootCA = GetSelfSigningRootCA ( ) ) != null )
531531 {
532532 Logger . LogDebug ( "Verifying certificate {cert} with self-signing root CA" , certificate ) ;
533533
534- X509ChainPolicy policy = new X509ChainPolicy ( ) ;
535- policy . TrustMode = X509ChainTrustMode . CustomRootTrust ;
536- policy . CustomTrustStore . Add ( rootCA ) ;
537- policy . VerificationFlags |= X509VerificationFlags . IgnoreNotTimeValid ;
538- policy . RevocationMode = X509RevocationMode . NoCheck ;
539-
540- bool selfSignVerification = Bundle . VerifyCertificate ( certificate , out X509ChainStatus [ ] selfSignStatuses , policy : policy ) ;
541- verifyResults . Add ( selfSignVerification ) ;
534+ X509ChainPolicy selfSignPolicy = new X509ChainPolicy ( ) ;
535+ selfSignPolicy . TrustMode = X509ChainTrustMode . CustomRootTrust ;
536+ selfSignPolicy . CustomTrustStore . Add ( rootCA ) ;
537+ selfSignPolicy . VerificationFlags |= X509VerificationFlags . IgnoreNotTimeValid ;
538+ selfSignPolicy . RevocationMode = X509RevocationMode . NoCheck ;
542539
540+ bool selfSignVerification = Bundle . VerifyCertificate ( certificate , out _ , policy : selfSignPolicy ) ;
543541 Logger . LogInformation ( "Certificate verification with self-signing root CA for {cert}: {result}" , certificate , selfSignVerification ) ;
544542
545543 if ( selfSignVerification )
@@ -549,36 +547,30 @@ protected bool VerifyCertificate(X509Certificate2 certificate)
549547 }
550548 }
551549
552- Logger . LogDebug ( "Verifying certificate {cert} with default verification policy" , certificate ) ;
553- bool defaultVerification = Bundle . VerifyCertificate ( certificate , out X509ChainStatus [ ] statuses ) ;
554- verifyResults . Add ( defaultVerification ) ;
555-
556- Logger . LogInformation ( "Certificate verification with default policy for {cert}: {result}" , certificate , defaultVerification ) ;
557- AnsiConsole . MarkupLine ( $ "[{ ( defaultVerification ? Color . Green : Color . Red ) } ] Certificate Verification { ( defaultVerification ? "Successful" : "Failed" ) } [/]") ;
550+ X509ChainPolicy policy = new ( ) ;
558551
559- if ( ! defaultVerification )
552+ if ( ignoreTime )
560553 {
561- bool timeIssue = statuses . Any ( x => x . Status . HasFlag ( X509ChainStatusFlags . NotTimeValid ) ) ;
562-
563- Utilities . EnumerateStatuses ( statuses ) ;
564-
565- if ( timeIssue )
566- {
567- Logger . LogWarning ( "Certificate has time validity issues, retrying verification with time check disabled" ) ;
554+ policy . VerificationFlags |= X509VerificationFlags . IgnoreCtlNotTimeValid ;
555+ }
568556
569- X509ChainPolicy policy = new X509ChainPolicy ( ) ;
570- policy . VerificationFlags |= X509VerificationFlags . IgnoreNotTimeValid ;
557+ Logger . LogDebug ( "Verifying certificate {cert} with system trust store" , certificate ) ;
558+ bool defaultVerification = Bundle . VerifyCertificate ( certificate , out X509ChainStatus [ ] statuses , policy ) ;
571559
572- bool noTimeVerification = Bundle . VerifyCertificate ( certificate , out X509ChainStatus [ ] noTimeStatuses , policy : policy ) ;
573- verifyResults . Add ( noTimeVerification ) ;
560+ Logger . LogInformation ( "Certificate verification with system trust store for {cert}: {result}" , certificate , defaultVerification ) ;
574561
575- Logger . LogInformation ( "Certificate verification without time checking for {cert}: {result}" , certificate , noTimeVerification ) ;
576- AnsiConsole . MarkupLine ( $ "[{ ( noTimeVerification ? Color . Green : Color . Red ) } ] Certificate Verification without time checking { ( noTimeVerification ? "Successful" : "Failed" ) } [/]") ;
577- Utilities . EnumerateStatuses ( noTimeStatuses ) ;
578- }
562+ if ( ! defaultVerification )
563+ {
564+ Utilities . EnumerateStatuses ( statuses ) ;
565+ }
566+ else
567+ {
568+ AnsiConsole . MarkupLine ( $ "[green] Certificate Verification Successful[/]") ;
569+ return true ;
579570 }
580571
581- return verifyResults . Any ( x => x ) ;
572+ AnsiConsole . MarkupLine ( $ "[red] Certificate Verification Failed[/]") ;
573+ return false ;
582574 }
583575 }
584576}
0 commit comments