SSL is very complex, quindi hai intenzione di voler utilizzare una libreria.
Ci sono diverse opzioni, come ad esempio Keyczar, Botan, cryptlib, ecc Ognuno di queste librerie (o le librerie suggeriti da altri, come ad esempio Boost.Asio o OpenSSL) avranno codice di esempio per questo.
rispondere alla tua seconda domanda (come integrare una libreria in codice esistente senza causare troppo dolore): sta andando a dipendere dal vostro codice corrente. Se hai già delle semplici funzioni che chiamano i metodi Winsock o socket per inviare/ricevere int
s, strings
, ecc., Devi solo riscrivere le viscere di tali funzioni. E, naturalmente, cambia il codice che imposta il socket per iniziare.
D'altra parte, se si stanno chiamando direttamente le funzioni Winsock/socket, probabilmente si vorrà scrivere funzioni con semantica simile ma inviare i dati crittografati e sostituire le chiamate Winsock con tali funzioni.
Tuttavia, si consiglia di prendere in considerazione il passaggio a qualcosa come Google Protocol Buffers o Apache Thrift (a.k. Facebook Thrift). la documentazione buffer protocollo di Google dice: "Prima di buffer di protocollo, c'era un formato per le richieste e le risposte che hanno usato la mano di smistamento/unmarshalling di richieste e risposte, e che hanno sostenuto un certo numero di versioni del protocollo. Ciò ha provocato un po 'di codice molto brutto. ..."
attualmente sei in fase di mano marshalling/unmarshalling. Può funzionare, e in effetti un progetto su cui lavoro utilizza questo metodo. Ma è molto più bello lasciarlo in una biblioteca; in particolare una biblioteca che ha già pensato di aggiornare il software in futuro.
Se vuoi seguire questa strada si impostano le connessioni di rete con una libreria SSL, e poi ti spinge i dati Protocollo Buffer Thrift/su quelle connessioni. Questo è tutto. Ciò implica un ampio refactoring, ma ti ritroverai con meno codice da mantenere. Quando abbiamo introdotto i buffer di protocollo nella base di codice di quel progetto che ho menzionato, siamo stati in grado di sbarazzarci di circa 300 righe di codice di marshalling/demarshalling.
Ciao, Max, Grazie per i dettagli aggiunti. (Forse la mia domanda iniziale non era formulata in modo chiaro). La tua risposta aggiunge l'intuizione che fa clic per me. Ho uno abbastanza brutto processo di presa, codificati a mano con sede nel codice che fa una sorta di "stretta di mano" con il server, e in particolare imposta il tunneling porta UDP. Il resto del codice di rete è estratto in "SendXMLViaTCPAndWaitForResponse()" per le funzioni di aiuto. Basta mordere il proiettile non dovrebbe essere così difficile, dovrebbe comportare una piccola ricodifica al di là dei soccorsi. Grazie ancora per averlo scoperto. –