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);
相关推荐
人道领域3 小时前
JavaWeb从入门到进阶(HTTP协议的请求与响应)
网络·网络协议·http
极安代理5 小时前
HTTP代理IP如何提升爬虫采集效率?
爬虫·tcp/ip·http
草根站起来6 小时前
https加密证书
网络协议·http·https
蜂蜜黄油呀土豆7 小时前
深入理解计算机网络中的应用层知识
计算机网络·http·tcp·网络通信·dns
凯子坚持 c8 小时前
C++大模型SDK开发实录(二):DeepSeek模型接入、HTTP通信实现与GTest单元测试
c++·http·单元测试
极安代理8 小时前
HTTPS代理详解:工作原理与使用优势全解析
网络协议·http·https
洛_尘8 小时前
JAVA EE初阶8:网络原理 - HTTP_HTTPS(重要)
java·http·java-ee
一条咸鱼_SaltyFish19 小时前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
BMHRvymM20 小时前
电机启动模型与Matlab/Simulink仿真分析
http
光影少年1 天前
http和https区别、令牌、三次握手流程
网络协议·http·https