What is causing warning on a certificate's basicConstraints?

15,045

The small yellow triangle with an exclamation mark is there to tell you that the extension is marked as critical. To get rid of the icon, remove the 'critical' verb from the OpenSSL config.

Also, there is no requirement to mark end-entity certificates with a basic constraint in which the cA boolean is set to false as this is implied in all certificates in which it is not set to true. It is not a violation to have it there; but it's not needed.

Share:
15,045

Related videos on Youtube

jww
Author by

jww

Updated on September 18, 2022

Comments

  • jww
    jww over 1 year

    I created a self signed server certificate using OpenSSL's req -x509 command and a CONF file. The CONF file is shown below.

    When I examine the certificate using Microsoft certificate viewer, its showing a warning on basicConstraints (notice the little exclamation point):

    enter image description here

    The CONF file uses the following to build the basicConstraints:

    basicConstraints = critical,CA:FALSE
    

    According to RFC 5280, the pathLen should only be present if CA:TRUE and keyCertSign is present. The server's certificate does not satisfy either condition (plus, testing with pathLen resulted in the same warning).

    Why is the Microsoft certificate tool warning on basicConstraints? What is wrong with it or what should I do to fix it?


    # Self Signed (note the addition of -x509):
    #     openssl req -config example.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example.key.pem -days 365 -out example.cert.pem
    
    # Self Signed with existing key (note the addition of -x509):
    #     openssl req -config example.conf -new -x509 -sha256 -key example.key.pem -days 365 -out example.cert.pem
    
    # Signing Request (note the lack of -x509):
    #     openssl req -config example.conf -new -newkey rsa:2048 -nodes -keyout example.key.pem -days 365 -out example.req.pem
    
    # Signing Request with existing key (note the lack of -x509):
    #     openssl req -config example.conf -new -key example.key.pem -days 365 -out example.req.pem
    
    # Print it:
    #     openssl x509 -in example.cert.pem -text -noout
    #     openssl req -in example.req.pem -text -noout
    
    [ req ]
    default_bits        = 2048
    default_keyfile     = server-key.pem
    distinguished_name  = subject
    req_extensions      = req_ext
    x509_extensions     = x509_ext
    string_mask         = utf8only
    
    # The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
    #   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
    [ subject ]
    countryName         = Country Name (2 letter code)
    countryName_default     = US
    
    stateOrProvinceName     = State or Province Name (full name)
    stateOrProvinceName_default = MD
    
    localityName            = Locality Name (eg, city)
    localityName_default        = Baltimore
    
    organizationName         = Organization Name (eg, company)
    organizationName_default    =
    
    # Use a friendly name here because its presented to the user. The server's DNS
    #   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
    #   by both IETF and CA/Browser Forums.
    commonName          = Common Name (e.g. server FQDN or YOUR name)
    commonName_default      = Example, LLC
    
    emailAddress            = Email Address
    emailAddress_default        = [email protected]
    
    # Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
    [ x509_ext ]
    
    subjectKeyIdentifier        = hash
    authorityKeyIdentifier  = keyid,issuer
    
    basicConstraints        = critical,CA:FALSE
    keyUsage            = digitalSignature, keyEncipherment
    subjectAltName          = @alternate_names
    nsComment           = "OpenSSL Generated Certificate"
    
    # RFC 5280, Section 4.2.1.12 makes EKU optional
    # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
    extendedKeyUsage    = serverAuth
    
    # Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
    [ req_ext ]
    
    subjectKeyIdentifier        = hash
    
    basicConstraints        = critical,CA:FALSE
    keyUsage            = digitalSignature, keyEncipherment
    subjectAltName          = @alternate_names
    nsComment           = "OpenSSL Generated Certificate"
    
    # RFC 5280, Section 4.2.1.12 makes EKU optional
    # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
    extendedKeyUsage    = serverAuth
    
    [ alternate_names ]
    
    DNS.1       = example.com
    DNS.2       = www.example.com
    DNS.3       = mail.example.com
    DNS.4       = ftp.example.com
    
    # Add these if you need them. But usually you don't want them or
    #   need them in production. You may need them for development.
    # DNS.5       = localhost
    # DNS.6       = localhost.localdomain
    # DNS.7       = 127.0.0.1
    
    # IPv6 localhost
    # DNS.8     = ::1