• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Curl i certyfikat SSL na Windows 10 i nowsze

Object Storage Arubacloud
0 głosów
482 wizyt
pytanie zadane 29 marca 2023 w C i C++ przez Dzieciak :) Początkujący (440 p.)
zamknięte 30 marca 2023 przez Dzieciak :)

Hej, mam mały problem z certyfikatem do mojej strony www przez curl w c++.

Chodzi o to, że na sprzęcie na którym koduje wszystko działa, ale gdy dodam certyfikat z mojej strony www i chcę aby strona była zaufana przez curlib, to mam taki wynik w konsoli 

Post()
Thread
Post() - curl
*   Trying 37.48.70.83:443...
* Connected to www.gigasoft.com.pl port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* schannel: added 1 certificate(s) from CA file 'ca.crt'
* schannel: CertGetCertificateChain trust error CERT_TRUST_IS_UNTRUSTED_ROOT
* Closing connection 0
* schannel: shutting down SSL/TLS connection with www.gigasoft.com.pl port 443
Post() - error curl: SSL peer certificate or SSH remote key was not OK

A tak wygląda funkcja w C++

size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp) {
    std::string* data = (std::string*)userp;
    data->append((char*)buffer, size * nmemb);
    return size * nmemb;
}

std::string GigaSoftLib::Post(std::string url) {
    printf("Post()\n");
    std::string data;
    std::thread t([&]() {
        CURL* curl;
    CURLcode res;
    printf("Thread\n");

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if (curl) {
        printf("Post() - curl\n");
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
        curl_easy_setopt(curl, CURLOPT_CAPATH, "./");
        curl_easy_setopt(curl, CURLOPT_CAINFO, "ca.crt");
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            secret->variables.general.internet = 0;
            secret->variables.info.msg = "Not internet connection";
            printf("Post() - error curl: %s\n", curl_easy_strerror(res));
        }
        else {
            secret->variables.general.internet = 1;
        }
        curl_easy_cleanup(curl);
        curl_global_cleanup();
    }
    else {
        printf("Post() - error curl: failed to initialize\n");
    }
        });
    t.join();
    std::string otp = url + "\n\n\n\n\n" + data;
    // printf(otp.c_str());
    return data;
}

Certyfikat na stronie www to Let's Encrypt, jeśli ktoś mi może podpowiedzieć jak to prawidłowo dodać i zrobić aby user nie musiał ręcznie instalować certyfikatu byłoby pięknie. Chce dodać że używam Visual Studio Comunity 2022!

Dziękuje wszystkim za podpowiedzi :) 

komentarz zamknięcia: Ustawienie zapory (fire wall) na systemie operacyjnym wyłączone i działa. Fuck The MicroSoft
komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)

Gdy ja testuję taki kod: 

size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp) {
    std::string* data = (std::string*)userp;
    data->append((char*)buffer, size * nmemb);
    return size * nmemb;
}

std::string GigaSoftLib::Post(std::string url) {
    printf("Post()\n");
    std::string data;
    std::thread t([&]() {
        CURL* curl;
    CURLcode res;
    printf("Thread\n");

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if (curl) {
        printf("Post() - curl\n");
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); // wyłączamy weryfikację hosta
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // wyłączamy weryfikację certyfikatu serwera
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            secret->variables.general.internet = 0;
            secret->variables.info.msg = "Not internet connection";
            printf("Post() - error curl: %s\n", curl_easy_strerror(res));
        }
        else {
            secret->variables.general.internet = 1;
        }
        curl_easy_cleanup(curl);
        curl_global_cleanup();
    }
    else {
        printf("Post() - error curl: failed to initialize\n");
    }
        });
    t.join();
    std::string otp = url + "\n\n\n\n\n" + data;
    // printf(otp.c_str());
    return data;
}

To na laptopie dostaję takie coś

Post() - curl
* getaddrinfo() thread failed to start
* Could not resolve host: www.gigasoft.com.pl
* Closing connection 0
Post() - error curl: Couldn't resolve host name

I właśnie nie wiem gdzie ja mam błąd!

Jak UI używam ImGui https://github.com/ocornut/imgui

I w konsoli właśnie mi curl, wypluwa taką ciekawostkę! 

 

komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)
Przetestowałem na vbox;ie i wszystko cyka, a na pewnym laptopie już nie
komentarz 30 marca 2023 przez adrian17 Ekspert (344,860 p.)

No, wygugluj ten właściwy błąd, czyli:

* getaddrinfo() thread failed to start

Na oko, pierwsze co mi z googla wyskoczyło to że może być np wina firewalla.

komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)

@adrian17 

Tutaj dodaje link do kodu pod microsoft dla dodanie reguły dla dodania aplikacji do bezpiecznych 

 

Kod na stronie Microsoft

komentarz 30 marca 2023 przez adrian17 Ekspert (344,860 p.)
Uhh... podtrzymuję że nic z tego nie powinno być potrzebne do robienia na poziomie programu.

I to nie jest "dodawanie aplikacji do bezpiecznych" tylko zmienianie reguł firewalla...

Podobne pytania

0 głosów
2 odpowiedzi 276 wizyt
pytanie zadane 26 listopada 2019 w HTML i CSS przez Szumi Nowicjusz (220 p.)
+1 głos
1 odpowiedź 287 wizyt
pytanie zadane 5 lutego 2019 w HTML i CSS przez Helio Dor Nowicjusz (230 p.)
0 głosów
1 odpowiedź 482 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...