OpenSSL doesn't show all the requested extensions for a CSR
Thomas Anderson <[email protected]> Tue, 5 Aug 2025 19:47:50 -0500
| Newsgroups | gmane.comp.encryption.openssl.user |
|---|---|
| Message-ID | <CAEe4Dn_i8FUMLbX6JGg_eymNu6C+ssegoySskz+k+aHU5qXpgw@mail.gmail.com> |
Here's a CSR I kinda hacked together:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBADCBqAIBADATMREwDwYDVQQKDAh3aGF0ZXZlcjBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABInX+1ey1zZ9zM4z4rxTJVxdtMpBNlrwK9mae1DaPkGqvtXCr/ER
AJpPDgWJcT2j9W5EjvrMtUxe5yujJw210DSgMzAxBgkqhkiG9w0BCQ4xJDANMAsG
A1UdDwQEAwIBhjATMBEGA1UdDgQKBAhkZWFkYmVlZjAKBggqhkjOPQQDAgNHADBE
AiAORfemho2gtZudBD8BGUvKBeQOVeg4fzkJTYTkqk4cKwIgGhdlouh2dVGbCa4t
Iq3EaI+b4OMe2uEb3mmftiefvok=
-----END NEW CERTIFICATE REQUEST-----
Here's the output of openssl asn1parse -in test.pem :
0:d=0 hl=4 l= 256 cons: SEQUENCE
4:d=1 hl=3 l= 168 cons: SEQUENCE
7:d=2 hl=2 l= 1 prim: INTEGER :00
10:d=2 hl=2 l= 19 cons: SEQUENCE
12:d=3 hl=2 l= 17 cons: SET
14:d=4 hl=2 l= 15 cons: SEQUENCE
16:d=5 hl=2 l= 3 prim: OBJECT :organizationName
21:d=5 hl=2 l= 8 prim: UTF8STRING :whatever
31:d=2 hl=2 l= 89 cons: SEQUENCE
33:d=3 hl=2 l= 19 cons: SEQUENCE
35:d=4 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
44:d=4 hl=2 l= 8 prim: OBJECT :prime256v1
54:d=3 hl=2 l= 66 prim: BIT STRING
122:d=2 hl=2 l= 51 cons: cont [ 0 ]
124:d=3 hl=2 l= 49 cons: SEQUENCE
126:d=4 hl=2 l= 9 prim: OBJECT :Extension Request
137:d=4 hl=2 l= 36 cons: SET
139:d=5 hl=2 l= 13 cons: SEQUENCE
141:d=6 hl=2 l= 11 cons: SEQUENCE
143:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage
148:d=7 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:03020186
154:d=5 hl=2 l= 19 cons: SEQUENCE
156:d=6 hl=2 l= 17 cons: SEQUENCE
158:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key
Identifier
163:d=7 hl=2 l= 10 prim: OCTET STRING [HEX
DUMP]:04086465616462656566
175:d=1 hl=2 l= 10 cons: SEQUENCE
177:d=2 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256
187:d=1 hl=2 l= 71 prim: BIT STRING
So it's showing "X509v3 Subject Key Identifier" and "X509v3 Key Usage".
Now here's the output of openssl req -in test.pem -inform PEM -text -noout
-verify :
Certificate request self-signature verify OK
Certificate Request:
Data:
Version: 1 (0x0)
Subject: O = whatever
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:89:d7:fb:57:b2:d7:36:7d:cc:ce:33:e2:bc:53:
25:5c:5d:b4:ca:41:36:5a:f0:2b:d9:9a:7b:50:da:
3e:41:aa:be:d5:c2:af:f1:11:00:9a:4f:0e:05:89:
71:3d:a3:f5:6e:44:8e:fa:cc:b5:4c:5e:e7:2b:a3:
27:0d:b5:d0:34
ASN1 OID: prime256v1
NIST CURVE: P-256
Attributes:
Requested Extensions:
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:44:02:20:0e:45:f7:a6:86:8d:a0:b5:9b:9d:04:3f:01:19:
4b:ca:05:e4:0e:55:e8:38:7f:39:09:4d:84:e4:aa:4e:1c:2b:
02:20:1a:17:65:a2:e8:76:75:51:9b:09:ae:2d:22:ad:c4:68:
8f:9b:e0:e3:1e:da:e1:1b:de:69:9f:b6:27:9f:be:89
*That* is only showing "X509v3 Key Usage". So where is "X509v3 Subject Key
Identifier"? To understand this let's consider this CSR:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIH/MIGmAgEAMBMxETAPBgNVBAoMCHdoYXRldmVyMFkwEwYHKoZIzj0CAQYIKoZI
zj0DAQcDQgAEXj0aPYgbLFMlCwD89DQCjIBG+axx6uiq6t4ZgUOK+9piM3+3aScq
CKEDRDY8dmFYetIxS8xW3t513N+1BTwWSqAxMC8GCSqGSIb3DQEJDjEiMCAwCwYD
VR0PBAQDAgGGMBEGA1UdDgQKBAhkZWFkYmVlZjAKBggqhkjOPQQDAgNIADBFAiEA
uutZz9KNjvXw0fqa3NOIZRHQP4rS+tLrLxfmb8lgKi4CIA/m3oLwSxNDom0q406p
FUp0Wt/MkYMrHiKG2InRK9V+
-----END NEW CERTIFICATE REQUEST-----
Here's the openssl req output for this new CSR:
Certificate request self-signature verify OK
Certificate Request:
Data:
Version: 1 (0x0)
Subject: O = whatever
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:5e:3d:1a:3d:88:1b:2c:53:25:0b:00:fc:f4:34:
02:8c:80:46:f9:ac:71:ea:e8:aa:ea:de:19:81:43:
8a:fb:da:62:33:7f:b7:69:27:2a:08:a1:03:44:36:
3c:76:61:58:7a:d2:31:4b:cc:56:de:de:75:dc:df:
b5:05:3c:16:4a
ASN1 OID: prime256v1
NIST CURVE: P-256
Attributes:
Requested Extensions:
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
64:65:61:64:62:65:65:66
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:21:00:ba:eb:59:cf:d2:8d:8e:f5:f0:d1:fa:9a:dc:
d3:88:65:11:d0:3f:8a:d2:fa:d2:eb:2f:17:e6:6f:c9:60:2a:
2e:02:20:0f:e6:de:82:f0:4b:13:43:a2:6d:2a:e3:4e:a9:15:
4a:74:5a:df:cc:91:83:2b:1e:22:86:d8:89:d1:2b:d5:7e
So this new CSR has both but the first CSR doesn't.
Here's the openssl asn1parse for this new CSR:
0:d=0 hl=3 l= 255 cons: SEQUENCE
3:d=1 hl=3 l= 166 cons: SEQUENCE
6:d=2 hl=2 l= 1 prim: INTEGER :00
9:d=2 hl=2 l= 19 cons: SEQUENCE
11:d=3 hl=2 l= 17 cons: SET
13:d=4 hl=2 l= 15 cons: SEQUENCE
15:d=5 hl=2 l= 3 prim: OBJECT :organizationName
20:d=5 hl=2 l= 8 prim: UTF8STRING :whatever
30:d=2 hl=2 l= 89 cons: SEQUENCE
32:d=3 hl=2 l= 19 cons: SEQUENCE
34:d=4 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
43:d=4 hl=2 l= 8 prim: OBJECT :prime256v1
53:d=3 hl=2 l= 66 prim: BIT STRING
121:d=2 hl=2 l= 49 cons: cont [ 0 ]
123:d=3 hl=2 l= 47 cons: SEQUENCE
125:d=4 hl=2 l= 9 prim: OBJECT :Extension Request
136:d=4 hl=2 l= 34 cons: SET
138:d=5 hl=2 l= 32 cons: SEQUENCE
140:d=6 hl=2 l= 11 cons: SEQUENCE
142:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage
147:d=7 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:03020186
153:d=6 hl=2 l= 17 cons: SEQUENCE
155:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key
Identifier
160:d=7 hl=2 l= 10 prim: OCTET STRING [HEX
DUMP]:04086465616462656566
172:d=1 hl=2 l= 10 cons: SEQUENCE
174:d=2 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256
184:d=1 hl=2 l= 72 prim: BIT STRING
Here's the difference:
(second CSR)
138:d=5 hl=2 l= 32 cons: SEQUENCE
140:d=6 hl=2 l= 11 cons: SEQUENCE
142:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage
147:d=7 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:03020186
153:d=6 hl=2 l= 17 cons: SEQUENCE
155:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key
Identifier
160:d=7 hl=2 l= 10 prim: OCTET STRING [HEX
DUMP]:04086465616462656566
vs.
(first CSR)
139:d=5 hl=2 l= 13 cons: SEQUENCE
141:d=6 hl=2 l= 11 cons: SEQUENCE
143:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage
148:d=7 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:03020186
154:d=5 hl=2 l= 19 cons: SEQUENCE
156:d=6 hl=2 l= 17 cons: SEQUENCE
158:d=7 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key
Identifier
163:d=7 hl=2 l= 10 prim: OCTET STRING [HEX
DUMP]:04086465616462656566
Structurally I see the difference. The first CSR has two SEQUENCES at depth
level 5 whereas the second CSR only has one.
My question is... *should* the first CSR be showing both extension
requests or shouldn't it be? I mean, right now it isn't, but how *ought* a
CSR like the first one behave? I mean, OpenSSL seems to think that the
first CSR is perfectly valid - it's just not showing all of the data that's
embedded within it.
--
You received this message because you are subscribed to the Google Groups "openssl-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openssl-users+unsubscribe-MCmKBN63+Bmbup2nOX2J7Q@public.gmane.org
To view this discussion visit https://groups.google.com/a/openssl.org/d/msgid/openssl-users/CAEe4Dn_i8FUMLbX6JGg_eymNu6C%2BssegoySskz%2Bk%2BaHU5qXpgw%40mail.gmail.com.