У нас есть существующий код, который генерирует CSR следующим образом:
void create_csr()
{
EVP_PKEY * pk = EVP_PKEY_new();
RSA * rsa = RSA_generate_key(RSA_SIZE, RSA_F4, NULL, NULL);
EVP_PKEY_set1_RSA(pk, rsa);
X509_REQ * x = X509_REQ_new();
X509_REQ_set_pubkey(x, pk);
BIO * outBio = BIO_new(BIO_s_mem());
PEM_write_bio_X509_REQ(outBio, x)
char * buf;
size_t bufLen = BIO_get_mem_data(outBio, &buf);
WriteToFile(buf, bufLen, "cert_req.csr"); // <== File IO details inside
}
Бег # openssl asn1parse -in cert_req.csr
С OpenSSL 1.0.1e-fips 11 Feb 2013
:
0:d=0 hl=4 l= 312 cons: SEQUENCE
4:d=1 hl=4 l= 300 cons: SEQUENCE
8:d=2 hl=2 l= 0 prim: INTEGER :00
10:d=2 hl=2 l= 0 cons: SEQUENCE
12:d=2 hl=4 l= 290 cons: SEQUENCE
16:d=3 hl=2 l= 13 cons: SEQUENCE
18:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
29:d=4 hl=2 l= 0 prim: NULL
31:d=3 hl=4 l= 271 prim: BIT STRING
306:d=2 hl=2 l= 0 cons: cont [ 0 ]
308:d=1 hl=2 l= 3 cons: SEQUENCE
310:d=2 hl=2 l= 1 prim: OBJECT :itu-t
313:d=1 hl=2 l= 1 prim: BIT STRING
С OpenSSL 1.1.1b 26 Feb 2019
:
0:d=0 hl=4 l= 310 cons: SEQUENCE
4:d=1 hl=4 l= 301 cons: SEQUENCE
8:d=2 hl=2 l= 1 prim: INTEGER :00
11:d=2 hl=2 l= 0 cons: SEQUENCE
13:d=2 hl=4 l= 290 cons: SEQUENCE
17:d=3 hl=2 l= 13 cons: SEQUENCE
19:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
30:d=4 hl=2 l= 0 prim: NULL
32:d=3 hl=4 l= 271 prim: BIT STRING
307:d=2 hl=2 l= 0 cons: cont [ 0 ]
309:d=1 hl=2 l= 0 cons: SEQUENCE
311:d=1 hl=2 l= 1 prim: BIT STRING
Похоже, что с OpenSSL 1.1.1b 26 Feb 2019
поле prim: OBJECT :itu-t
опущено.
Попытка использовать команду оболочки OpenSSL 1.0.1e-fips 11 Feb 2013
для чтения CSR, сделанного с помощью OpenSSL 1.1.1b 26 Feb 2019
, завершается неудачно следующим образом:
# openssl req -in cert_req.csr -pubkey -noout -outform pem
unable to load X509 request
140324106245960:error:0D078079:asn1 encoding routines:ASN1_ITEM_EX_D2I:field missing:tasn_dec.c:526:Field=algorithm, Type=X509_ALGOR
140324106245960:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:777:Field=sig_alg, Type=X509_REQ
140324106245960:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:
Наш сервер на OpenSSL 1.0.1e-fips 11 Feb 2013
не может проанализировать CSR и сгенерировать сертификат
Фокусировка вопроса : есть ли способ заставить OpenSSL 1.1.1b 26 Feb 2019
использовать itu-t
в качестве алгоритма подписи и вставить поле и значение prim: OBJECT :itu-t
в кодировку ASN.1 при генерации КСО? Как?
Большое спасибо!