Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 8d6d375

Browse files
authored
Certificates: add validation issue for unknown certificate (#415)
1 parent de4e1b6 commit 8d6d375

4 files changed

Lines changed: 18 additions & 10 deletions

File tree

src/NuGet.Services.Validation.Orchestrator/NuGet.Services.Validation.Orchestrator.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
</ItemGroup>
108108
<ItemGroup>
109109
<PackageReference Include="NuGet.Services.Validation.Issues">
110-
<Version>2.25.0-master-29664</Version>
110+
<Version>2.25.0-master-30191</Version>
111111
</PackageReference>
112112
</ItemGroup>
113113
<ItemGroup>

src/Validation.PackageSigning.ProcessSignature/SignatureValidator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,10 +330,10 @@ private async Task<SignatureValidatorResult> PerformFinalValidationAsync(Context
330330
}
331331

332332
// Block packages with any unknown signing certificates.
333-
var signingFingerprint = context.Signature
333+
var signingCertificate = context.Signature
334334
.SignerInfo
335-
.Certificate
336-
.ComputeSHA256Thumbprint();
335+
.Certificate;
336+
var signingFingerprint = signingCertificate.ComputeSHA256Thumbprint();
337337

338338
var packageRegistration = _corePackageService.FindPackageRegistrationById(context.Message.PackageId);
339339

@@ -348,7 +348,7 @@ private async Task<SignatureValidatorResult> PerformFinalValidationAsync(Context
348348

349349
return await RejectAsync(
350350
context,
351-
ValidationIssue.PackageIsSigned);
351+
new UnauthorizedCertificateFailure(signingCertificate.Thumbprint.ToLowerInvariant()));
352352
}
353353

354354
// Call the "verify" API, which does the main logic of signature validation.

tests/Validation.PackageSigning.ProcessSignature.Tests/SignatureValidatorFacts.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,10 @@ public async Task RejectsSignedPackagesWithUnknownCertificates()
380380

381381
// Assert
382382
Validate(result, ValidationStatus.Failed, PackageSigningStatus.Invalid);
383-
var issue = Assert.Single(result.Issues);
384-
Assert.Equal(ValidationIssueCode.PackageIsSigned, issue.IssueCode);
383+
Assert.Single(result.Issues);
384+
var issue = Assert.IsType<UnauthorizedCertificateFailure>(result.Issues[0]);
385+
Assert.Equal(ValidationIssueCode.PackageIsSignedWithUnauthorizedCertificate, issue.IssueCode);
386+
Assert.Equal(TestResources.Leaf2Sha1Thumbprint, issue.Sha1Thumbprint);
385387
}
386388

387389
[Fact]
@@ -514,9 +516,10 @@ public async Task StripsAndRejectsPackagesWithRepositorySignatureWhenPackageIsAu
514516
_cancellationToken);
515517

516518
Validate(result, ValidationStatus.Failed, PackageSigningStatus.Invalid);
517-
Assert.Equal(1, result.Issues.Count);
518-
var issue = Assert.IsType<NoDataValidationIssue>(result.Issues[0]);
519-
Assert.Equal(ValidationIssueCode.PackageIsSigned, issue.IssueCode);
519+
Assert.Single(result.Issues);
520+
var issue = Assert.IsType<UnauthorizedCertificateFailure>(result.Issues[0]);
521+
Assert.Equal(ValidationIssueCode.PackageIsSignedWithUnauthorizedCertificate, issue.IssueCode);
522+
Assert.Equal(TestResources.Leaf2Sha1Thumbprint, issue.Sha1Thumbprint);
520523
}
521524

522525
[Fact]

tests/Validation.PackageSigning.ProcessSignature.Tests/Support/TestResources.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public static class TestResources
4141
/// </summary>
4242
public const string Leaf2Thumbprint = "a8cc70dbbd8bc61410231805b690cca7c5a8d07553c1c49b299a6aabaeb7ff9a";
4343

44+
/// <summary>
45+
/// This is the SHA-1 thumbprint of the signing certificate in <see cref="SignedPackageLeaf2"/>.
46+
/// </summary>
47+
public const string Leaf2Sha1Thumbprint = "8e1b5dadf388dee204bcfd27b53f00b585fdca07";
48+
4449
/// <summary>
4550
/// This is the SHA-256 thumbprint of the timestamp certificate in <see cref="SignedPackageLeaf1"/>.
4651
/// </summary>

0 commit comments

Comments
 (0)