在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
- 打开
src/check_cert.c文件,定位到check_x509_cert函数中调用SSL_get1_peer_certificate的代码段。 - 将
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);语句 - 清理编译缓存:
gmake clean - 重新编译:
gmake TARGET=agent build
方法2:升级系统OpenSSL并指定编译路径
- 通过pkg升级OpenSSL到1.1.0+版本:
pkg install openssl111 - 编译前设置环境变量指定新版OpenSSL的路径,再执行编译:
export OPENSSL_INCLUDE=/usr/local/include/openssl111 export OPENSSL_LIB=/usr/local/lib/openssl111 gmake TARGET=agent build
内容的提问来源于stack exchange,提问作者Veno
相关产品推荐
相关产品推荐

