1。为什么我使用libcurl代码连接失败返回失败,无法获得颁发者证书,但是使用curl命令可以连接确定??
2。我的SSL证书环境:
- 服务器使用三级证书,并且是自签名证书。
- 我使用CA证书(/tmp/ca.pem)和第二级证书(/tmp/ca_sub_2.pem)也是自签名的。
3。我的SDK libcurl版本是curl-7.65.3
4。我的SDK openssl版本是openssl-1.1.1a
5。我的测试代码(用C语言编写):
curl = curl_easy_init();
if(curl!=NULL){
printf("Usage:file<%s>;\n",argv[1]);
curl_easy_setopt(curl,CURLOPT_URL,argv[1]);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,&save_response_callback);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&response);
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L);
curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);
curl_easy_setopt(curl,CURLOPT_POST,1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, argv[2]);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(argv[2]));
curl_easy_setopt(curl,CURLOPT_CAPATH,"/tmp/");
curl_easy_setopt(curl,CURLOPT_CAINFO,"/tmp/ca_sub_2.pem");
curl_easy_setopt(curl,CURLOPT_CERTINFO,1L);
curl_easy_setopt(curl,CURLOPT_TIMEOUT,30);
res = curl_easy_perform(curl);
if(res != CURLE_OK){
printf("curl_wasy_perform error = %s(%d)\n",curl_easy_strerror(res), res);
}
curl_easy_cleanup(curl);
}
我想使用libcurl +自签名证书连接到https服务器,连接失败,然后返回:
- 成功设置证书验证位置:
- CAfile:/tmp/ca_sub_2.pem
CApath:/ tmp /
- SSL证书问题:无法获得颁发者证书
- 关闭连接0
6。我使用curl命令测试连接正常:
- curl命令版本:curl 7.47.0
- curl命令是:curl --cacert /tmp/ca_sub_2.pem -d post_msg post_url -v