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);
相关推荐
刘胡子大叔21 分钟前
curl resolve 和 Host 头的两种免 DNS 验证 HTTPS
网络协议·http·https
j7~24 分钟前
【Linux网络加餐】《HTTP 会话保持:Cookie 与 Session 原理及实验验证》---详解
linux·网络·网络协议·http·cookie·session
mister_guo15 小时前
HTTP 和 RPC:从一次干饭说清它们的区别
网络协议·http·rpc
严谨的麻辣烫15 小时前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查
码林鼠18 小时前
flutter网络http请求入门教程-dio
网络协议·flutter·http
Lsetea20 小时前
curl访问HTTPS返回304却没有正文:条件请求、缓存与证书验收排查
linux·http·https·ssl证书·curl
honsor1 天前
ModbusTCP、SNMP、HTTP 怎么选?以太网温湿度变送器协议选型实战
网络·物联网·网络协议·tcp/ip·http
Funlang1 天前
HTTP 服务端,能写业务了
网络·网络协议·http
情 九1 天前
Dify HTTP 请求节点实战:发送 JSON、解析响应与处理异常
网络协议·http·json·dify
cfm_29142 天前
初步了解ECDHE密钥交换
http