SSL is very complexですので、ライブラリを使いたいと思っています。
などKeyczar、Botan、cryptlib、などいくつかのオプションは、一人ひとりこれらのライブラリ(または、そのようなBoost.AsioやOpenSSLのよう他の人によって提案されたライブラリ)の一つが、このためのサンプルコードがありますがあります。
(どのようにあまりにも多くの痛みを引き起こすことなく、既存のコードにライブラリを統合するために)あなたの2番目の質問に答える:あなたの現在のコードに依存するようになるだろう。 int
、strings
などを送信/受信するWinsockまたはソケットメソッドを呼び出す単純な関数をすでに持っている場合は、それらの関数の中身を書き直すだけで済みます。そして、もちろん、ソケットを設定するコードを変更してください。
一方、Winsock /ソケット関数を直接呼び出す場合は、同様のセマンティクスを持つ関数を作成し、データを暗号化して送信し、Winsock呼び出しをそれらの関数に置き換えることができます。
ただし、Google Protocol BuffersまたはApache Thrift(a.k.a Facebook Thrift)に切り替えることを検討してください。 Googleのプロトコルバッファーのドキュメントには、「プロトコルバッファーの前には、要求と応答のハンドマーシャリング/アンマーシャリングを使用し、プロトコルのいくつかのバージョンをサポートしていた要求と応答の形式があり、非常に醜いコードになりました。 ... "
現在、マーシャリング/アンマーシャリングフェーズに入っています。それは働くことができます、実際に私が取り組んでいるプロジェクトはこのメソッドを使用します。しかし、それを図書館に残すことはずっと良かったです。特に将来的にソフトウェアを更新することを考えている図書館があります。
このルートを使用すると、SSLライブラリを使用してネットワーク接続をセットアップし、その接続でThrift/Protocol Bufferデータをプッシュします。それでおしまい。これには広範なリファクタリングが必要ですが、最終的には保守するコードが少なくなります。私が言及したプロジェクトのコードベースにプロトコルバッファを導入したとき、マーシャル/デマーシャリングコードの約300行を取り除くことができました。
こんにちは、マックス、 を
彼らは同様にあなたの既存のコードにCyaSSLを追加することに触れSSLチュートリアルを持っています詳細をお寄せいただきありがとうございます。 (おそらく私の元の質問には明確な言葉が書かれていなかったかもしれない)あなたの答えは、私のクリックを反映する洞察を加えます。私は、サーバーで一種の "ハンドシェイク"を行い、具体的にはUDPポートのトンネリングを設定するコードで、コードベースのプロセスをコード化したかなり醜いコードを手に入れました。残りのネットワークコードは "SendXMLViaTCPAndWaitForResponse()"型ヘルパー関数に抽象化されています。弾丸を噛むだけでそれほど難しいはずはありません。ヘルパーfctsを超えてほとんど記録されていないはずです。これを釘付けにしてくれてありがとう。 –