• 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
504 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 29 marca 2023 przez adrian17 Ekspert (345,160 p.)
Chwila, czegoś nie rozumiem... po co w ogóle ręcznie dodajesz jakikolwiek certyfikat do klienta curla? Jak używasz zwykły publiczny Let's Encrypt.
komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)
Zapytałem się GPT openai, o powiedział że można tak dodać.

Szukałem na Youtube, ale nic ciekawgo.

Chcę abym miał połączenie z moją stroną www na której mam API w php, na innych komputer przez aplikację w c++.

Powiem tak, na komputerze na którym zaprogramowałem aplikację wszystko działa, ale na innym komputerze już nie. Wiem że Windows dodaje automatycznie aplikację do listy zaufanych itp na komputerze "deweloperskim" itp.
komentarz 30 marca 2023 przez adrian17 Ekspert (345,160 p.)

powiedział że można tak dodać

Można dodać, ale... po co dodać?

To zwykła publiczna strona www. Dowolna osoba może w tym momencie wpisać `https://www.gigasoft.com.pl` w przeglądarce albo do curla i wszystko działa, nie trzeba niczego specjalnie instalować/dodawać/konfigurować/"ufać" po stronie klienta.

 

Więc uhh zobacz co się stanie jeśli nie będziesz w ogóle kombinował z ca.crt?

komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)
Ja wiem, ale chodzi o to że chcę tylko uzyskać efekt, że ten funkcja z curl, będzie działać na innych komputerach. Jesteś wstanie mi pomóc? Jestem trochę słabo ogarnięty co do bezpieczeństwa itp :(

 

Bo jak nawet nie mam w kodzie tego certyfikatu to na innym kompie niż tym co programuje mam błąd curl'a, że nie jest wstanie odnaleźć host'a o takiej nazwie
komentarz 30 marca 2023 przez Dzieciak :) Początkujący (440 p.)

@adrian17, Chodzi mi również o to aby kod i połączenie było bezpieczne 

1
komentarz 30 marca 2023 przez adrian17 Ekspert (345,160 p.)

Bo jak nawet nie mam w kodzie tego certyfikatu to na innym kompie niż tym co programuje mam błąd curl'a, że nie jest wstanie odnaleźć host'a o takiej nazwie

No, to to nie brzmi jak błąd związany jakkolwiek z SSLem.

Powtórzę: Twoja strona to strona jak każda inna. Nie potrzebujesz żadnego specjalnego certa czy konfiguracji żeby zrobić curlem szyfrowane zapytanie do google.com, to nie potrzebujesz też do www.gigasoft.com.pl.

Właśnie na szybko wklepałem taki minimalny "hello world" i wszystko działa, łączy się i wypluwa HTMLa.

int main(){
    std::string data;
    CURL* curl;
 
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, "https://vps.gigasoft.com.pl");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    curl_global_cleanup();

    std::cout << data << "\n";
}

 

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 (345,160 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 (345,160 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 279 wizyt
pytanie zadane 26 listopada 2019 w HTML i CSS przez Szumi Nowicjusz (220 p.)
+1 głos
1 odpowiedź 298 wizyt
pytanie zadane 5 lutego 2019 w HTML i CSS przez Helio Dor Nowicjusz (230 p.)
0 głosów
1 odpowiedź 485 wizyt

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 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!

...