You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OpenSSL获取CMS_SignerInfo中完整的SignerIdentifier的ASN.1结构?

OpenSSL获取完整SignerIdentifier ASN.1结构的方法

OpenSSL提供了直接获取完整SignerIdentifier ASN.1结构的方法,无需手动拼接单个元素:

  • 对于OpenSSL 1.1.0及以上版本,可直接调用CMS_SignerInfo_get0_signer_id_asc()函数,它会返回包含颁发者与序列号(或密钥ID)的完整SignerIdentifier ASN.1结构。该结构对应ASN.1定义中的CHOICE类型,会根据实际签名者标识类型返回对应内容。
  • 若使用的是1.1.0之前的旧版本OpenSSL,则没有现成的直接获取方法,需要通过CMS_SignerInfo_get0_signer_id()分别提取issuer和sno,再调用ASN1_item_new()、X509_NAME_dup()、ASN1_INTEGER_dup()等API手动构建SignerIdentifier的ASN.1结构。

以下是基于OpenSSL 1.1.0+的示例代码:

// 假设已获取有效的CMS_SignerInfo指针si
ASN1_TYPE *signer_id = CMS_SignerInfo_get0_signer_id_asc(si);
if (signer_id != NULL) {
    // 将完整的SignerIdentifier序列化为DER格式
    unsigned char *der_data = NULL;
    int der_len = ASN1_item_i2d((ASN1_VALUE *)signer_id, &der_data, ASN1_ITEM_rptr(SignerIdentifier));
    
    // 处理序列化后的DER数据...
    
    // 记得释放内存
    OPENSSL_free(der_data);
}

注意:SignerIdentifier的ASN.1定义是CHOICE类型,包含issuerAndSerialNumber和subjectKeyIdentifier两种选项,CMS_SignerInfo_get0_signer_id_asc()会自动返回匹配当前签名者标识的完整结构。

内容的提问来源于stack exchange,提问作者tzippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:10