Skip to content

update citation for e_ca_common_name_missing#976

Merged
christopher-henderson merged 1 commit intozmap:masterfrom
mhyder13:ca_common_name
Jul 27, 2025
Merged

update citation for e_ca_common_name_missing#976
christopher-henderson merged 1 commit intozmap:masterfrom
mhyder13:ca_common_name

Conversation

@mhyder13
Copy link
Copy Markdown
Contributor

This is related to #973. This requirement comes in after most of the early reformatting of the BRs, so the citation string is only one movement out of date. I've added the old citation and the versions it was included in the comments. I've also added the requirements language this lint is (now) based on to the comment, which is similar to how some other lints have it. (example)

One sticking point is that in the new version, there is a "Cross-Certified Subordinate CA Certificate Profile" intended to allow new cross-signs of existing compliant CAs even after the name rules are update with their original names. This profile allows certain CAs without commonName in the subjects of their existing certificates issued before 2017-06-08 to receive new certificates which are not subject to this requirement, provided that "the encoded subject name MUST be byte-for-byte identical to the
encoded subject name of the existing CA Certificate." (It also allows other deviations from the normal CA naming requirements.) The profile otherwise looks similar to the other CA profiles.

Unfortunately, there doesn't seem to be any definitive, distinctive element to this profile that can be used to detect it in zlint. Additionally, the factors that allow its usage like "the existing CA Certificate complied with the Baseline Requirements in force at time of issuance" aren't detectable from the certificate itself. For now, I'm proposing to leave the implementation of the lint as it is with a note about this profile in the comment. CAs attempting to use it should already be aware that they are using it to circumvent the normal naming rules. Research users will unfortunately have to live with this limitation or follow up to determine if a certificate should have been eligible for this profile. If anyone has an idea how to accurately filter these certificates out, we might want to split this lint to separate the two forms of the requirement. Failing that, maybe the configuration system can be leveraged to indicate when a certificate is using this profile?

Copy link
Copy Markdown
Member

@christopher-henderson christopher-henderson left a comment

Choose a reason for hiding this comment

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

Thank you so much @mhyder13! This sort of work is sorely needed, and I admit that I have just enough time to keep the repo alive and humming from a code-and-CICD stand point. So your work is here very much appreciated 🙏

Unfortunately, there doesn't seem to be any definitive, distinctive element to this profile that can be used to detect it in zlint.

You may find ZLint's configurable lints infrastructure to be useful.

type MyLint struct {
    FrobbleTheWidgets bool
}

func (m *MyLint) Configure() interface{} {
	return m
}

func (m *MyLinkt) Execute(c *x509.Certificate) *lint.LintResult {
	if m.FrobbleTheWidgets {
                return &lint.LintResult{Status: lint.Pass}
	} else {
		return &lint.LintResult{Status: lint.Error, Details: "Widgets MUST be frobbled."}
	}
}

The operator can then define a TOML file as the following...

[MyLint]
FrobbleTheWidgets = true

And invoke ZLint vis-a-vis this configuration...

zlint -config myConfig.toml myCert.pem

@christopher-henderson christopher-henderson merged commit 5891820 into zmap:master Jul 27, 2025
4 checks passed
@mhyder13 mhyder13 deleted the ca_common_name branch July 27, 2025 23: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.

2 participants