Troubleshooting
Common issues and how to resolve them.
Verification Failures
"Certificate identity mismatch"
Cause: The certificate's Subject Alternative Name or OIDC issuer doesn't match your VerificationPolicy.
Fix: Check exactly what identity was used to sign:
// Use TryVerifyStreamAsync with a permissive policy first to inspect the bundle
var (success, result) = await verifier.TryVerifyStreamAsync(artifact, bundle,
new VerificationPolicy());
if (result?.SignerIdentity != null)
{
Console.WriteLine($"SAN: {result.SignerIdentity.SubjectAlternativeName}");
Console.WriteLine($"Issuer: {result.SignerIdentity.Issuer}");
}
Then update your policy to match. For GitHub Actions, the SAN is a URL like:
https://github.com/owner/repo/.github/workflows/ci.yml@refs/heads/main
"No verified transparency log entries"
Cause: The bundle doesn't contain a valid Rekor transparency log entry, or the log entry couldn't be verified.
Fix:
- Ensure the artifact was signed with Rekor logging enabled
- Check that the bundle contains
tlogEntriesin the verification material - If using a private deployment, ensure your trust root includes the correct transparency log keys
"Certificate chain validation failed"
Cause: The signing certificate couldn't be validated against the trust root.
Fix:
- Check that you're using the correct trust root for the deployment that signed the artifact
- For staging-signed artifacts, use
TufTrustRootProvider.StagingUrl - For private deployments, use
InMemoryTrustRootProviderwith your custom root
"SCT verification failed"
Cause: The Signed Certificate Timestamp embedded in the certificate couldn't be verified.
Fix:
- Ensure your trust root includes CT log keys
- For testing, you can disable SCT checks:
var policy = new VerificationPolicy
{
CertificateIdentity = identity,
RequireSignedCertificateTimestamps = false
};
Bundle Issues
"Failed to deserialize Sigstore bundle"
Cause: The bundle JSON is malformed or uses an unsupported format.
Fix:
- Verify the file is valid JSON
- Check the
mediaTypefield — supported types are:application/vnd.dev.sigstore.bundle+json;version=0.1application/vnd.dev.sigstore.bundle+json;version=0.2application/vnd.dev.sigstore.bundle.v0.3+json
Bundle Inspection
var bundle = await SigstoreBundle.LoadAsync(new FileInfo("artifact.sigstore.json"));
Console.WriteLine($"Media Type: {bundle.MediaType}");
Console.WriteLine($"Has signature: {bundle.MessageSignature != null}");
Console.WriteLine($"Has attestation: {bundle.DsseEnvelope != null}");
if (bundle.VerificationMaterial != null)
{
var vm = bundle.VerificationMaterial;
Console.WriteLine($"Has certificate: {vm.Certificate.HasValue}");
Console.WriteLine($"Tlog entries: {vm.TlogEntries.Count}");
Console.WriteLine($"RFC 3161 timestamps: {vm.Rfc3161Timestamps.Count}");
}
Network Issues
Trust root download fails
Cause: The TUF trust root download from tuf-repo-cdn.sigstore.dev failed.
Fix:
- Check network connectivity
- For air-gapped environments, pre-download the trust root and use
FileTrustRootProvider:
var verifier = new SigstoreVerifier(
new FileTrustRootProvider(new FileInfo("trusted_root.json")));
See Also
- Verify a Bundle — verification options
- Custom Trust Root — private deployments