【问题标题】:How to set issuer name to x509_req type object如何将颁发者名称设置为 x509_req 类型对象
【发布时间】:2018-01-09 22:37:09
【问题描述】:

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

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

有什么建议吗?

【问题讨论】:

标签: c++ c++11 openssl openssl-engine


【解决方案1】:

发行人名称和信息应由发行 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;
};

可以看到请求结构中没有issuer name,所以不能设置。

【讨论】:

  • 好的。知道了。我仍在寻找有关如何通过 CA 证书及其密钥签署现有 csr 的任何建议。对此有什么想法吗?
  • 在提供的头文件中搜索签名 X509_REQ。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2015-08-15
相关资源
最近更新 更多