SSL is very complex, also werden Sie eine Bibliothek verwenden wollen.
Es gibt mehrere Möglichkeiten, wie Keyczar, Botan, cryptlib usw. Jede und jeder dieser Bibliotheken (oder die von anderen, wie Boost.Asio oder OpenSSL vorgeschlagen Bibliotheken) werden für diese Beispielcode haben.
Beantwortung Ihrer zweiten Frage (wie eine Bibliothek in bestehende Code zu integrieren, ohne zu viel Schmerz verursacht): es wird auf Ihrem aktuellen Code abhängen. Wenn Sie bereits einfache Funktionen haben, die die Winsock- oder Socket-Methoden zum Senden/Empfangen von int
s, strings
usw. aufrufen, müssen Sie nur die Eingeweide dieser Funktionen neu schreiben. Und ändern Sie natürlich den Code, der den Socket einrichtet.
Auf der anderen Seite, wenn Sie die Winsock/Socket-Funktionen direkt aufrufen, dann möchten Sie wahrscheinlich Funktionen mit ähnlicher Semantik schreiben, aber die Daten verschlüsselt senden und Ihre Winsock-Aufrufe mit diesen Funktionen ersetzen.
Sie können jedoch in Betracht ziehen, zu etwas wie Google Protocol Buffers oder Apache Thrift (a.k.a. Facebook Thrift) zu wechseln. Googles Protokollpuffer-Dokumentation sagt: "Vor den Protokollpuffern gab es ein Format für Anforderungen und Antworten, die das Hand-Marshalling/Unmarshalling von Anforderungen und Antworten verwendeten und das eine Reihe von Versionen des Protokolls unterstützte. Dies führte zu sehr hässlichem Code. ... "
Sie befinden sich gerade in der Hand-Marshalling-/Unmarshalling-Phase. Es kann funktionieren, und tatsächlich verwendet ein Projekt, an dem ich arbeite, diese Methode. Aber es ist viel schöner, das einer Bibliothek zu überlassen; vor allem eine Bibliothek, die sich bereits Gedanken gemacht hat, die Software in Zukunft zu aktualisieren.
Wenn Sie diese Route gehen, richten Sie Ihre Netzwerkverbindungen mit einer SSL-Bibliothek ein, und dann werden Sie Ihre Thrift/Protocol Buffer-Daten über diese Verbindungen übertragen. Das ist es. Es beinhaltet umfangreiche Refactoring, aber Sie werden am Ende mit weniger Code zu pflegen. Als wir Protocol Buffers in die Codebasis des von mir erwähnten Projekts einführten, konnten wir ungefähr 300 Zeilen mit Marshalling/Demarshalling-Code entfernen.
Hallo, Max, Danke für die zusätzlichen Details. (Vielleicht wurde meine ursprüngliche Frage nicht klar formuliert.) Ihre Antwort fügt die Einsicht hinzu, die für mich klickt. Ich habe einen ziemlich hässlichen, handcodierten Socket-basierten Prozess im Code, der eine Art "Handshake" mit dem Server durchführt und speziell das UDP-Port-Tunneling einrichtet. Der Rest des Netzwerkcodes wird in Hilfsfunktionen vom Typ "SendXMLViaTCPAndWaitForResponse()" abstrahiert. Nur die Kugel zu beißen sollte nicht so schwer sein, es sollte wenig Rekodierung über die Hilfsfunktionen hinausgehen. Nochmals vielen Dank dafür, dass Sie dies festgestellt haben. –