SSLは、私がやりたいことでかなり膨らんでいるようですが、OpenSSL(NSSも使用可能かもしれません)に対する情熱的な憎悪があります。 RPC /暗号化されたRPC /イベントストリーム/暗号化されたイベントストリームに使用される2つのノード間でTCPチャネルを開く必要があります。私はプロトコルバッファを使用して、異なるトラフィックソースを定義し、多重化しています。RFC /アドバイス:セキュア/セキュアでないrpc /イベントストリームプロトコルの設計
私はSSLを使い始めるのは嫌です。暗号化されたイベントストリームと暗号化されたRPCを暗号化および復号化するために、認証された安全な鍵の確立(認証されたdiffie-hellman)と、おそらくブロック暗号ベースのストリームオブジェクトが必要です。
最初に考えたのは、SSL実装からビルドすることで、コーディング時間と設計時間を節約できました。ただし、SSL実装からソケットハンドルを取得し、暗号化されていない交換や暗号化された交換に使用できます。しかし、これはおそらく醜い実装に終わるでしょう。これを行うことがわかっているのは、SSLプロトコル(つまり、TCP状態とSSL状態の間の強い結合)と互換性がない可能性があるからです。
複数のソケットを開くことで、コーディング時間とデザイン時間を節約できました。しかし、私たちが知っているように、マルチソケットプロトコルの設計は悪いことです。
3つ目の考えは、すべてを暗号化するだけですが、問題のサービスは高性能イベントスイッチの機能を果たし、同じマシン上で動作するデータベースサーバーも備えています。このアプローチのオーバーヘッドは、トラフィックの大部分が平文であるため満足しません。
だから、これらのアプローチは私にとって満足のいくものではないようです。したがって、私は、cryptoppとboost :: asioを使用して私自身のソリューションをロールし、私自身のプロトコルを構築することができるという結論に達しました。私はかなり能力のあるシステムプログラマであり、エンジニアは暗号化技術を適用することを理解しています。
私はすべて再利用しています。この場合はSSLを再利用したいと考えていますが、できないと思います。あなたが似たような状況であなたの経験から私に与えることができるアドバイス(あなたはネットワークプロトコルを設計していなければなりません。私の最大の印象を与えるアドバイスは、ティックを取得します。:
p.s.、私のアプリケーションはまた、私はcryptoppを引っ張っているいくつかのエキゾチックな暗号化を実行する必要があります。
"肥大化"という言い方はわかりませんが、SSLを再発明しようとしているようです。実際、あなたはあなたの質問に多くの仮定をしています。実際には、すでに接続されているTCP接続の上にSSL接続をレイヤーすることができます。多くのSSLアップグレードプロトコルは、このような動作に依存しています。 –