ZBLOG

Host iotda.cn-north-4.myhuaweicloud.com:443 was resolved. * IPv6: (none) * IPv4: 49.4.112.58, 49.4.112.59 * Trying 49.4.112.58:443... * ALPN: curl offers http/1.1 curl_easy_perform() failed: SSL peer certificate or SSH remote key was not OK * cl...

curl_easy_perform() failed: SSL peer certificate or SSH remote key was not OK 这个错误表明在进行 HTTPS 请求时,cURL 在验证服务器的 SSL 证书时遇到了问题。这通常与以下几种情况有关:

1. 无效的 SSL 证书

如果服务器使用的是自签名证书或无效证书,cURL 将拒绝连接。要解决此问题,你可以:

  • 使用 -k--insecure 参数(不推荐用于生产环境):
  curl -k https://iotda.cn-north-4.myhuaweicloud.com
  • 将 CA 根证书添加到系统中:如果你有正确的 CA 根证书,可以将其安装到你的操作系统中。

2. 缺少 CA 根证书文件

确保你的 cURL 安装可以找到并访问有效的 CA 根证书。如果没有,它无法验证服务器提供的 SSL 证书。你可以通过设置 CURL_CA_BUNDLE 环境变量来指定根证书的位置:

export CURL_CA_BUNDLE=/path/to/your/cacert.pem

3. 过期或被撤销的证书

检查目标 URL 的 SSL/TLS 证书是否已经过期或已被撤销。你可以使用以下命令来检查当前 SSL 证书的信息:

echo | openssl s_client -connect iotda.cn-north-4.myhuaweicloud.com:443 -servername iotda.cn-north-4.myhuaweicloud.com

这将显示关于该站点 SSL 连接的信息,包括其有效性、CA 等。

4. cURL 不支持 SNI

在某些情况下,如果服务器需要 Server Name Indication (SNI) 功能,而你的 cURL 或 OpenSSL 不支持,则可能会导致此问题。确保你使用的是最新版本的 cURL,并且编译时启用了 SNI 支持。

示例代码更新

下面是一个示例,展示如何设置和处理可能的 SSL 问题:

#include <iostream>
#include <curl/curl.h>

size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl;
    CURLcode res;
    std::string readBuffer;

    curl_global_init(CURL_GLOBAL_DEFAULT);

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://iotda.cn-north-4.myhuaweicloud.com");
        
        // 设置回调函数来接收数据
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);

        // 启用详细调试输出
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        
        // 忽略 SSL 验证(只用于测试,不推荐在生产中使用)
        // curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 
        
        // 如果需要的话,可以指向 CA 文件:
        // curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/your/cacert.pem");

        res = curl_easy_perform(curl);

        if (res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            std::cout << "Response Data:\n" << readBuffer << std::endl;
        }

        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return 0;
}

总结

通过以上步骤,你应该能够解决“SSL peer certificate or SSH remote key was not OK”错误。如果仍然有疑问,请提供更多信息,我会很乐意进一步帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=6656

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?