Eine Verbindung zur einer MySQL Datenbank sicher herstellen?



  • @firefly Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss. Im Programm Hardcoden ist natürlich keine Option. Und verschleiern möchte ich mein Source-Code. Ich habe zwar ein Obfuscator, der das kann, allerdings nur für .Net Framework 4.8 wie gesagt, die kurzen Update Intervalle Einens Frameworks ist viel zu Kurz, klar braucht man nicht immer das neuste, aber Aktuell halten muss ich trotzdem irgendwann mal.



  • Ich verstehe jetzt echt nicht was das Problem ist. Lerne C++, lerne wie HTTP-requests auszusehen haben. Stell einen Server hin, lass einen Webserver drauf laufen der PHP ausführen kann. Schreib Deine Middleware in PHP und alles ist gut!?



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss. Im Programm Hardcoden ist natürlich keine Option.

    Öhm Wieso muss man das tun? Nur weil das Framework so was anbietet, ist es noch lange kein muss. Und das als Begründung wieso C# überhaupt nicht in Frage kommt ergibt für mich keinen sinn.
    Die restlichen Gründe schon, aber das hier nicht.

    Du kannst In C# genau das selbe tun was du jetzt mit C++ vorhast.
    Einen Client schreiben, welcher via HTTP Requests mit einem WebServer spricht um daten abzufragen/zu ändern. Egal ob die Daten dann auf Serverseite in einer DB oder sonst wie abgelegt sind.
    Mit C# ist es sogar zum teil einfacher weil die entsprechenden Klassen Bestandteil des .Net Framework sind (Stichpunkt HttpClient).

    @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    die kurzen Update Intervalle Einens Frameworks ist viel zu Kurz, klar braucht man nicht immer das neuste, aber Aktuell halten muss ich trotzdem irgendwann mal.

    Das gleiche Problem hast du auch mit C++. Und zwar musst du die verwendete Third-Party library, welche du für HTTP Requests nutzt, auch regelmäßig aktuell halten.

    Ich habe irgendwie das Gefühl du vermischst hier mehrere Themen/Punkte:

    1. Welche Sprache wird für die Erstellung des Clients benutzt
    2. Daten sollen in einer DB abgelegt werden und wie greift der Client darauf zu
    3. Zugangsdaten für die DB sollen geschützt werden.

    Aufgrund deiner Aussagen scheinst du die Punkte 1 und 2 zu vermischen wenn es um das .Net Framework bzw. C# geht.
    Nur weil es für das .Net Framework das Entity Framework gibt, welche auch direkt mit einer DB kommunizieren kann, heißt das nicht, dass man das generell so machen muss.
    Falls das Entity Framework das nur so kann, dann ist diese Framework dann schlicht die falsche Wahl um damit den Client zu entwickeln.

    Ansonsten kann ich mich nur anschließen was Swordfish gesagt hat.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Wenn ich dich richtig verstanden habe, müsste das dann so aussehen:

    char* encoded = curl_easy_escape(curl, "name=test", 0);;
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, encoded);
    

    Oder habe ich dich missverstanden?

    Du hast mich misverstanden 🙂
    So wie du das schreibst, wir der String "name=test" als ganzes URL-encoded. Das ist aber nicht Sinn der Sache. Das = Zeichen soll ja nicht encoded werden. Das ist ja das Trennzeichen zwischen dem Parameter-Namen und dem Wert.

    Also das mit der Variable 1 und 2 habe ich nicht wirklich verstanden.

    Das CURLOPT_POSTFIELDS wollte ich eigentlich in mehreren eingaben unterteilen, so das dies aus einer Variable statt statisch mit name=blabla steht.

    Da ich ja wesentlich mehr als nur ein String bei der PHP anfragen müsste, muss ich die CURLOPT_POSTFIELDS einer Variable versehen, damit diese auch wachsen kann. In den Dokus habe ich dies bezüglich nichts gefunden.

    Ich denke ein kleines Code-Beispiel ist einfacher als wenn ich versuche es mit Worten zu erklären...

    #include <string>
    #include <string_view>
    #include <memory>
    #include <iostream>
    
    #include <string.h>
    #include <limits.h>
    
    #include <curl/curl.h>
    
    struct FreeDeleter {
        void operator()(void* p) {
            free(p);
        }
    };
    
    template <class T>
    using UniqueFreePtr = std::unique_ptr<T, FreeDeleter>;
    
    // ACHTUNG: `name` darf keine Zeichen enthalten die URL-encoded werden müssten!
    void appendPostFieldParamAndValue(std::string& inout_postFields, CURL* easy, std::string_view name, std::string_view value) {
        if (value.size() > INT_MAX)
            throw std::runtime_error("meh");
        UniqueFreePtr<char> encodedValue{curl_easy_escape(easy, value.data(), static_cast<int>(value.size()))};
        if (!encodedValue)
            throw std::runtime_error("meh2");
    
        if (!inout_postFields.empty())
            inout_postFields.push_back('&');
    
        inout_postFields.append(name);
        inout_postFields.push_back('=');
        inout_postFields.append(encodedValue.get());
    }
    
    int main() {
        try
        {
            CURL* curl = curl_easy_init();
            if (!curl) {
                throw std::runtime_error("meh3)");
            }
    
            // Die Parameter die wir schicken wollen:
            std::string name = "Bob der Baumeister";
            std::string kundenNr = "123";
            std::string nochwas = "a, b, c";
    
            // Post-fields string aus den einzelnen Parametern bauen...
            std::string postFields;
            appendPostFieldParamAndValue(postFields, curl, "name", name);
            appendPostFieldParamAndValue(postFields, curl, "kundenNr", kundenNr);
            appendPostFieldParamAndValue(postFields, curl, "nochwas", nochwas);
    
            std::cout << "POST fields: " << postFields << "\n";
    
            curl_easy_cleanup(curl);
        }
        catch (std::exception const& e) {
            std::cout << std::endl << "Fehler: " << e.what() << std::endl;
            return 1;
        }
    }
    

    Ist das Normal, das ich in Wireshark keinerlei Bewegung unter http feststelle?

    Wenn du über HTTPS kommunizierst, dann ja.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss

    Nein, denn in C# wuerdest du es ebenfalls mit der gleichen middleware handhaben wie du es jetzt auch in cpp machen musst. Wie dir bereits genug leute mittlerweile erklaert haben duerften. Es hat schon seinen grund, warum du die antworten bekommst, die du bekommst.



  • @hustbaer Ich danke dir für das Beispiel. Das stimmt, name=test wollen wir so ja nicht. An Append habe ich überhaupt nicht gedacht 😬
    Ich werde wie alles hier testen, aber vielleicht kannst du mir oben die Frage beantworten, bei Boost.asio: Warum SSL auf einmal kein ding ist, wenn im Host: eine andere Domain drin steht?

    @Swordfish, @firefly und @Cardiac Ich glaube ihr Missversteht mich, das Entitiy Framework ist eigentlich eine gute Lösung, aber leider wie immer nur Halb durchdacht. Ich verstehe ehrlich gesagt eure Fragen nicht mehr: Warum sollte ich C# Verwenden wenn ich mich explizit auf C++ konzentriere? Ich habe in dem Formabschnitt für C++ rein geschrieben. Nicht bei C#. Ich habe jetzt schon Oft erklärt warum ich nicht mehr in C# Programmieren möchte. 😉

    Nachtrag: Ja stimmt, auch da braucht man die Middleware, obwohl das nur zum Teil Richtig ist. Das Entitiy Framework soll es ja einem erleichtern, Verbindung zur Datenbank aufzubauen, da gibt es keine Middleware. Das Einzige was man zusätzlich dann tun muss, ist ein weg zu finden die Zugangsdaten da abzulegen wo Sie sicher sind. Diese Tatsache könnte man dann Middleware nennen.

    Auch wenn man das vielleicht nicht wirklich nachvollziehen kann, warum auch immer? Ich könnte genauso gut in Java Programmieren, warum tu ich das nicht? Weil mein Source Code nicht für die Öffentlichkeit sein soll. Macht man bei PHP, JS Webseiten ja auch nicht, das die Source frei liegt. Es gibt viele Copy & Paste User, die nichts anderes machen, als den Code zu Kopieren und im eignen Projekt einzufügen.

    Solche Leute nennen sich dann Programmierer. Wenn man dadurch lernt, weil man wie durch Beispiele besser versteht ist das in Ordnung. Es ist auch in Ordnung wenn man von sich aus Helfen möchte oder seinen eignen Code zu Verfugung stellt. Aber in Java / C# werde ich Quasi dazu gezwungen. Ich habe auch nichts gegen Open Source, wenn man sich selbst dafür entschieden hat, ist das Super.

    Weil es einfacher ist, sollte ich C# nutzen? Ist es nicht, es hat wie C++ Vor und Nachteile. Natürlich bekommt man vieles auf dem Teller serviert, nur Wissen erlangt man dadurch nicht mehr wirklich.

    Wenn man alles abgenommen bekommt, lernt man auch nichts mehr. Ich sehe den ganzen Kram in PHP. Nimm dies und jene Framework, ist doch dann viel einfacher. Natürlich wenn man die dinge die man braucht schon X mal in PHP Vanilla Programmiert hat, sehe ich da auch kein Thema eine Abkürzung zu nehmen. Auch in der Firma, wo der Chef einen auf die Füße tritt weil das zu Lange dauert, macht dann sinn.

    Man kann doch Abkürzungen nehmen, dagegen sage ich nichts, aber man sollte in der Lage sein, auch ohne Frameworks und .Co zu programmieren. Deshalb habe ich die Grundlagen C++ und WinAPI gemacht. Und glaubt mir, durch die WinApi habe ich wesentlich mehr gelernt als gedacht. Die Console ist nicht immer gut 🙃

    Aktuell halten muss man jede Software die man geschrieben hat. Aber MS hat bis jetzt ab 2020 mit .Net 5 jedes Jahr ein Versionswechsel vorgenommen:

    Nov 2020 .Net 5
    Nov 2021 .Net 6
    Nov 2022 .Net 7
    Nov 2023 .Net 8

    Klar muss man nicht jede Net mitnehmen. aber dennoch macht es sinn, alle 2 Jahre. Wenn es Aktualisiert wird, dann muss das ganze Projekt wenn man Pech hat, jedes mal überarbeitet werden. Natürlich muss ich die Libs etc. auch Aktualisieren, nur hier ist nicht das ganze Projekt betroffen, sondern eventuell einige Teile des Programms. Außerdem ist ein Update der einzelnen genutzten Lib überschaubar, bei Net muss man erstmal Kilometerlangen Changelog durch Arbeiten.

    Obfuscator sind im Profi Bereich die .Net 6 können sehr teuer, wär das nicht so, dann würde ich vielleicht darüber nachdenken, C# nebenbei auch aufzubauen. Und bei .Net Framework 4.8 zubleiben ist keine Gute Lösung.

    So ich hoffe, jetzt sind alle Fragen bezüglich C# geklärt. Bitte seid mir nicht Böse, aber das ist halt meine Sicht auf die dinge. Ich verstehe ja auch eure Beweggründe mir das vorzuschlagen, aber wenn man sich zum X. Mal rechtfertigen muss, nervt das schon ein wenig. Sollte ich bei C++ komplett nach Wochen / Monaten versagen, dann werde ich freiwillig zurück zu C# gehen 😂

    PS. Eines meiner wichtigsten Argumente C++ zu Lernen und zu Programmieren ist der Spaß an die Sprache. Ja unfassbar, ich finde C++ Cool, auch wenn C++ manchmal sehr Undankbar ist 😀



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    @Swordfish, [...] Ich glaube ihr Missversteht mich

    Lies vielleicht nochmal was ich geschrieben habe.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Ich werde wie alles hier testen, aber vielleicht kannst du mir oben die Frage beantworten, bei Boost.asio: Warum SSL auf einmal kein ding ist, wenn im Host: eine andere Domain drin steht?

    Die "Host" Header ist dafür da mehrere Domains mit der selben IP zu hosten. D.h. du hast einen Server der Webseiten für mehrere Domains hostet, aber alles under der selben IP. Damit der Server weiss welche Seite der Client haben will, schickt der Client die "Host" Header mit. Eine Umleitung die für Host: stackoverflow.com definiert ist greift dementsprechend nicht wenn du Host: was-anderes.com schickst. Das erklärt mal warum du keine Umleitung bekommen hast. Was ich aber komisch finde ist dass du schreibst du hättest ein 200 OK zurückbekommen. Ich hätte eher einen 4xx Code erwartet.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    @Swordfish, @firefly und @Cardiac Ich glaube ihr Missversteht mich, das Entitiy Framework ist eigentlich eine gute Lösung, aber leider wie immer nur Halb durchdacht.

    Leider Missverstehst du was ich dir sagen wollte.
    Das Entity Framework musst du nicht nutzen, wenn du .net/C# nutzt!
    Auch hier vermischst du wieder die Programmiersprache mit dem zugriff auf die Datenbank. Und begründest damit unter anderem deine Entscheidung C#/.Net nicht nutzen zu wollen.
    Und darauf wollte ich, und auch andere, darauf hinweise, dass du hier einem Missverständnis unterliegst.

    Hier ein Beispiel für einen HTTP Get request mit HTTPClient (Was seit .Net 4.5 existiert) inklusive Nutzung von HTTPS:

    static void Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            //HTTP GET
            var responseTask = client.GetAsync("https://google.com");
            responseTask.Wait();
    
            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsStringAsync();
                readTask.Wait();
    
                string responseBody = readTask.Result;
                Console.WriteLine(responseBody);
            }
        }
    }
    

    @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Und bei .Net Framework 4.8 zubleiben ist keine Gute Lösung.

    Könnte schon. Denn .Net 4.8 wird von Microsoft immer noch unterstützt bis irgendwann eine Windows version gibt, bei dem .Net 4.8 nicht mehr bestandteil der OS installation ist.

    Quellen:
    .Net Framework support lifecycle:
    https://learn.microsoft.com/en-us/lifecycle/products/microsoft-net-framework

    Version Start Date End Date
    .NET Framework 4.8.1 2022-08-09T00:00:00.000-08:00
    .NET Framework 4.8 2019-04-18T00:00:00.000-08:00

    https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-framework

    .NET Framework 4.8 is the latest version of .NET Framework and will continue to be distributed with future releases of Windows. As long as it is installed on a supported version of Windows, .NET Framework 4.8 will continue to also be supported.

    https://blog.inedo.com/dotnet/demystifying-lts

    Version Existing Application Support Target New Applications?
    4.8 ✓ Operating System (indefinite) ✓ Operating System (indefinite)

    Alle anderen Gründe, wieso du .Net/C# nicht nutzen willst sind komplett verständlich.
    Und ich möchte dich jetzt auch nicht davon abbringen C++ zu lernen und zu Nutzen.

    Es ging mir nur darum dir klar zu mache, dass eine deiner Begründungen gegen .Net/C# durch fehlerhafte Annahmen entstanden ist.



  • die Verwendung von Boost Asio für HTTP Requests ist dann doch sehr lowlevel.
    Da wäre es besser eine library zu nutzen die direkt HTTP Requests unterstützt. Einige wurden hier schon genannt.

    Hier ein link zu einem Beispiel code von der Boost Asio dokumentation um eine HTTPS Verbindung aufzubauen:
    https://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/example/ssl/client.cpp

    Auf Github gibt es auch ein weiters Beispiel, welches auf dem original Beispiel von der Boost Asio Dokumentation aufbaut.
    https://github.com/alexandruc/SimpleHttpsClient

    Das ist schon relativ komplex. Besonders für jemanden, der erst anfängt C++ zu lernen.



  • Mahlzeit zusammen,

    @hustbaer Ja das ist schon merkwürdig.

    @firefly Hey. Ich glaube das wir uns doch missverstanden haben, allerdings ist das eher meine schuld, da ich mit keinster Silbe sage, das dieses Entity Framework nicht die einzige Lösung ist. Ich erzählte davon, da eigentlich dieses Entity Framework eine gute Lösung sein kann. Sowie man sein Programm aufbaut, mit den Strings und .Co die man auch in der Datenbank als Tabelle eventuell benötigt, legt das Framework automatisch die Datenbank an und hält Sie mit deinen Projekt Aktuell. Allerdings nur in der IDE nicht im Nachhinein.

    Und klar, der HttpClient kenne ich, hab ich sogar schon verwendet, aber schau mal dir bitte das ScreenShot an, deine Source habe ich mal auf .Net 7 erstellt und in DotPeek reingeladen: https://i.postimg.cc/T3SXhcp7/Screenshot-2022-11-26-154344.png

    Und Genau das was du auf dieses Bild siehst, geht mir auf die Nerven. Man kann ja .Net Framework 4.8 nutzen, allerdings macht das nicht lange Sinn.
    Man möchte ja auch Neuheiten verwenden können, das in .Net 6 und Co. enthalten ist. Ich hab ja auch gesagt, das ich C# verwenden würde, wenn ich ein Obfuscator für mindestens .Net 6 finden würde, der entweder nicht teuer oder sogar kostenlos ist. Aber so offen wie auf mein Screenshot ist für mich nicht tragbar und ertragbar. Ich kann sowieso nicht verstehen, warum MS da nicht Grund verschleiert. Für 4.8 habe ich einen Obfuscator, der Open Source ist, aber nicht für die neuen Frameworks.

    @firefly Alles gut, ich habe verstanden wie du das meinst 😁 Hat sich ja keiner verletzt 😂



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Und Genau das was du auf dieses Bild siehst, geht mir auf die Nerven.

    Ich kann verstehen dass dir das auf die Nerven geht. Aber die Frage ist mMn.: ist es wert sich viel viel mehr Arbeit zu machen, nur damit es dir nicht auf die Nerven geht?

    Davon abgesehen gibt es ja wohl Obfuscator Tools die auch noch mit .NET 7 funktionieren. Ich weiss nicht ob es gratis Tools gibt, aber ein paar hundert Euro für ein solches Tool sollten ja kein Problem sein wenn du deine Software verkaufen willst. Und wenn du sie nicht verkaufen willst, dann sehe ich keinen Grund irgendwas geheim halten zu wollen.



  • Und selbst die Tools bieten keine 100% garantie dass der Code dann nicht doch "decompiliert" wird.

    Laut
    https://blog.ndepend.com/in-the-jungle-of-net-obfuscator-tools/
    gibt es de4dot welches die Aktionen von "popular obfuscators" rückgängig machen kann.
    Was aus meiner Sicht auch nicht all zu verwunderlich ist, denn die .Net Runtime bzw. entsprechende Frameworks arbeitet sehr stark mit Reflection und Co.
    Daher können dies Obfuscator Tools auch nur begrenzt was machen ohne dass die Applikation nicht mehr sauber läuft nachdem die Obfuscator Tools ihre Arbeit gemacht haben.

    Auch wenn de4dot auf github archviert ist und anscheinend nicht mehr weiterentwickelt wird, ist es ein Beispiel dafür, dass man die Leistung von Obfuscator Tools nicht überbewerten sollte.

    Und auch ein, wie ich finde wichtiger quote, bezüglich Obfuscator Tools:
    https://blog.ndepend.com/in-the-jungle-of-net-obfuscator-tools/

    .NET Obfuscators that work are more the exception than the rule.

    Um irgendwelche Geheimhaltungswürdigen Algorithmen/Logiken geheim zu halten ist es aus meiner Sicht das bessere vorgehen diese Elemente dort ablaufen zu lassen wo man die volle Kontrolle hat.
    Was bei einer Software, welche von Endkunden genutzt werden soll, nie gegeben ist.

    Da du eh wegen der Datenbank einen Server hast, könnte man diese Elemente dann auf der Serverseite ablegen/ablaufen lassen.

    Edit: Auch dieser Quotes sollte man beachten:
    https://blog.ndepend.com/dont-rely-on-someone-else-to-protect-your-software/

    Keep in mind that Obfuscators and AOT don’t protect your code from hackers. It is still easy for any solid hacker to crack your license-checking-layer and provide a free version of your software online as a warez.

    But keep in mind that Obfuscators and AOT only protect the intellectual property to some extent. Your code best kept secrets are still executable in both scenarios, it means they are still there. Someone skilled ready to spend a large amount of time to reverse engineer your code can still have access to your intellectual property.



  • @firefly @hustbaer Bis jetzt können nur einige Obfuscator .Net 6 und das auch nur, wenn man im Source einige Codes einfügt, damit der Obfuscator überhaupt mit .Net 6 Arbeiten kann. Und warum sollte ich Geld ausgeben? Normalerweise sollte das von MS ja grundverschleiert sein, schließlich wollen die ja auch das man C# nutzte. Statt immer mehr UIs rauszuwerfen die so verhunzt und ja wunderbar an den Store gebunden sind und erst ab Win 10 genutzt werden können, sollten die mal lieber mehr in Sicherheit machen. Das Problem existiert schon seit Jahren. 🤨

    Selbst im Dot Net Core, war dieses Problem da, obwohl das Net Core mehr für den Business Bereich war. Ich kenne einige Firmen die Software Technisch von C# aus diesen einen Grund weggegangen sind. Einige Firmen sind nur Aktiv in C# geblieben wegen Unity 3D, weil es da wirklich einfacher ist. Ich weiß das man die UIs befreien kann, aber muss das erst meine Aufgabe werden, wieso habe ich nicht die Wahl, ob ich für den Store entwickeln möchte, oder doch lieber Frei. 🤔

    Leute, konzentrieren wir uns doch einfach auf C++. Mein Plan ist es jetzt durch die Curl Geschichte über Json bzw. REST API zu gehen und darüber abzusichern. Ich werde erstmal für den Anfang das wxwidgets nutzen und dann ist auch gut. In der WinAPI kann ich soweit alles schreiben. Bunte Texte mit Transparenten Hintergründen, sowie das Speichern und Lesen von txt Datei mit OpenFileDialog und eine Serielle Schnittstelle zur einen Arduino habe ich aufgebaut.

    Achja ein Thread hab ich auch schon erstellt 😊 So blöd läuft das ganze garnicht. Meine einzige Schwachstelle ist nicht die Sprache, sondern das Verständnis über HTTP Request und in diesem fall jetzt REST API. Aber das Kommt bestimmt auch nicht 🤓

    PS. Kann man sich in diesem Forum auch Vorstellen? Hab nichts dazu gefunden?



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Ja stimmt, auch da braucht man die Middleware, obwohl das nur zum Teil Richtig ist. Das Entitiy Framework soll es ja einem erleichtern, Verbindung zur Datenbank aufzubauen, da gibt es keine Middleware

    Nein. EF Core soll es dir erleichtern mit deinen daten umzugehen. Entities, Models, Relations, Resources etc. Den connectionstring zu parsen und eine verbindung zur DB herzustellen ist definitiv nicht die hauptaufgabe eines Entity Managers.

    Du wirst immer eine middleware brauchen um von einem untrusted client irgendwo hin zu connecten. Spielt keinerlei rolle ob das c#, cpp, java, python oder f90 ist.

    Edit: Interessant....der thread hatte die restlichen beitraege nicht geladen.



  • Welche restlichen beträge wurden nicht geladen?



  • @Lucius Die aus der Datenbank.

    Leute, konzentrieren wir uns doch einfach auf C++.

    Ja! mach!



  • Und wie ich das mache, bin am überlegen ob ich einen neuen Beitrag machen sollte?
    Obwohl das Thema hier erst aufkam?

    Ich poste die Frage doch erstmal hier:
    @hustbaer Du hattest mir, libCurl empfohlen: Klappt alles super, außer eines, ich versuche aus testzwecken, mich über REST API über Json zu verbinden, das ganze läuft derzeit über Wordpress. Seitens Wordpress und API ist alles eingerichtet, denn testen konnte ich die ganze API über Postman.

    Jetzt habe ich aber das Problem, das ich keine SSL Verbindung zum laufen bekomme:
    Im Code als Kommentar, steht auch das was ich eventuell falsch verstanden haben könnte.

    curl = curl_easy_init();
    		curl_easy_setopt(curl, CURLOPT_URL, "https://wordpressapi.ddev.site/wp-json/wp/v2/posts");
    		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
    		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
    		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
    		curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 2L);
    
                   // Diese möglichkeit habe ich getestet, allerdings verstehe ich die Anwendung nicht.
                   // Ich soll ein Zertifikat runterladen das man bei LibCurl zum Download bekommt, diese dann umbenenne in: ca-bundle.crt und eines im Programm Ordner
                   // sowie ein eine Copy auf den Server ablegen. 
                   // Der Fehler bleibt der Selbe: failed: SSL connect error oder unter den Fehlercode 35 zu finden: https://curl.se/libcurl/c/libcurl-errors.html
                   // Vielleicht könnt mir an Hand eines Beispiels / Erklärung dabei helfen dieses Problem in den Griff zu bekommen.
    
    		curl_easy_setopt(curl, CURLOPT_CAINFO, "ca-bundle.crt");
    		 
    		struct curl_slist* headers = NULL;
    		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    
    		
    		res = curl_easy_perform(curl);
    		if (res != CURLE_OK) {
    			fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    		}
    	
    		curl_easy_cleanup(curl);
    

    Ich hoffe ihr könnt mir da weiterhelfen?



  • https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html hast Du gelesen?

    Ich soll ein Zertifikat runterladen das man bei LibCurl zum Download bekommt, diese dann umbenenne in: ca-bundle.crt und eines im Programm Ordner sowie ein eine Copy auf den Server ablegen.

    Ich glaube nicht daß dieses Zertifikat die URL Deines Servers beinhaltet.



  • Erstmal unabhängig vom eigendlichen Problem. Gib als URL bitte https an statt http.
    Dann wird der redirect auf die https version vermieden. Spart zeit beim Verbindungsaufbau.

    Nun zum eigendlichen probelem.
    Kann es sein, dass das SSL zertifikat auf dem Server "wordpressapi.ddev.site" ein self signed zertifikat ist?

    Wenn ja dann ist es kein Wunder dass curl die Verbindung abbricht weil folgende Optionen gesetzt sind:

    CURLOPT_SSL_VERIFYPEER
    CURLOPT_SSL_VERIFYHOST

    Self-signed Zertifikate werden bei default nicht vertraut weil dem Aussteller des zertifikats nicht vertraut wird.

    Vermutlich hast du bei Postman ähnliche Optionen nicht aktiv, da es damit funktioniert.

    Deshalb beschäftige dich damit wie das mit den SSL Zertifikaten funktioniert.


Anmelden zum Antworten