Thanks Matt,

After disabling the default config, basic constraints are omitted.

It seems a more revealing description is in “-config”: for a description of the 
default value, see "COMMAND SUMMARY" in openssl(1).

I didn’t know “-config" has a default value and it usually points to the one 
shipped with openssl. Thanks for bringing my attention to it.

Regards,
Glen

> On Jan 27, 2022, at 8:25 PM, Matt Caswell <m...@openssl.org> wrote:
> 
> 
> 
> 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 
> <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

Reply via email to