libsoup 调用http API报错 unacceptable TLS certificate

环境:macos、libsoup-2.4

问题:通过soup_session_send调用http api报错 "unacceptable TLS certificate"

原因:libsoup使用gio-network的gnutls后端,默认查找证书在/opt/homebrew/etc/gnutls/cert.pem下,部分mac不存在这个证书文件。

解决:将/opt/homebrew/etc/gnutls/cert.pem证书打包到程序中,在代码中将证书设置到SoupSession的tls-database属性上

cpp 复制代码
    self->session = soup_session_new();
    char exePath[512];
    uint32_t size = sizeof(exePath);
    if (_NSGetExecutablePath(exePath, &size) != 0) {
        g_warning("Executable path too long\n");
        return;
    }
    
    char *dir = dirname(exePath);
    char env_path[512];
    memset(env_path, 0, sizeof(env_path));
    snprintf(env_path, sizeof(env_path), "%s/../Resources/gnutls/cert.pem", dir);

    GError *error = NULL;
    GTlsDatabase *db = g_tls_file_database_new(env_path, &error);
    if (!db) {
        g_warning("load cert failed: %s", error->message);
        g_clear_error(&error);
    }
    g_object_set(self->session, "tls-database", db, NULL);
    g_object_unref(db);
相关推荐
吴声子夜歌16 小时前
Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)
运维·nginx·http
傲世仙尊21 小时前
HTTP请求与应答-URL全网唯一文件路径报文结构与短连接
网络·网络协议·http
傲世仙尊2 天前
HTTP起步-URL域名解析与协议的本质
网络·网络协议·http
ControlRookie2 天前
第27篇_综合排障|从现象反查状态、错误码、指标和连接快照
http·codesys·plc通信
天天喝旺仔3 天前
gRPC 底层原理:HTTP/2 多路复用、Protobuf 序列化与四种流模式
分布式·http·微服务·rpc
liangshanbo12153 天前
面试题:页面需要发起大量 Ajax / HTTP 请求时,如何优化请求性能?
前端·http·ajax
零域码客3 天前
零基础Python爬虫入门:从HTTP协议到 requests + BeautifulSoup 实战
爬虫·python·http
被摘下的星星3 天前
HTTP 状态码 和 网络端口号
网络·网络协议·http
zxanz13 天前
https 的基本原理是什么样的?
网络协议·http·https
码匠许师傅3 天前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http