BIOペアを使用します。ssltest.cプログラムで例を見つけることができ、ソースでを検索しbio_pair
ます。基本的な考え方は、OpenSSLエンジンをブラックボックスとして扱うことです。
あなたのコードがしなければならない4つのことがあります:
反対側への接続を介して暗号化されたデータを受信する場合は、SSLエンジンの暗号化されたBIOに書き込む必要があります。
SSLエンジンが暗号化されたデータを反対側に送信する場合は、SSLエンジンの暗号化されたBIOからデータを読み取り、反対側に転送する必要があります。
暗号化して送信するプレーンテキストがある場合は、SSLエンジンのプレーンテキストBIOに書き込む必要があります。
SSLエンジンに復号化されたプレーンテキストがある場合は、SSLエンジンのプレーンテキストBIOから読み取る必要があります。
OpenSSLは、SSLプロトコルに従い、2つのBIO間でデータを移動するエンジンとして純粋に機能します。これらの4つのデータストリームすべてを動かし続ける限り、すべてのプロトコルネゴシエーションと操作を実行します。
私があなたに与えることができる1つの注意はこれです-これらのものの間に特別な関係を仮定しないでください。たとえば、暗号化して送信したいプレーンテキストがあり、それをSSLエンジンのプレーンテキストBIOに書き込む場合、SSLエンジンは、反対側から暗号化されたデータを受信するまで先に進むことができない場合があります。SSLエンジンをブラックボックスとして扱い、可能な限りこれら4つのことをすべて実行します。SSLエンジンを「調べ」ようとしないでください。たとえば、SSLエンジンに暗号化されたデータを渡したため、必然的にプレーンテキストが含まれることを期待してください。可能性はありますが、暗号化されたデータを反対側に送信する必要がある場合もあります。
もう1つの注意:SSLエンジンには1つの状態しかありません。読み取り状態と書き込み状態はありません。(醜い詳細が必要な場合は、このスレッドで「悪夢のシナリオ」を検索してください。)複数のスレッドでSSL接続を使用し、TCP接続(読み取りと書き込み)と同じように動作することを期待している場合、これはあなたを噛む可能性が最も高いです。致命的なエラーまたは接続のクローズの場合を除いて、サイドは独立しています)。