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

基于mbedTLS提取证书中主体密钥标识符扩展的技术咨询

在mbedTLS中提取证书主体密钥标识符扩展的方案

问题解答

a) 基于v3_ext的解析是否为唯一且正确的选择?

不是唯一选择,但属于正确的可行方案。v3_ext确实存储了证书的所有X.509 v3扩展,通过ASN.1解析定位OID为2.5.29.14的主体密钥标识符,是符合X.509标准的做法。不过mbedTLS的内部结构还有其他可利用的路径,所以这并非唯一解。

b) 是否存在更优方案?

有两种更简洁可靠的方案,比直接解析v3_ext更省心:

  • 循环调用mbedtls_x509_get_ext遍历扩展:你提到缺少偏移量,其实可以从偏移量0开始循环调用该函数,直到找到目标OID或遍历结束。复用mbedTLS的内部解析逻辑,无需自己写ASN.1解析代码,示例逻辑如下:

    int ret;
    size_t ext_len;
    unsigned char *ext_data;
    size_t offset = 0;
    const char *ski_oid = "2.5.29.14";
    
    do {
        ret = mbedtls_x509_get_ext(&cert->cert, ski_oid, strlen(ski_oid),
                                   &offset, &ext_data, &ext_len);
        if(ret == 0) {
            // 找到主体密钥标识符,ext_data和ext_len对应数据
            break;
        }
    } while(ret == MBEDTLS_ERR_X509_EXT_NOT_FOUND);
    
  • 使用官方提供的直接API(版本支持时):检查你的mbedTLS版本,2.28及以上的版本已经提供了mbedtls_x509_crt_get_subject_key_id函数,直接调用即可完成提取,这是最优解。函数原型示例:

    int mbedtls_x509_crt_get_subject_key_id(const mbedtls_x509_crt *crt,
                                            unsigned char *buf, size_t buf_len,
                                            size_t *out_len);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:00:53