Skip to content

Remove dead-end intermediates from the current bundle - #415

Merged
mitch292 merged 1 commit into
masterfrom
amitchell/drop-dead-end-intermediates
Oct 21, 2026
Merged

mitch292 merged 1 commit into
masterfrom
amitchell/drop-dead-end-intermediates

Conversation

@mitch292

Copy link
Copy Markdown
Contributor

Removes 11 intermediates from int-bundle.crt. None of them can reach a trusted root, because their issuers are in neither bundle.

Why

Verifiers that don't backtrack during issuer selection (for example BoringSSL) take the first certificate in the store that matches the issuer name and key identifier. A dead-end copy listed before a working copy of the same CA makes verification depend on bundle order.

Certificate Issuer (in neither bundle) Why remove it
StartCom Class 3 OV Server CA (b4dae286) Certification Authority of WoSign G2 Can be selected ahead of the working copy ea4e5d2b, so verification depends on order
JCAN Public CA1 - G4 (7b464dc3) Trusted Root CA SHA256 G2 Can be selected ahead of the working copy 9ac4c8e3, so verification depends on order
emSign ECC EV SSL / SSL / Class 1 / Class 2 / Class 3 / Device CA - G3 emSign ECC Root CA - G3 Its root was distrusted in 2026.10.0
UTN-USERFirst-Client Authentication and Email, COMODO SHA-256 Client Authentication and Secure Email CA 3, Apple Public Client RSA CA 12 - G1 AAA Certificate Services Their root was distrusted in 2026.10.0. All three are client-authentication CAs.

How

  • The 11 rows are removed from the intermediates table for snapshot 2026.10.2 only. That snapshot was added in Add CA trust anchors for bundle compatibility #414 and hasn't been tagged yet. Update CA bundle path compatibility #412 made the same kind of change to the then-untagged 2026.10.0 snapshot.
  • Earlier snapshots and the certificates table are unchanged. Future release rolls copy from 2026.10.2, so the removals carry forward.
  • int-bundle.crt and certdata/int-bundle.txt are regenerated with cfssl-trust -r 2026.10.2 -b int bundle and certdump. The diff only deletes lines; nothing else changes.
  • certdata/dead_end_intermediate_test.go fails if any of the 11 return, and also if the working StartCom or JCAN copy disappears.

Validation

  • go test ./... -count=1 and go vet ./... pass.
  • The new test fails against master's int-bundle.crt, reporting all 11 certificates.
  • int-bundle.crt is the previous bundle minus exactly these 11 certificates, by SHA-256.
  • An order-dependence check that models first-match issuer selection reports 0 affected CAs on the resulting bundles, down from 2 (StartCom, JCAN).

Remove 11 intermediates whose issuers are in neither bundle from database
snapshot 2026.10.2, which has not been tagged yet. Earlier snapshots are
unchanged, and future release rolls copy from 2026.10.2.

Verifiers without issuer backtracking, such as BoringSSL, pick the first
certificate matching an issuer's name. The StartCom Class 3 OV Server CA
copy issued by WoSign G2 and the JCAN Public CA1 - G4 copy issued by
Trusted Root CA SHA256 G2 can be selected ahead of their working copies,
which then fail depending on bundle order. The working copies remain.

The six emSign ECC G3 intermediates and three AAA-issued client
authentication CAs lost their only issuer when those roots were
distrusted, so they can no longer build a path.

Validation: go test ./... -count=1 and go vet ./...
@mitch292
mitch292 merged commit 27b1d26 into master Oct 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants