Я пытаюсь подписать существующий CSR с помощью закрытого ключа сертификата CA. Так что я планирую использовать X509_req_sign()
API. Я создал x509_req
Объект, прочитав файл CSR. Я также извлек имя субъекта из сертификата CA.
Но я не понимаю, как я могу установить имя эмитента x509_req
объект. Я нашел API x509_set_issuer_name()
существует, но это для объекта типа X509
, Есть ли подобный API для x509_Req
типа тоже? Какой простой способ подписать существующий csr с помощью закрытого ключа сертификатов CA? Я должен сделать все это, используя только код C ++.
Любые предложения, пожалуйста?
Имя и информация эмитента должны быть заполнены выдающим CA, а не субъектом. Пожалуйста, обратитесь к структуре КСО на https://tools.ietf.org/html/rfc2986#page-5.
Поскольку имя эмитента отсутствует в структуре, вы не можете установить. Вы можете увидеть определение структуры на https://github.com/openssl/openssl/blob/b69ae442a3b3e168d73c53dcd04bacf33eee8569/crypto/include/internal/x509_int.h
/* PKCS#10 certificate request */
struct X509_req_info_st {
ASN1_ENCODING enc; /* cached encoding of signed part */
ASN1_INTEGER *version; /* version, defaults to v1(0) so can be NULL */
X509_NAME *subject; /* certificate request DN */
X509_PUBKEY *pubkey; /* public key of request */
/*
* Zero or more attributes.
* NB: although attributes is a mandatory field some broken
* encodings omit it so this may be NULL in that case.
*/
STACK_OF(X509_ATTRIBUTE) *attributes;
};
struct X509_req_st {
X509_REQ_INFO req_info; /* signed certificate request data */
X509_ALGOR sig_alg; /* signature algorithm */
ASN1_BIT_STRING *signature; /* signature */
CRYPTO_REF_COUNT references;
CRYPTO_RWLOCK *lock;
};
Как вы можете видеть, что в структуре запроса нет имени эмитента, вы не можете установить его.
Других решений пока нет …