如何将颁发者名称设置为x509_req类型对象

How to set issuer name to x509_req type object

本文关键字:x509 req 对象 类型 设置      更新时间:2023-10-16

我正在尝试使用 CA 证书的私钥对现有 csr 进行签名。所以我打算使用X509_req_sign() API。我通过读取 csr 文件创建了一个x509_req对象。我还从 CA 证书中提取了使用者名称。

但是我不明白如何将颁发者名称设置为x509_req对象。我发现存在一个 API x509_set_issuer_name()但它适用于类型 X509 的对象。x509_Req类型也有类似的 API 吗?使用 CA 证书私钥签署现有 CSR 的简单方法是什么?我必须仅使用C++代码来完成所有这些操作。

有什么建议吗?

颁发者名称和信息应由颁发 CA 填写,而不是由主题填写。请参阅 https://www.rfc-editor.org/rfc/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;
};

如您所见,请求结构中没有颁发者名称,因此无法设置它。