Hello, I have a problem with a program I'm writing. The mission is to get a dataset from a webpage using curl. The data I want to get is secured by a 2-factor authentication. HTTPS with basic-auth and a pck12-certificate with a password. When using the commandline-version of curl, I have no problems to get the result I'm expecting. But I'm runnig into trouble when I'm using the libcurl-version within my sourcecode.
Fact: The following syntax is full functional: curl --cert my_client_cert.p12 --cert-type p12 --pass pwd_for_my_client_cert.p12 --user webuser:pwd_for_webuser https://some_webserver.com:12345/getdata?item=01239-876543 The getdata?item represents the subject(itemnumber) for which I want the dataset. What I going to do is to automate this process to have a program in which I place the mobilenumber as the only input. The the rest is done by the program like retrieve the json-data from the server, extract the nessessary data to a database. I am doing this with the C++-builder (XE7) of Embarcadero. I have placed the files like libcurl.dll and the header-files in the right places. I can compile my program using the libcurl easy interface. So far, there's no problem. But I got stuck when configuring the curl_easy_setopt-parameters. With my config I'm only receiving the error 60 which says that there is a problem with the "CURLE_PEER_FAILED_VERIFICATION" " "The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK." The displayed Message is: "SSL peer certificate or SSH remote ey was not OK" For better understanding I'm posting a snippet of the code to do basic dataaquisition. ----------------------------------------------------------- char* certPath = "C:\\Pat\\to\\Certificate"; char* certName = "my_client_cert.p12"; char* certPass = "pwd_for_my_client_cert.p12"; char* certType = "P12"; char* webUser = "webuser"; char* webUserPass = "pwd_for_webuser"; String webAddress = "https://some_webserver.de:12345/getdata?mnum=01239876543"+item_nr; // String because the item is coming from an edit-field. The result has to be converted after combining the address with the item. char* web_Address = convertToAnsistr(webAddress); curl = curl_easy_init(); if(curl){ curl_easy_setopt(curl, CURLOPT_CAPATH, certPath); curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, certType); curl_easy_setopt(curl, CURLOPT_SSLCERT, certName); curl_easy_setopt(curl, CURLOPT_KEYPASSWD, certPass); curl_easy_setopt(curl, CURLOPT_USERNAME, webUser); curl_easy_setopt(curl, CURLOPT_PASSWORD, webUserPass); // Demo or not? as a debug function if(DemoMode == true){ curl_easy_setopt(curl, CURLOPT_URL, DemoData); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); } if(DemoMode == false){ curl_easy_setopt(curl, CURLOPT_URL, web_Address); } /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK){ StatusBar1->Panels->Items[1]->Text = "curl_easy_perform() failed - Code: "+IntToStr(res); StatusBar1->Panels->Items[2]->Text = curl_easy_strerror(res); } /* always cleanup */ curl_easy_cleanup(curl); } ----------------------------------------------------------- I'm using the following versions: libcurl.dll 7.71.1 libssl-1_1.dll 1.1.1.7 libcrypto-1_1.dll 1.1.1.7 ... and here's the point I'm stuck. The more I'm trying to solve the prolem the more I feel confused because I think I took the right way to get the result from the server. Perhabs there's someone out there to lend me a hand to get me back on the right track :) Maybe it's easy, but I can't see the solution. Many thanks in advice to you ------------------------------------------------------------------- Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html