Skip to content

fix(bootstrap): emit RFC 5280 extensions on generated gateway PKI - #3286

Open
maxdubrinsky wants to merge 1 commit into
mainfrom
pki-authority-key-identifier/mdubrinsky
Open

fix(bootstrap): emit RFC 5280 extensions on generated gateway PKI#3286
maxdubrinsky wants to merge 1 commit into
mainfrom
pki-authority-key-identifier/mdubrinsky

Conversation

@maxdubrinsky

@maxdubrinsky maxdubrinsky commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes an issue where Python 3.13 tls handshakes fail due to strict x509 being on by default now. Flipping use_authority_key_identifier_extension to true and adding key_usages to the CA should fix this for new certs going forward.

Related Issue

No issue: encountered this working on nemo-platform after our upgrade to 3.13

Changes

  • set ca_params.key_usages
  • set use_authority_key_identifier_extension for client and server
  • tests to verify

Testing

  • mise run pre-commit passes
  • Unit tests added/updated
  • E2E tests added/updated (if applicable)

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)
  • Architecture docs updated (if applicable)

generate_pki minted a CA with no key usage and server and client leaves
with no Authority Key Identifier. RFC 5280 requires both, and verifiers
that enforce it reject the chain: OpenSSL X509_STRICT fails with
"Missing Authority Key Identifier", and Python 3.13 turned that flag on
by default in ssl.create_default_context(). rustls and BoringSSL do not
enforce it, so gRPC clients kept working while an HTTPS client built on
Python 3.13 (for example a platform proxying to an exposed sandbox
service) could not complete a handshake with a pkiInitJob-provisioned
gateway at all. cert-manager PKI was unaffected.

Set keyCertSign and cRLSign on the CA and use_authority_key_identifier
on both leaves, matching what the sandbox L7 CA already does. Add a
test that parses the bundle and asserts the extensions, including that
each leaf AKI matches the CA SKI.

Verified: openssl verify -x509_strict accepts both leaves, and a strict
Python 3.13 client completes an mTLS handshake against a server using
the new bundle where the previous bundle reproduces the failure.

Signed-off-by: Max Dubrinsky <mdubrinsky@nvidia.com>
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.

1 participant