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

2024-01-04

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

https://curl.se/libcurl/c/simple.html 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 请求command没有任何问题。

附言。如果这里有类似的主题,我深表歉意,但据我所知,它们都没有解决这个特定场景中的相同问题

任何想法 ?


我正在回答我自己的问题,因为最终我设法解决了问题,并希望这个问题对其他人有用。这实际上似乎是一个常见问题,尽管我找不到任何地方可以明确地解决这个问题,并且对于新手(像我一样)来说。

该问题是由于 libcurl 基于 openSSL 造成的。 OpenSSL 是 Unix/Linux 的东西,不能在 Windows 上工作,除非显式安装适用于 Windows 的 openSSL(未经测试)。但人们可能不想强迫其软件的用户安装任何其他组件,例如 openSSL - 就像我的情况一样。

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

https://packages.msys2.org/package/mingw-w64-x86_64-curl-winssl?repo=mingw64 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

and

#define CURL_STATICLIB(强制的)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libcurl -curl_easy_perform() 失败:SSL CA 证书有问题(路径?访问权限?) 的相关文章

  • MSYS2环境的使用

    我想彻底了解MSYS2平台环境的使用情况 部分描述可在以下位置找到 https www msys2 org docs environments https www msys2 org docs environments 我理解的事情 MSY
  • OpenSSL 上的 EVP_DecryptFinal_ex 错误

    我正在使用 OpenSSL EVP 例程使用 AES 128 cbc 模式进行解密 我使用 NIST 站点指定的测试向量来测试我的程序 该程序似乎在 EVP DecryptFinal ex 例程处失败 谁能告诉我有什么问题吗 另外 我如何在
  • 帮助构建 boost asio ssl 示例

    我一直在研究 asio ssl 示例 链接如下 尽管尽了最大努力 我还是无法将 openssl 链接到 boost 示例中 ld 的输出是 ld 缺少 libssl a 中的符号 我无法弄清楚的是 我发现 libssl a 中带有 nm 的
  • 如何从 openssl 生成的密钥生成 X.509 证书

    我有一个在 ec2 实例上运行的 Web 服务器 该实例在内部调用使用 Spring Boot 构建的 REST 服务器 现在 我正在尝试让此 REST 服务器在 SSL 下运行 这是我到目前为止所做的 1 使用此命令创建 CSR 和密钥文
  • CSR 签名如何运作?

    我正在尝试签署一份CSR http en wikipedia org wiki Certificate signing request文件输入PEM http en wikipedia org wiki X 509 Certificate
  • 仅使用 RSA 和 AES 构建 openssl

    我正在一个项目中使用 libcrypto a OpenSSL 默认情况下 所有算法都在 libcrypto a 下可用 对于该项目 我只需要 RSA AES 和 SHA 如何仅使用这些算法构建 libcrypto a 如果您通过运行以下命令
  • 使用随机数生成引擎

    我正在尝试使用兰德 字节 https www openssl org docs crypto rand htmlOpenSSL 的 API 但我想尝试使用各种随机数生成引擎 在 OpenSSL 中是否有推荐的生成随机字节并添加熵的方法 我在
  • 使用“模数”和“指数”通过 OpenSSL v3 创建 RSA 密钥在 Ruby on Rails 中不起作用

    我有一个 RSA 公钥模数和指数字符串 我想在 Ruby on Rails 中使用它们创建 OpenSSL PKey RSA 我尝试了三种不同的方式 我认为我的环境有些混乱 但是 我无法发现它 你有什么主意吗 版本 ruby 3 2 1 2
  • 使用curl解压gzip数据

    I added curl easy setopt client CURLOPT ENCODING gzip 到我的代码 我预计curl 会导致服务器发送压缩数据并解压缩它 实际上我在 HTTP 标头中看到数据被压缩 变化 Accept En
  • OpenSSL 和 CryptoJS SHA256 加密转换

    我的问题是 OpenSSL 的新版本与 CryptoJS 的默认设置不兼容 openssl enc 用于基于密码的密钥派生的默认哈希值 1 1 0 中更改为 SHA256 而较低版本中更改为 MD5 https unix stackexch
  • 使用 Ruby OpenSSL 库时公钥无效

    我正在尝试在 Ruby 中生成 RSA 密钥对 主要使用来自这篇博文 http stuff things net 2009 12 11 generating rsa key pairs in ruby 这是我稍微修改过的代码 def gen
  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • C - 如何正确使用 OpenSSL 的 BIO_write()

    我是 OpenSSL 新手 我知道 BIO write BIO b const void buf int len 需要在循环中调用 但我不完全确定我是否正确使用它 我写了一个这样的函数 int32 t SendPacket BIO cons
  • 是否可以使用 Python 中的密码安全地加密然后解密数据?

    我在 python 程序中有一些数据 我想在使用密码写入文件之前对其进行加密 然后在使用它之前读取并解密它 我正在寻找一些可以根据密码进行加密和解密的安全对称算法 这个问题 https stackoverflow com questions
  • 当 SSL_get_fd 返回 -1 时,这意味着什么?

    我正在使用 frida 分析一个程序 该程序肯定通过 SSL 连接到某个服务器 当我打电话时SSL get fd 它返回 1 从文档中我看到这意味着ssl不包装套接字 BIO 已明确配置 因为我可以通过SSL get rbio openss
  • openssl_pkey_get_public 未打开公钥,“无起始行”错误

    当生成公钥然后用函数读取它时openssl pkey get public publicKeyResource bool false 和消息 错误 0906D06C PEM 例程 PEM read bio 无起始行 privateKey o
  • 如何将 OpenSSL 与 WinSock 一起使用?

    我在网上搜索过 但没有找到任何与此相关的内容 有谁有使用 WinSock 和 OpenSSL 的简单代码示例吗 我正在寻找一个简单的 Visual C 2005 或更高版本的代码示例 它创建并打开一个 Winsock 连接 并使用 Open
  • 安装 Sass 时出错(Ruby 2.5.0.1、MSYS2 20161025.0.0)

    我尝试安装 Sass 我安装了Ruby and MSYS2在此之前 来自所有人的最新消息巧克力味 https chocolatey org choco install ruby choco install msys2 看来它们已正确安装 r
  • openssl_crypt 中初始化向量的使用

    我看了一下this https stackoverflow com questions 1391132 two way encryption in php问题 并想为自己做 当我运行这段代码时 直接取自这个答案 https stackove
  • 如何解决“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:没有这样的进程”错误?

    如果这个问题很愚蠢 请原谅 但我是这个领域的新手 我需要通过 SSL 从 Drupal 7 站点连接到服务 我有一个扩展名为 p12 的文件及其密码 另外 我使用 PHP 7 1 1 和 Windows 7 64x 我使用以下命令将 p12

随机推荐

  • 直接链接到 iOS 7 中的应用商店应用程序

    我有一个免费版本的应用程序 免费应用程序中有完整版本的链接 该链接在 iOS 6 中工作正常 但在 iOS 7 中它显示空白页面 任何帮助表示赞赏 我使用的链接 void getFull self hideAnimated NSString
  • jQuery 中的 class 和 id 有什么区别?

    jQuery 中的 class 和 id 有什么区别 例如 span class lalal span and span span 因为一个可以很好地使用 jQuery 而另一个则不能 谢谢 ID 在页面上应该是唯一的 当您有多个具有相同
  • 选择 Mysql 触发器内变量的值

    好吧 我见过很多类似的问题 但爬过答案并不能让我的触发错误消失 我需要的结果是 每当在数据库表中插入新值时temp pool 如果新地址不等于具有相同地址值的先前地址值 则会触发dev id正如这个NEW dev id将新值插入位置表 这是
  • Asp.net Mvc:为什么浏览器寻找 favicon.ico

    我知道有一个解决方案可以停止 mvc 框架处理 favicon ico 请求 solution https stackoverflow com questions 4624190 mvc does the favicon ico also
  • WPF组合框奇怪的问题

    我将 SortedListbox 绑定到 WPF 组合框 一切都很好 当我选择第一个 仅第一个 项目时 问题发生了 问题是 在选择第一个项目后选择新项目时 SelectedValue 不会更改 假设组合中第一项的 SelectedValue
  • 访问 PCI 配置空间中寄存器的正确方法

    当您需要访问 PCI 配置空间中的寄存器时 是否只需使用内置 BIOS 函数将 DWORD 读 写到配置空间中 例如 如果我尝试使用位于 B0 D31 F1 上的 IDE 控制器 我是否可以使用该 BDF 作为 BIOS 功能的参数来继续读
  • DNN 重定向循环

    我正在尝试通过创建数据库副本并将 net 文件复制到新文件夹中来复制用于测试目的的现有 DNN 门户 在复制站点并更改 Web 配置以指向新站点并更改数据库中的别名后 我收到此错误 此网页有重定向循环 网页位于http xxx us xxx
  • zend框架中的动态自定义ACL?

    我需要一个解决方案 允许经过身份验证的用户访问某些控制器 操作 而不是根据其用户类型 即 管理员或普通用户 尽管我稍后可能会使用标准 ACL 添加此内容 但要根据其用户的当前状态 例如 他们成为该网站的会员已经超过 1 周了吗 他们完整填写
  • 如何在recyclerview中显示加载消息

    我有一个 recyclerview 我想在回收器填充来自 json 的数据时显示 正在加载 消息或旋转圆圈 这是我的回收商的代码 arrayList new ArrayList lt gt adapter new ListAdapterGr
  • Palm Pre 框架

    我有一定的网络开发经验 不是我的主要技能 但我的基础知识相当不错 我非常缺乏的是现代 JS 框架 Prototype jQuery YUI 等 的知识和经验 我想和他们一起玩 最终都会有 但需要从一个开始 问题是这样的 我是very最终有兴
  • C++11 非静态成员初始值设定项和删除的复制构造函数

    我正在尝试使用 GCC 4 7 2 MinGW 编译以下简单代码 这里我使用 C 11 功能 非静态成员初始值设定项 include
  • 有什么办法可以有异步消息框吗?

    或者我必须使用线程 C 不 没有 或者 您可以创建 非模式对话框
  • 使用模型名称和外键模型的区别

    In the Django 文档 https docs djangoproject com en dev ref models fields foreignkey条目为ForeignKey 它说 如果需要在尚未定义的模型上创建关系 可以使用
  • PuTTY plink发送control+C

    我正在使用 Putty plink 命令行实用程序在 UNIX 服务器上运行一些脚本 我使用 m 选项 plink ssh pw xxx myserver m file txt 文件 file txt 包含要执行的命令列表 并且是使用某些应
  • Twitter API 仅应用程序模式身份验证

    我尝试集成 STTwitter 框架 Github 项目 以与 Twitter API 1 1 进行交互 在我的开发帐户中创建应用程序后 我使用 OAuth 凭据进行仅应用程序模式身份验证 无论如何 我收到以下错误 但我不知道如何修复它 错
  • 这是在存储过程中使用 UNION ALL 的正确方法吗?

    这是正确的方法吗UNION ALL在存储过程中 ALTER PROCEDURE GetHomePageObjectPageWise PageIndex INT 1 PageSize INT 10 PageCount INT OUTPUT w
  • 为云函数指定区域时出现异常“firebase.functions() gets ... no argument ...”

    我正在关注 Firebase文档 https firebase google com docs functions locations http and client callable functions为了从网页调用位于不同区域的可调用函
  • 如何在 gradle kotlin-dsl 中覆盖任务

    在 Groovy 中 我重写了这样的任务 task jar overwrite true 如何使用 Kotlin dsl 做到这一点 我知道我可以创建这样的任务 tasks val jar by creating 但我找不到将其声明为覆盖的
  • 如何从 JSON 中删除不需要的字符串属性

    假设我的输入遵循 JSON obj x y test str myStr Hi 我想删除所有空字符串和值为N A使输出变为 obj y test str myStr Hi 请注意 上面的输入只是一个示例输入文件 我尝试写一些代码 var s
  • libcurl -curl_easy_perform() 失败:SSL CA 证书有问题(路径?访问权限?)

    我在 Windows 7 x64 上使用 mingw64 MSYS2 从下面的链接编译了简单的 libcurl 示例程序 https curl se libcurl c simple html https curl se libcurl c