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

OpenSSL 1.0.2n迁移至1.1.1k无法访问X509结构体如何解决

OpenSSL 1.1.1k 版本X509结构体成员访问方案

OpenSSL从1.1.0版本开始将绝大多数核心结构体设置为不透明类型,禁止直接访问成员,所有读写操作都需要使用官方提供的公开API完成。你要访问的certificate->cert_info->signature->algorithm对应的替代方案如下:

1. 直接替换原有判断逻辑

你原来的三级指针判断可以直接用X509_get0_tbs_sigalgAPI替换,该函数会直接返回TBS证书中的签名算法结构体指针,返回非空即等价于你原有三级判断的全部条件为真:

// 替换原有if判断代码
const X509_ALGOR *sig_alg = X509_get0_tbs_sigalg(certificate);
if (sig_alg != NULL) {
    // 此处放你原来的业务逻辑
}

2. 访问签名算法的具体属性

如果后续你需要获取算法标识等信息,可以使用X509_ALGOR_get0API读取结构体内容:

const ASN1_OBJECT *alg_id = NULL;
// 函数参数依次为:算法标识指针地址、参数类型指针地址、参数值指针地址、输入的X509_ALGOR指针
X509_ALGOR_get0(&alg_id, NULL, NULL, sig_alg);

// 示例:将算法标识转换为NID做后续判断
int alg_nid = OBJ_obj2nid(alg_id);
if (alg_nid == NID_sha256WithRSAEncryption) {
    // 对应业务逻辑
}

注意事项

  • 所有前缀带get0的API返回的都是OpenSSL内部托管的指针,你不需要手动释放,禁止调用OPENSSL_free释放这类指针
  • 其他X509结构体成员的访问都可以在OpenSSL 1.1.1官方API文档中找到对应的get/set函数,不要尝试强制类型转换访问不透明结构体的内存布局,避免版本兼容性问题
  • 编译时请确保头文件引用和链接库都是1.1.1k版本,避免和系统自带的旧版OpenSSL冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03