2010-11-22 18 views
4

SSLを使用してサーバーと通信する短命のクライアントプロセスがあります。プロセスは頻繁に起動され、短時間(通常は1秒未満)のみ実行されます。このプロセスは、より大きなタスクを実行するために使用されるシェルスクリプトの一部として使用され、かなり頻繁に呼び出される可能性があります。SSLハンドシェイクのパフォーマンスを向上させる

起動時に毎回実行するSSLハンドシェイクは、テストで重大なパフォーマンスボトルネックとなっています。可能であれば、これを減らしたいと思います。

セッションIDを取得してどこかに保存して(クッキーのようなもの)、次の呼び出しでこれを再利用することが、これで気になりますこれを行うことに関するいくつかのセキュリティ上の懸念があります。

だから、私は、

  1. の質問のカップルを持っている、これは悪い考えますか?
  2. これはOpenSSLでも可能ですか?
  3. SSLハンドシェイクの処理速度を上げる方法はありますか?

答えて

3

ハンドシェイク後、接続からのSSLセッション情報をSSL_get_session()で取得できます。 i2d_SSL_SESSION()を使用すると、ディスクに書き込むことのできるフォームにシリアル化できます。

次に、同じサーバーに接続する場合は、セッション情報をディスクからロードしてからd2i_SSL_SESSION()でシリアル化し、SSL_set_session()を使用して設定します(SSL_connect()より前)。

ディスク上のSSLセッションは、ツールを実行するユーザーだけが読み取り可能で、失効したセッションを上書きして頻繁に削除する必要があります。

2

永続的な接続を使用している可能性がありますので、セットアップはワンタイムコストですか?

お客様のクライアントコードがまだだと、が接続/プロセス/切断サイクルを実行していると考えられるので、接続ロジックを抽象化することができます。

2

面白いことに、私はちょうど今日、OpenSSLハンドシェイクの問題に遭遇しました。 Windows上のRAND_pollの実装は、ランダムエントロピーのソースとしてWindowsヒープAPIを使用します。

残念ながら、Windows 7(およびServer 2008)の「バグ修正」により、ヒープ列挙API(デバッグAPIのafterall)は、ヒープに割り当てがいっぱいになると、1回の呼び出しで2秒以上かかることがあります。つまり、SSLの接続と受け入れには、1秒から数分以上かかることがあります。

The Ticketには、はるかに高速なハンドシェイクを実現するためにopensslにパッチを当てる方法に関するいくつかの良い提案が含まれています。

関連する問題