cURL HTTPS не работает после кросс-компиляции - PullRequest
0 голосов
/ 08 марта 2020

Я использую cURL в Ubuntu для запроса API с HTTPS, и все отлично работает с установленными пакетами Ubuntu. Поскольку я хочу кросс-компилировать это приложение, я статически собираю zLib, OpenSSL & cURL.

Как я скомпилировал zLib:

CC=x86_64-w64-mingw32-gcc ./configure --prefix=/usr/x86_64-w64-mingw32 --static
make && sudo make install

Как я скомпилировал OpenSSL:

CROSS_COMPILE="x86_64-w64-mingw32-" ./Configure -DHAVE_STRUCT_TIMESPEC -lz -lws2_32 zlib mingw64 --prefix=/usr/x86_64-w64-mingw32
make && sudo make install

Как я скомпилировал cURL:

./configure --prefix=/usr/x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --enable-optimize --with-ssl=/usr/x86_64-w64-mingw32 --disable-shared
make && sudo make install

У меня нет ошибок, и вывод конфигурации cURL показывает, что SSL & zLib включены.

Я компилирую свое приложение с помощью следующей командной строки:

x86_64-w64-mingw32-g++ Dev/C++/Projets/wxTrainning/*.cpp -static  $(curl-win --cflags --static-libs) -lpthread -static-libgcc -static-libstdc++

curl-win - это псевдоним curl-config в моей папке сборки. Вот выходные данные:

curl-win --cflags

-DCURL_STATICLIB -I/usr/x86_64-w64-mingw32/include

curl-win --stati c -libs

 /usr/x86_64-w64-mingw32/lib/libcurl.a -L/usr/x86_64-w64-mingw32/lib -L/usr/x86_64-w64- 
 mingw32/lib -lssl -lcrypto -lssl -lcrypto -lgdi32 -lwldap32 -lz -lws2_32

curl-win --libs

-L/usr/x86_64-w64-mingw32/lib -lcurl -lssl -lcrypto -lssl -lcrypto -lgdi32 -lwldap32 -lz -lws2_32

curl-win --configure

'--prefix=/usr/x86_64-w64-mingw32' '--host=x86_64-w64-mingw32' '--with-ssl=/usr/x86_64-w64-mingw32' '--disable-shared' 'host_alias=x86_64-w64-mingw32'

Итак, моя проблема:

Когда я компилирую на Linux все в порядке, и я могу использовать HTTPS, я получил ответ. Но когда я кросс-компилирую и запускаю его с вином, HTTPS больше не работает. Я могу получить ответ от основного HTTP-запроса c, но не с HTTPS. Я всегда получаю 0 код возврата. Похоже, SSL не включен, но конфигурация говорит мне, что все в порядке.

Я полностью потерян .. Если кто-то может помочь, я был бы признателен. Спасибо, Лоран.

РЕДАКТИРОВАТЬ: Он работает без использования безопасных SSL и TLS, как указано в комментарии

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 0);

РЕШЕНО:

I чтобы это заработало, скопировав ключ моего SSL-сертификата publi c и попросив cURL использовать его с:

curl_easy_setopt(curl, CURLOPT_CAINFO, "cert.pem");
...