【问题标题】:libcurl - curl_easy_perform() fails: problem with the SSL CA cert (path? access rights ?)libcurl - curl_easy_perform() 失败:SSL CA 证书有问题(路径?访问权限?)
【发布时间】:2022-08-17 01:25:22
【问题描述】:

我在 Windows 7 x64 上使用 mingw64 (MSYS2) 从下面的链接编译了简单的 libcurl 示例程序

https://curl.se/libcurl/c/simple.html

不幸的是,它给了我错误:

curl_easy_perform() 失败:SSL CA 证书有问题(路径?访问权限?)

我试图在 MSYS2 中重新安装开放的 ssl 证书,但无济于事。 请记住,我是 SSL 和证书的菜鸟!但是我需要以可移植的方式在 C 中进行 HTTPS 请求,所以我不得不使用 libcurl。 我认为我的系统没有任何问题,因为 1. 使用 WinInet.h 发送的 https 请求完美运行 2. 我可以使用 cUrl 发送 https 请求命令没有任何问题。

PS。如果这里有类似的主题,我深表歉意,但据我所知,在这种特定情况下,它们都没有解决相同的问题

任何想法 ?

    标签: openssl libcurl mingw-w64 msys2


    【解决方案1】:

    我正在回答我自己的问题,因为最终我设法解决了这个问题,并希望这个问题对其他人有用。这实际上似乎是一个普遍的问题,尽管我无法找到清楚地解决它并且对于新手(比如我)。

    该问题是由基于 openSSL 的 libcurl 引起的。 OpenSSL 是 Unix/Linux 的东西,除非明确安装适用于 Windows 的 openSSL(未经测试),否则无法在 Windows 上运行。但是一个人可能不想强迫他/她的软件的用户安装任何额外的组件,比如 openSSL - 在我的例子中。

    解决方案是构建一个不是基于 openSSL 而是基于 windows SSPI 的 libcurl,或者找到一个合适的 libcurl 包。经过多次努力和搜索,我发现MSYS2存在这样一个包,它是mingw curl winssl:

    https://packages.msys2.org/package/mingw-w64-x86_64-curl-winssl?repo=mingw64

    安装它就足够了:

    pacman -S mingw-w64-x86_64-curl-winssl
    

    与 libcurl 进行静态链接可能会很麻烦,而且看起来并非所有依赖项都清楚地列出(似乎是一个已知的错误)。特别是如果使用像我这样的 IDE 并且对 Linux 命令行一无所知(我正在使用 Code::Blocks),则有必要链接以下库:

    -lcurl -lpsl -lidn2 -lssh2 -lbrotlidec -lz -liconv -lzstd -lbrotlicommon -lunistring -lbcrypt -lws2_32 -lwldap32 -lcrypt32
    

    #define CURL_STATICLIB(必填)

    作为最后一点,我必须说,恕我直言 libcurl 默认情况下应该基于 Windows,而不是 openSSL,在任何 minGW 发行版中,因为它们被认为可以在 Windows 下工作并生成 Windows 可执行文件 - 但由于某些原因对我来说晦涩难懂,这似乎并非总是如此。

    【讨论】:

      【解决方案2】:

      在尝试静态链接 2 年后,您给出了答案。静态链接问题之前已使用非“winssl”包修复,但它最终会一次又一次地中断。只需查看 github 上 libcurl 的 msys2 包上的静态链接的未解决问题

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2011-11-03
        • 1970-01-01
        • 2019-02-01
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多