Skip to content

ISSUE: lint "e_key_usage_and_extended_key_usage_inconsistent" in technically constrained CA certificates #593

Description

@sandorszoke

Short Summary

As part of a wider test we checked all of our CA certificates by Zlint ver.3.0.0 (?) and we could identify a potential issue with different types of technically constrained CA certificates.

Some of the certificates with this potential issue

CA Type Common Name crt.sh link
Code Signing e-Szigno Class2 CodeSigning CA 2020 https://crt.sh/?id=3302241234
Code Signing e-Szigno Class3 CodeSigning CA 2020 https://crt.sh/?id=3302241235
Time Stamping e-Szigno TSA CA 2020 https://crt.sh/?id=3302241237
Time Stamping e-Szigno TSA CA 2020 https://crt.sh/?id=3302241238

The summarized result of the zlint test

Each certificate has the following summarized test result.

LEVEL # OCCURRENCES DETAILS
info 0 -
warn 0 -
error 1 e_key_usage_and_extended_key_usage_inconsistent
fatal 0 -

The scope of lint "e_key_usage_and_extended_key_usage_inconsistent"

When we tried to find details about this lint we realized that this lint has already been removed from Zlint, at least temporarily.
Some corresponding issues are:

#497
#528
#553
#556
#557

As I see there is no common agreement on this requirement so let me summarize our findings.

Our interpretation

  • Originally, RFC5280 introduced the EKU to further specify the use of the public key included in the certificate.
  • The EKU is intended to be used primarily for end-entity certificates, but it may also be used for Subordinate CA certificates.
  • The KU and EKU settings shall be consistent.
  • There are no different requirements for Subordinate CA and end-entity certificates.
  • Currently EKU is widely used in CA certificates to technically constrain the CA to issue only enduser certificates of a particular type (EKU chaining), based on CABF BR and other requirements.

Current cases

Our Subordinate CA certificate contains the CodeSigning EKU but does not contain the digitalSignature KU.
This way it can not be used to sign codes due to a key usage conflict according to RFC 5280.
In our interpretation it is not an error, because we definitely do not want to sign codes with this Subordinate CA certificate. The purpose of having this EKU in the CA certificate is to technically constrain its use only to issue code signing end-entity certificates (EKU chaining).

Our proposal

If you agree with our interpretation we suggest to make difference between the Subordinate CA certificates and end-entity certificates.
The KU - EKU consistency should be checked for both types, but the finding should have different weight.

  • In case of end-entity certificate the "ERROR" is OK.
  • In case of Subordinate CA certificates it would be probably better to have only a WARNING or even an INFORMATION.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions