我試圖使用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。
正在做這個在Windows平臺上? – 2011-05-24 21:49:25
@ this.josh:是的,我知道我不能在其他平臺上使用CryptAPI,但基於nix的可以使用平臺ca-bundle.crt,對吧?如果沒有其他可能,我可能會最終將其捆綁在一起以獲得可靠性。 – 2011-05-31 04:42:53