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);
相关推荐
龙之叶36 分钟前
Android 12:在 ActivityStarter 层拦截分享、搜索与 HTTP 外链
android·chrome·http
nailwl1 小时前
原生态部署librenms
网络协议·http·https
Seven973 小时前
输入网址到网页显示发生了什么
http
marsh02064 小时前
55 openclaw协议扩展:支持非HTTP协议的通信方式
网络·网络协议·http·青少年编程
yqcoder4 小时前
Web 世界的基石:深入解析 HTTP/1.1 的六大核心特点
前端·网络协议·http
灰子学技术4 小时前
Envoy gRPC HTTP/1 反向桥接功能实现分析
网络·网络协议·http
灰子学技术4 小时前
Envoy gRPC HTTP/1.1 桥接功能实现分析
网络·网络协议·http
yqcoder4 小时前
速度的革命:深入解析 HTTP/2.0 的四大核心特性
网络·网络协议·http
小茴香35317 小时前
HTTP缓存
网络协议·http·缓存·面试
甘露s1 天前
JWT Token 机制设计演进:从单 Token 到企业级认证体系
后端·http·web