使用libcurl +自签名证书:无法获得颁发者证书

时间:2019-10-23 07:59:00

标签: ssl curl openssl ssl-certificate self-signed

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

0 个答案:

没有答案