Ssl libucrl无法检查服务器证书

Ssl libucrl无法检查服务器证书,ssl,libcurl,Ssl,Libcurl,我使用libcurl(C)登录到一个安全站点(https)。到目前为止,它运行良好。从昨天起,它无法登录。代码如下所示 bool login(char *user, char *password) { bool result = false; CURL * curl = NULL; char errbuf[CURL_ERROR_SIZE]; char status_text[1024]; CURLcode res; long resp_code =

我使用libcurl(C)登录到一个安全站点(https)。到目前为止,它运行良好。从昨天起,它无法登录。代码如下所示

bool login(char *user, char *password)
{
    bool result = false;
    CURL * curl = NULL;
    char errbuf[CURL_ERROR_SIZE];
    char status_text[1024];
    CURLcode res;
    long resp_code = 0;
    int index;

    /* These fields should be collected from license file */
    char *user_field = "name";
    char *password_field = "pass";

    char *form_id_field = "form_id";
    char *form_id = "user_login";

    char *link = "https://example.com/user/login";

    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();
    if(curl == NULL) goto on_error;

    curl_easy_reset(curl);

    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0");
    curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_callback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)NULL);

    curl_easy_setopt(curl, CURLOPT_URL, link);
    res = curl_easy_perform(curl);

    if(res == CURLE_OK)
    {
        curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_easy_setopt(curl, CURLOPT_REFERER, link);

        /* Data should be "name=user&pass=password&form_id=user-login" */
        index = sprintf(status_text, "%s=%s&%s=%s&%s=%s",
            user_field, user, password_field,
            password, form_id_field, form_id);

        *(status_text + index) = 0x0;

        resp_code = 0;
        res = CURLE_ABORTED_BY_CALLBACK;

        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, status_text);
        res = curl_easy_perform(curl);
        curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &resp_code);

        if((resp_code == 200) && (res != CURLE_ABORTED_BY_CALLBACK))
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }

on_error:
    if(curl)
    {
        curl_easy_cleanup(curl);
        curl_global_cleanup();
        curl_global_cleanup();
    }

    return result;
} 
执行curl\u easy\u perform时失败。errbuf显示类似“服务器证书验证失败。cafile/etc/ssl/certs/ca-certificates.crt crlfile none”的错误。我知道/etc/ssl/certs/ca-certificates.crt文件有点问题,但我没有更改任何内容


这里可能有什么问题,任何关于解决这个问题的提示,我们都非常感谢。

这更多的是一个提示,而不是一个答案,但我没有足够的代表点来评论

从昨天起,它无法登录

这可能与Sectigo的旧版AddTrust外部CA根证书于2020年5月30日到期有关

从上面的链接

站点的证书是从一个“颁发链”或“中间”CA颁发的,该CA完成了返回这些受信任根证书的路径

如果我正确理解上述语句,AddTrust外部CA根证书可能是链中的证书之一,因此验证失败-至少对于某些客户端是如此

编辑

对我来说同样有效的是

  • 编辑/etc/ca-certificates.conf,并在mozilla/AddTrust\u External\u Root.crt前面加上一个bang/惊叹号(!)
  • 运行更新ca证书

  • 这与其说是一个答案,不如说是一个暗示,但我没有足够的代表点来评论

    从昨天起,它无法登录

    这可能与Sectigo的旧版AddTrust外部CA根证书于2020年5月30日到期有关

    从上面的链接

    站点的证书是从一个“颁发链”或“中间”CA颁发的,该CA完成了返回这些受信任根证书的路径

    如果我正确理解上述语句,AddTrust外部CA根证书可能是链中的证书之一,因此验证失败-至少对于某些客户端是如此

    编辑

    对我来说同样有效的是

  • 编辑/etc/ca-certificates.conf,并在mozilla/AddTrust\u External\u Root.crt前面加上一个bang/惊叹号(!)
  • 运行更新ca证书

  • 这些信息帮助了我。我通过从供应商处获取新的ca包文件并在服务器中替换它来修复它。我接受这个答案。这个信息帮助了我。我通过从供应商处获取新的ca包文件并在服务器中替换它来修复它。我接受这个答案。相关的:相关的: