• 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
533 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 (346,320 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 (346,320 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 285 wizyt
pytanie zadane 26 listopada 2019 w HTML i CSS przez Szumi Nowicjusz (220 p.)
+1 głos
1 odpowiedź 306 wizyt
pytanie zadane 5 lutego 2019 w HTML i CSS przez Helio Dor Nowicjusz (230 p.)
0 głosów
1 odpowiedź 488 wizyt

92,674 zapytań

141,576 odpowiedzi

320,046 komentarzy

62,038 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

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!

...