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助手提供,问题来源于学员提问