2013-03-18 60 views
0

我有一个自签名证书和基于apache 2.x的网站,带有这个证书。 只想通过SSL使用我的软件访问本网站。通过curl和Visual C++ 2010的HTTP + 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 . . . 

请你的意见时,我做错了吗?

PS:

  • Win7的X64
  • MSVC++ 2010
  • 卷曲7.19.3(I386-PC-win32)中的libcurl/7.19.3的OpenSSL/0.9.8j协议:FTP TFTP的telnet字典LDAP http文件https ftps

回答

0

查找n.crt的位置。当可执行程序运行时,所有文件检查都与其路径有关。因此,将n.crt放入可执行文件夹中,或者在设置CURLOPT_CAINFO时放置文件的绝对路径。否则使用证书信息文件的相对路径。