Openssl req signs certificate with "Basic Constraints: CA: TRUE"

Matt Caswell matt at openssl.org
Thu Jan 27 12:25:08 UTC 2022



On 27/01/2022 06:00, Glen Huang wrote:
> Hi,
> 
> I’m trying to create a signed certificate from a CA certificate without creating a CSR first. From the doc, I came up with this command:
> 
> ```
> openssl req -CA ca.crt -CAkey ca.key -key leaf.key -subj ‘/CN=leaf’ -out leaf.crt
> ```
> 
> However,
> 
> ```
> openssl x509 -in leaf.crt -text -noout
> ```
> 
> reports that it contains:
> 
> ```
> X509v3 Basic Constraints: critical
>      CA:TRUE
> ```
> 
> Which should be incorrect, since leaf.crt has an issuer and is not a CA.
> 
> I wonder if this is by design? Is there a way to omit the basic constraints extension in a leaf certificate?

A close reading of the openssl-req man page will reveal the hint that 
explains this:

https://www.openssl.org/docs/man3.0/man1/openssl-req.html

You have used the -CA option. The man page describes this option as follows:

Specifies the "CA" certificate to be used for signing a new certificate 
and implies use of -x509. When present, this behaves like a "micro CA" 
as follows: The subject name of the "CA" certificate is placed as issuer 
name in the new certificate, which is then signed using the "CA" key 
given as specified below.

The "implies use of -x509" is significant here. The description of the 
"-x509" option says that "X.509 extensions to be added can be specified 
in the configuration file". Later the description of the configuration 
file format on that man page says:

x509_extensions
This specifies the configuration file section containing a list of 
extensions to add to certificate generated when -x509 is in use. It can 
be overridden by the -extensions command line switch.


Next if we look at the default config file, we see this:

[ req ]
default_bits		= 2048
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
attributes		= req_attributes
x509_extensions	= v3_ca	# The extensions to add to the self signed cert


The comment against "x509_extensions" is actually misleading. These are 
actually the extensions to add if the "-x509" option is in use (which is 
implied by -CA). Usually if you're just using "-x509" then you are 
creating a self-signed cert - but not if you are using "-CA".

So, assuming you are using the default config file settings, then the 
extensions to be added are "v3_ca". This has the effect of adding the 
"Basic Constraints, CA:TRUE" setting to the certificate. If you comment 
out that line from the config file then it won't get added.

Matt


More information about the openssl-users mailing list