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

在FreeBSD编译Wazuh Agent 4.5.2时遇SSL_get1_peer_certificate未定义错误

FreeBSD 13.1-RELEASE编译Wazuh Agent 4.5.2链接错误解决

问题描述

在FreeBSD 13.1-RELEASE上编译Wazuh Agent 4.5.2,执行gmake deps、gmake TARGET=agent build后触发ld链接错误:

ld: error: undefined symbol: SSL_get1_peer_certificate

referenced by check_cert.c:xx (check_x509_cert)
did you mean: SSL_get_peer_certificate
defined in: libwazuhext.so

最终链接命令失败,退出码1,编译终止。

原因分析

SSL_get1_peer_certificate是OpenSSL 1.1.0及以上版本新增的API,而FreeBSD 13.1默认搭载的OpenSSL版本可能低于该版本(比如OpenSSL 1.0.2),仅提供旧版APISSL_get_peer_certificate,导致链接时无法找到目标符号。

解决方法

方法1:修改代码适配旧版OpenSSL

  1. 打开src/check_cert.c文件,定位到check_x509_cert函数中调用SSL_get1_peer_certificate的代码段。
  2. 将SSL_get1_peer_certificate替换为SSL_get_peer_certificate,同时移除后续对应的X509_free(cert)调用——旧版API返回的证书由SSL对象管理,无需手动释放。
    示例修改:
    // 原代码
    X509 *cert = SSL_get1_peer_certificate(ssl);
    if (cert == NULL) {
        // 错误处理逻辑
    }
    // ... 业务逻辑 ...
    X509_free(cert);
    
    // 修改后代码
    X509 *cert = SSL_get_peer_certificate(ssl);
    if (cert == NULL) {
        // 错误处理逻辑
    }
    // ... 业务逻辑 ...
    // 移除X509_free(cert);语句
    
  3. 清理编译缓存:gmake clean
  4. 重新编译:gmake TARGET=agent build

方法2:升级系统OpenSSL并指定编译路径

  1. 通过pkg升级OpenSSL到1.1.0+版本:
    pkg install openssl111
    
  2. 编译前设置环境变量指定新版OpenSSL的路径,再执行编译:
    export OPENSSL_INCLUDE=/usr/local/include/openssl111
    export OPENSSL_LIB=/usr/local/lib/openssl111
    gmake TARGET=agent build
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:48:27