我正在尝试使用CA证书的私钥对现有的csr进行签名。所以我打算使用X509_req_sign()
API。我通过读取csr文件创建了一个x509_req
对象。我还从CA证书中提取了主题名称。
但我没有得到如何将发行者名称设置为x509_req
对象。我发现API x509_set_issuer_name()
存在,但它适用于X509
类型的对象。是否还有x509_Req
类型的类似API?使用CA证书私钥签署现有csr的简便方法是什么?我必须使用C ++代码完成所有这些。
有什么建议吗?
答案 0 :(得分:0)
发行人名称和信息应通过颁发CA来填写,而不是由主题填写。请参考https://tools.ietf.org/html/rfc2986#page-5的CSR结构。
由于发行人名称在结构中不存在,您无法设置。您可以在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;
};
您可以看到请求结构中没有颁发者名称,您无法设置它。