-
-
Notifications
You must be signed in to change notification settings - Fork 607
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ceremony: Distinguish between intermediate and cross-sign ceremonies #7005
Merged
Merged
Changes from 43 commits
Commits
Show all changes
56 commits
Select commit
Hold shift + click to select a range
076abd3
ceremony: Handle distinctions between intermediate and cross-sign cer…
pgporada 8b5b434
Merge remote-tracking branch 'origin/main' into ceremony-cross-cert-r…
pgporada 4163d40
Make a specific cross-cert profile and ceremony function
pgporada a7a1cfb
Add cross-cert config validation unit test
pgporada 59c470b
Split linting certificate into separate function
pgporada 21d737d
Don't throwaway linting certificate bytes from //linter package
pgporada a91c75f
Extra validations on RawIssuer and RawSubject fields
pgporada 881389a
More verifications
pgporada 3fe4e96
Perform checks on root and intermediate ceremony too
pgporada 21ed896
Wire up GoodKey checking
pgporada 11638af
Fix self-signed root linting and move utility functions into cert.go
pgporada 46fe904
Fix context lint warning by using an empty non-nil context
pgporada 9c57814
intermediate and crossCert ceremony profiles should check the same fi…
pgporada 09aa2f2
Add cross-certificate ceremonies integration tests
pgporada b50b22d
Use correct InputCertPath for cross sign ceremonies and output more i…
pgporada ab89802
Skip lints not relevant to cross-signed subordinate CAs
pgporada 6786449
Remove arg from crossCert.validate
pgporada 177461b
Add cross-signed intermediates to CA configs
pgporada 454a4c0
Use term subordinate CA instead of intermediate
pgporada 618bc0e
Add test cases for cross signed certs and update expected error messages
pgporada 63a4cb7
Increase startup timeout and add additional log line about it
pgporada 2a71a8d
Add function to load public key and do more testing
pgporada 8a11f16
Fix cross-certificate generation for integration tests
pgporada 6697bd5
Add cross-signed intermediates to the issuerCerts list
pgporada 95cc539
Fix lints
pgporada 4f404b7
Only need to serve the issuer chains from the WFE
pgporada 9608749
Only create ECDSA cross-signed by an RSA root to match the 2023 ceremony
pgporada 043a39c
Fix issuer ordering problem that doesnt exist in staging/prod
pgporada f9730d5
Remove redundant text
pgporada fdde489
Add helper functions to edit the running ECDSA allow list and to down…
pgporada fe0aed7
Integration test for cross-signed intermediates
pgporada 3d67b19
Remove deubg line
pgporada 07475fa
Check that a client is served the expected certificate chains
pgporada e16bb18
Remove commented out code
pgporada 3e49add
Use correct cross-sign cert filepath
pgporada 04af1f9
Add extra information to log
pgporada b06e5e1
Remove debug line
pgporada 8c82c2c
Change boolean name
pgporada 659958d
Update PKI.md
pgporada daee81a
Merge branch 'main' into ceremony-cross-cert-rework
pgporada a0f8423
Musical functions
pgporada 1211161
Address comments
pgporada e99b427
Been awake too many hours and removed too much code
pgporada 64f8b94
Address stylistic comments
pgporada ca1f430
Still working on more BR and CPS verifications
pgporada 567e1f2
Still addressing comments
pgporada 9978b82
Fix ineffectual assignment
pgporada c20dcc5
Allow genCert to display command output
pgporada fc6fc4c
Copy EKUs from to-be-cross-signed cert over to the lint cert
pgporada 9d38688
Test that EKUs match between lintcert and to-be-cross-signed
pgporada 4e7a822
Update cmd/ceremony/cert.go
pgporada 979ee46
Address comments
pgporada 72b7d76
Prevent issuance if linting hasn't been done
pgporada 950333e
Fix error message
pgporada 308a6d0
I should learn how to use structs and types
pgporada 676f793
I'm of the type that fails at types
pgporada File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, this just made me realize a complicated thing: I think that the "crossCert" ceremony needs to match the existing cert's EKU and MaxPathLen.
If we're cross-signing a root (e.g. X1 signing X2), then there should be no MaxPathLen and no EKUs, since it's an Unrestricted cross-sign. This is exactly the case that the "unrestricted" carve-out in 7.1.2.2.3 is designed for. The self-signed root has no such restrictions, so the cross-sign doesn't need them either.
But if we're cross-signing an intermediate (e.g. X1 signing E5), there need to be EKUs. Fundamentally, E5-by-X1 and E5-by-X2 are the same class of object: they're both TLS Subordinate CA Certificates, and they're both Cross-Certified Subordinate CA Certificates. Neither one is more "real" or "original" than the other. Therefore, IMO, they both need to comply with 7.1.2.6 TLS Subordinate CA Certificate Profile, which says that EKUs are a MUST.
Honestly I think this is a bug in the new version of the BRs. It would appear that they allow cross-signed intermediates to have no EKUs. I don't think we should follow this interpretation, and should instead restrict ourselves to the more conservative interpretation where cross-signed intermediates need to retain the same restrictions as the "original" intermediate.