Visual c++ HTTP+;通过curl和visualc+的SSL+;2010

Visual c++ HTTP+;通过curl和visualc+的SSL+;2010,visual-c++,ssl,curl,Visual C++,Ssl,Curl,我有一份自签名的证书,以及一个基于Apache2.x的网站,带有此证书。 只想通过SSL从我的软件访问此站点 采取以下行动: int _tmain(int argc, _TCHAR* argv[]) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_U

我有一份自签名的证书,以及一个基于Apache2.x的网站,带有此证书。 只想通过SSL从我的软件访问此站点

采取以下行动:

int _tmain(int argc, _TCHAR* argv[])
{

CURL *curl;
  CURLcode res;

  curl_global_init(CURL_GLOBAL_DEFAULT);

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://mysite.com");
    curl_easy_setopt(curl, CURLOPT_CAINFO, "n.crt");
 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_CAPATH, "D:\\");
 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L) ;
 curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT); 

    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl);
    /* Check for errors */ 
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }

  curl_global_cleanup();

    return 0;
}
但每次我得到:

* About to connect() to mysite.com port 443 (#0)
*   Trying 1.1.1.1... * connected
* Connected to mysite.com (1.1.1.1) port 443 (#0)
* error setting certificate verify locations:
  CAfile: n.crt
  CApath: D:\

* Closing connection #0
* Problem with the SSL CA cert (path? access rights?)
curl_easy_perform() failed: Problem with the SSL CA cert (path? access rights?)
Press any key to continue . . .
你能告诉我,我做错了什么吗

附言:

  • Win7 x64
  • MSVC++2010
  • curl 7.19.3(i386-pc-win32)libcurl/7.19.3 OpenSSL/0.9.8j协议:tftp ftp telnet dict ldap http文件https ftps

查找n.crt的位置。当可执行文件运行时,所有文件检查都是相对于其路径的。因此,要么将n.crt放在可执行文件的文件夹中,要么在设置CURLOPT_CAINFO时放置文件的绝对路径。否则,请使用证书信息文件的相对路径