I'm generating a CSR with OpenSSL using the following configuration file:
[ req ]
default_bits = 2048
default_keyfile = usercert.key
distinguished_name = req_distinguished_name
attributes = req_attributes
prompt = no
[ req_distinguished_name ]
C = FR
L = Paris
OU = IT
CN = FirstName LastName
[ req_attributes ]
1.3.6.1.4.1.311.13.2.1 = CertificateTemplate=CustomUserOffline
My goal here is to include the template name in the CSR in order for a Windows CA to be able to process it.
I use the following command line to generate the CSR:
openssl req -new -key usercert.key -out usercert.csr -config usercert.cnf
I get no error when running it and I can verify the CSR with the following command:
openssl req -text -noout -verify -in usercert.csr
verify OK
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = FR, L = Paris, OU = IT, CN = FirstName LastName
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:af:85:28:40:84:d8:8a:58:35:86:b8:f5:25:b2:
...
05:8d:57:cc:a0:4c:8f:da:f3:f4:a7:57:76:51:e2:
56:25
Exponent: 65537 (0x10001)
Attributes:
1.3.6.1.4.1.311.13.2.1 :CertificateTemplate=CustomUserOffline
Signature Algorithm: sha256WithRSAEncryption
1e:4e:9b:6d:24:75:81:5f:be:52:58:ba:79:a1:ac:c8:d6:c9:
...
40:2d:b6:fc
But when I try to verify the CSR with certutil usercert.csr
on Windows I get the following error:
PKCS10 Certificate Request:
Version: 1
Subject:
CN=FirstName LastName
OU=IT
L=Paris
C=FR
Name Hash(sha1): ab6adbd772e0ca2a0fce4a32abfdd1645686c0b9
Name Hash(md5): 21d7edb09130201e880133c245617304
Public Key Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
Algorithm Parameters:
05 00
Public Key Length: 2048 bits
Public Key: UnusedBits = 0
0000 30 82 01 0a 02 82 01 01 00 af 85 28 40 84 d8 8a
...
0100 f3 f4 a7 57 76 51 e2 56 25 02 03 01 00 01
Request Attributes: 1
1 attributes:
Attribute[0]: 1.3.6.1.4.1.311.13.2.1 (Enrollment Name Value Pair)
Value[0][0], Length = 27
Cannot decode object: The data is invalid. 0x8007000d (WIN32: 13 ERROR_INVALID_DATA)
CertUtil: -dump command FAILED: 0x8007000d (WIN32: 13 ERROR_INVALID_DATA)
CertUtil: The data is invalid.
It seems that the custom attribute is recognized as 1.3.6.1.4.1.311.13.2.1 (Enrollment Name Value Pair)
is displayed but then I guess the name/value pair CertificateTemplate=CustomUserOffline
is not in the proper format.
How can I fix it?
A few notes:
I'm using OpenSSL to generate the CSR because in the end it will be a Linux client generating the CSR
I'm aware of the
certreq -attrib "CertificateTemplate:CustomUserOffline" -submit usercert.csr
command, but the request will be submitted through C# code using the certenroll API so that's why I would like to include the certificate template information directly in the CSR.