Skip to content
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

ca/linter: Port safety checks from ceremony tool #7498

Merged
merged 6 commits into from
Jun 3, 2024

Conversation

pgporada
Copy link
Member

@pgporada pgporada commented May 22, 2024

In #7005 several safety checks were added to the ceremony tool:

This change extracts the RawSubject to RawIssuer DER byte comparison into the //linter package proper so that it can serve both //ca and //cmd/ceremony.

Adds a helper function verifyTBSCertificateDeterminism to //ca similar to an existing check in //cmd/ceremony. This code is not shared because we want //cmd/ceremony to largely stand alone from boulder proper. The helper performs a byte comparison on the RawTBSCertificate DER bytes for a given linting certificate and leaf certificate. The goal is to verify that x509.CreateCertificate was deterministic and produced identical DER bytes after each signing operation.

Fixes #6965

@pgporada pgporada requested a review from a team as a code owner May 22, 2024 16:49
@pgporada pgporada requested a review from aarongable May 22, 2024 16:49
@pgporada pgporada changed the title Port safety checks from ceremony tool ca/linter: Port safety checks from ceremony tool May 22, 2024
ca/ca.go Outdated Show resolved Hide resolved
@pgporada pgporada requested a review from aarongable May 29, 2024 17:46
Copy link
Contributor

@aarongable aarongable left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Logic LGTM, just some suggestions for cleanup

ca/ca.go Outdated Show resolved Hide resolved
ca/ca.go Outdated Show resolved Hide resolved
ca/ca.go Outdated Show resolved Hide resolved
ca/ca.go Outdated
return err
}

if lintRawTBSCert == nil || leafRawTBSCert == nil {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a) don't directly check for nil here, instead check len(foo) == 0
b) no need for this since the anonymous function does the same check on line 673; pick one or the other

Copy link
Member Author

@pgporada pgporada May 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the functional difference between checking for nil or len 0 on a []byte? The zero value of a []byte is going to be nil.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, the true zero value of []byte is nil. But generally the purpose of checks like this is not simply to check for the zero value, but rather to check for obviously invalid inputs, so that more helpful error messages can be displayed and so that we can avoid doing expensive checks if we already know they're going to fail. So a len(foo) == 0 check also catches the case where the byte slice exists but has an obviously-invalid (zero) length.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can get rid of this because tbs.Empty() on line 670 is handling the len(foo) == 0 case anyways.

ca/ca.go Outdated Show resolved Hide resolved
ca/ca.go Outdated Show resolved Hide resolved
ca/ca_test.go Outdated Show resolved Hide resolved
@pgporada pgporada requested a review from aarongable May 29, 2024 20:00
ca/ca.go Outdated Show resolved Hide resolved
ca/ca_test.go Outdated Show resolved Hide resolved
@pgporada pgporada requested a review from aarongable May 29, 2024 21:00
@pgporada pgporada requested a review from jsha May 30, 2024 13:40
@pgporada pgporada merged commit 347ccf8 into main Jun 3, 2024
12 checks passed
@pgporada pgporada deleted the 6965-issuance-safety-checks branch June 3, 2024 13:52
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.

CA: Add lint/check that leaf Issuer bytes match issuer's Subject bytes
3 participants