mark cab_dv_conflicts_with* lints superseded#1023
Merged
Merged
Conversation
christopher-henderson
approved these changes
Mar 1, 2026
christopher-henderson
left a comment
Member
There was a problem hiding this comment.
You put so much work into your PRs that I feel bad just leaving a lgtm, but...it looks good to me! Thank you!
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Continuing on with my attempt to baseline all the TLS BR lints against the current version of the BRs, this PR:
e_cab_dv_conflicts_with_localitye_cab_dv_conflicts_with_locality,e_cab_dv_conflicts_with_org,e_cab_dv_conflicts_with_province,e_cab_dv_conflicts_with_street, ande_cab_dv_conflicts_with_postalas ineffective on the CABFBRs_2_0_0_DateWhy?
All of these lints are enforcing checks that trigger only in cases where certs violate the BRs. The reason I'm recommending deprecating them is that they no longer have any real basis in the text of the BRs and have been effectively superseded by new, broader requirement.
These lints are very old, all dating from the original implementation of zlint. At the time, the BRs were still much closer to their original, minimal form, and they used language that restricted what subject elements DV certificates could include by prohibiting specific OIDs. The language looked like this:
In that context, these lints that each check one prohibited attribute made sense and directly followed the structure of the BRs. This section was completely rewritten in major certificate profile reworks included in v2.0.0, and is now a table. The table shows that countryName and commonName are permitted, but that the use of any other subject element is prohibited. This was added to zlint as
e_cab_dv_subject_invalid_values, which now covers all the cases that were included in these lints. It follows the structure of the new requirement by checking for the specifically allowed elements and setting an error if it finds anything else.Because the language these lints implement has been removed removed from the BR, and because the cases that these lints cover are now all covered by
e_cab_dv_subject_invalid_values, I think it's time to sunset them. They no longer have a real basis in the requirements document, and they are just generating duplicate errors for any cert misissued after the CABFBRs_2_0_0_Date.Additional Notes
Starting in v1.4.1, the BRs also prohibited givenName and surname from DV certs. Somehow, these didn't make it into zlint with the others (or at least I couldn't find them here now). I didn't add them to cover the period before v2.0.0. If someone has a use for those, they should be pretty easy to add.
Doc References