2011-05-19 29 views
3

我試圖使用https使用cURL 7.21.1與OpenSSL 1.0.0d,使用OpenSSL的內置capi引擎進行證書頒發機構檢查,但是它返回curl_easy_perform上的CURLE_SSL_CACERT(60) ()。HTTPS使用cURL,使用openssl與capi引擎

#include <openssl/conf.h> 
#include <openssl/engine.h> 
#include <openssl/ssl.h> 
#define CURL_NO_OLDIES 
#define CURL_STATICLIB 
#include <curl.h> 

// Don't forget libeay32.lib, ssleay32.lib, curl.lib 
#pragma comment(lib, "ws2_32.lib") 
#pragma comment(lib, "wldap32.lib") 
#pragma comment(lib, "crypt32.lib") 

int main(int argc, char* argv[]) 
{ 
    OPENSSL_no_config(); 
    ENGINE_load_capi(); 
    // Same effect, despite ok = 1 both times: 
    // ENGINE* capi = ENGINE_by_id("capi"); 
    // int ok = ENGINE_init(capi); 
    // ok = ENGINE_register_complete(capi); 

    CURLcode e = curl_global_init(CURL_GLOBAL_DEFAULT); 
    CURL* curl = curl_easy_init(); 

    e = curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com/"); 
    e = curl_easy_perform(curl); // returns CURLE_SSL_CACERT 
    return 0; 
} 

如果我測試 「的OpenSSL的s_client.First -connect www.google.com:443」 具有以下配置:

openssl_conf = openssl_init 

[openssl_init] 
engines = engine_section 

[engine_section] 
capi = capi_config 

[capi_config] 
engine_id = capi 
init=1 

基於http://www.mail-archive.com/[email protected]/msg62249.html,我收到:

verify error:num=20:unable to get local issuer certificate 

的讓我感到困惑的是,當我第一次編寫實際的程序時,它失敗了,直到我添加了ENGINE_load_capi(),它才發生了同樣的錯誤。 我想避免使用CA軟件包,因爲實際的程序可能在隨機公司網絡中運行,並且他們可能使用專用CA。

+0

正在做這個在Windows平臺上? – 2011-05-24 21:49:25

+0

@ this.josh:是的,我知道我不能在其他平臺上使用CryptAPI,但基於nix的可以使用平臺ca-bundle.crt,對吧?如果沒有其他可能,我可能會最終將其捆綁在一起以獲得可靠性。 – 2011-05-31 04:42:53

回答

0

也許你可以嘗試添加下面一行在您的文件上,你必須訪問域。 curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,false);