Tips for simple generation of self-signed certificates - Re: openssl x509 -x509toreq -extensions v3_req will not output version 3 even though input cert.pem is X509v3

Jelle de Jong jelledejong at powercraft.nl
Wed Apr 26 15:38:41 UTC 2023


Thank you David,

I do not see the CSR back in your suggestion.

What I am doing is to create a working but self-signed certificate first 
and then replacing it later with a certificate signed by the 
organisation (which can take multiple weeks at this customer).

That is why I want to generate a CSR from a working certificate that I 
generated.

-days 3653
-newkey rsa:2048

Is there a way without having to use the -extfile configuration file?

Kind regards,

Jelle de Jong

On 4/26/23 17:21, David von Oheimb wrote:
> Hello Jelle,
> 
> you simply confused the versions. For X.509 the latest version is 3, 
> while PKCS#10 CSRs are stuck with v1.
> For this plain old CSR format there is no later one. See also 
> https://www.rfc-editor.org/rfc/rfc2986#section-4 
> <https://www.rfc-editor.org/rfc/rfc2986#section-4>.
> 
> BTW, I wonder why you first produce a certificate, skipping the CSR 
> (cert request) step, and then produce a CSR.
> You don't need a CSR when all you need is a self-signed (end-entity or 
> root CA) certificate.
> 
> Better stop using OpenSSL 1.1.x - its support will end in September, but 
> switch to 3.0 (with long-term support).
> For producing such a simple certificate, you don't need to rely on any 
> OpenSSL config (*.cnf) file.
> Better do not use RSA with just 1024 bits anymore, but 2048 bits.
> And to be be precise with 10 years of validity, take leap years into 
> account.
> For the extensions, all you need is any subject alternative names.
> 
> For key usage, with RSA keys only digitalSignature and keyEncipherment 
> makes sense,
> while for EC keys only digitalSignature and keyAgreement makes sense,
> but this can simply be left out, meaning that any key usage is allowed 
> (which is safe for more situations).
> 
> So I suggest this:
> 
> openssl req -x509 -new -newkey rsa:2048 -nodes -keyout key.pem \
> 
>    -out cert.pem -days 3653 -subj '/CN=test.example.lan' \
> 
>    -addext 'subjectAltName = DNS:test.example.lan' \
> 
>    -addext 'keyUsage = digitalSignature, keyEncipherment'
> 
> 
> If you already have a key or want to produce it separately, use can use
> 
> openssl genrsa -out key.pem 2048
> 
> openssl ecparam -genkey -name prime256v1 -out key.pem  # alternative for EC key, faster and smaller
> 
> 
> openssl x509 -new -key key.pem -out cert.pem -days 3653 -subj '/CN=test.example.lan' \
> 
>    -extfile <(echo -n "subjectAltName = DNS:test.example.lan \n keyUsage = digitalSignature, keyEncipherment")
> 
> 
> where as mentioned you can safely drop the keyUsage part.
> 
> Best,
> David
> 
> 
> On Wed, 2023-04-26 at 12:11 +0200, Jelle de Jong wrote:
>> Hello everybody,
>>
>> I am trying to generate a CSR with X509v3 from a working X509v3 cert but
>> the output generates a version 1 CSR without X509v3.
>>
>> These are the steps to reproduce:
>>
>> openssl req -utf8 -x509 -nodes -new -keyout key.pem -out cert.pem -days
>> 3650 -subj '/CN=test.example.lan' -extensions v3_req -addext
>> 'subjectAltName = DNS:test.example.lan'
>>
>> openssl x509 -x509toreq -in cert.pem -signkey key.pem -out csr.pem
>> -extensions v3_req -ext
>> subjectAltName,keyUsage,basicConstraints,extendedKeyUsage,certificatePolicies
>>
>> openssl req -in csr.pem -noout -verify
>>
>> openssl req -in csr.pem -out csr.req
>>
>> # show X509v3 Subject Alternative Name:
>> openssl x509 -in cert.pem -text -noout
>>
>> # does not show X509v3 Subject Alternative Name:
>> openssl req -in csr.req -text -noout
>>
>> Tried with the bollow two versions
>>
>> $ openssl version
>> OpenSSL 1.1.1n  15 Mar 2022
>>
>> # openssl version
>> OpenSSL 1.1.1k  FIPS 25 Mar 2021
>>
>> Can someone, do I need a diffrent openssl x509 -x509toreq -extensions ...
>>
>> Thank you in advance,
>>
>> Kind regards,
>>
>> Jelle de Jong
>>


More information about the openssl-users mailing list