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

OpenSSL 1.1.0版本中X509结构体name字段位置及迁移适配问题

OpenSSL 1.0.2 迁移到1.1.0 X509 name字段缺失适配方案

OpenSSL 从1.1.0版本开始将所有核心结构体改为不透明类型,不再允许直接访问内部成员,原1.0.2版本X509结构体中的name字段是内部缓存的证书主体(Subject)可读字符串,已经被正式移除,你可以使用官方提供的公共API替换原有cert->name写法:


适配代码示例

// 原有1.0.2版本写法
// char *cert_name = cert->name;

// 1.1.0及以上版本替换写法
char *cert_name = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);

// 业务逻辑正常使用cert_name...

// 用完后必须手动释放内存,避免泄漏
OPENSSL_free(cert_name);

补充说明

  • 如果你需要获取的是证书签发者(Issuer)的名称,只需要将上述代码中的X509_get_subject_name替换为X509_get_issuer_name即可。
  • X509_NAME_oneline返回的字符串格式和1.0.2版本name字段的存储格式完全一致,不会产生兼容性问题。
  • 所有直接访问OpenSSL结构体成员的写法在1.1.0+版本都需要替换为对应的get/set公共API,这是跨版本迁移的通用规则。
  • 如果需要兼容两个版本,可以用宏判断封装逻辑:
    char *get_x509_subject_name(X509 *cert) {
    #if OPENSSL_VERSION_NUMBER < 0x10100000L
        // 1.0.2版本逻辑,用OPENSSL_strdup保证内存分配接口统一
        return OPENSSL_strdup(cert->name);
    #else
        return X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
    #endif
    }
    // 调用方用完统一调用OPENSSL_free释放即可
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:04