根据你提供的调试输出,cURL 成功建立了与服务器的 SSL/TLS 连接,并尝试进行 HTTPS 请求。但在证书验证时,它报告了以下信息:
SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
这表示 cURL 在验证服务器证书时无法找到本地颁发者证书。这通常发生在你的环境中缺少必要的根证书或中间证书链。为了进一步排查和解决这个问题,可以考虑以下步骤:
1. 确保有合适的 CA 根证书
确保你的嵌入式设备上有 CA 根证书文件,这个文件通常用于验证 SSL/TLS 连接中的服务器证书。如果没有,你可以从 curl 的官方网站 下载最新的 CA 根证书。
然后,在你的 cURL 设置中指定这个文件的路径:
curl_easy_setopt(curl, CURLOPT_CAINFO, "path/to/cacert.pem");
2. 忽略 SSL 验证(不推荐)
虽然可以通过设置如下选项来忽略 SSL 验证,但这并不安全,仅建议在开发或测试环境使用,而不是生产环境:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
3. 更新 cURL 和 OpenSSL
如果可能的话,确保你使用的是最新版本的 cURL 和 OpenSSL,以避免由于过时而引起的问题。
4. 使用 HTTP 而非 HTTPS
如果服务允许且在开发阶段可接受的话,可以尝试将请求改为 HTTP 而非 HTTPS。这将绕过所有 SSL 验证相关的问题,但同样要注意这样会带来安全风险。
5. 获取更多调试信息
如前所述,可以启用更详细的调试信息,以帮助进一步了解发生了什么:
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
查看这些额外的信息可能会揭示出更多上下文,帮助诊断问题所在。
如果采取上述步骤后问题依旧存在,请检查是否有其他网络或防火墙限制影响了到该域名及其端口(443)的访问。
内容由零声教学AI助手提供,问题来源于学员提问