libcurl https示例错误
我从curl网页下载并稍微修改了这个c。测试应用程序使用我以前构建的curl.dll。如果不禁用对等验证,我无法连接到https服务器 我的原始测试申请:libcurl https示例错误,c,curl,https,ssl-certificate,C,Curl,Https,Ssl Certificate,我从curl网页下载并稍微修改了这个c。测试应用程序使用我以前构建的curl.dll。如果不禁用对等验证,我无法连接到https服务器 我的原始测试申请: curl_global_init(CURL_GLOBAL_DEFAULT); CURL *curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_URL, "h
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK)
printf ("res = %d curl_easy_perform() failed: %s\n",res, curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
输出为:
* Trying XX.XXX.XXX.XX...
* TCP_NODELAY set
* Connected to example.com (XX.XXX.XXX.XX) port 443 (#0)
* ALPN, offering http/1.1
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
res = 60 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
如果我从mozilla下载一个文件并将其存储在我的exe旁边,并将示例改编为:
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_CAPATH, ".");
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK)
printf ("res = %d curl_easy_perform() failed: %s\n",res, curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
我仍然收到一条错误消息
* Trying XX.XXX.XXX.XX...
* TCP_NODELAY set
* Connected to example.com (XX.XXX.XXX.XX) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: none
CApath: .
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
res = 60 curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates
如果我禁用对等验证,它可以正常工作
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_CAPATH, ".");
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK)
printf ("res = %d curl_easy_perform() failed: %s\n",res, curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
有人知道这种行为的原因吗?我必须设置对等证书吗?我还没有找到这方面的设置程序。我通过添加选项CAINFO
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_CAINFO, "cacert.pem");
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK)
printf ("res = %d curl_easy_perform() failed: %s\n",res, curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();