2013-07-07 106 views
7

最近AWS ELBからHAProxyに切り替えました。ロードバランサ(HAProxy 1.5dev19)でSSLを終了します。「SSLハンドシェイク中の接続タイムアウト」と「sslハンドシェイク中に接続が閉じられた」エラーを追跡する方法

切り替え中、HAProxyログにいくつかのSSL接続エラーが発生し続けます(要求総数の5〜10%)。繰り返しエラーの3種類があります: 接続がSSLハンドシェイク SSLハンドシェーク障害時にSSLハンドシェーク タイムアウト中は閉鎖(この1つはめったに起こりません)

は私の最初の考えは、いくつかのホストがあるということだったので、私は、無料のStartSSL証明書を使用していますこの証明書を受け入れることに問題があり、過去にこれらのエラーは表示されませんでした。なぜなら、ELBはロギングを提供しないからです。唯一の問題は、最終的に接続が成功したホストがあることです。

エラーなくサーバーに接続できるため、これらのエラーを私の最後にどのように複製するのか分かりません。

答えて

8

これは、ミッドハンドシェイク(TCP RSTまたはタイムアウト)を去っているクライアントのようです。これは何らかの割合では正常ですが、5〜10%の音が高すぎます。それは証明書の問題かもしれません。交渉が非常に遅い場合は、あなたがより多くのクライアントが落ちるでしょう

  • :私はそれが私に起こる

    物事に提示正確にどのようにかどうか分かりません。

  • 新しいSSLエンドポイント・プロキシーが報告を開始するまで、気づいていなかった基礎となるTCPの問題がある可能性があります。

時々成功し、失敗することがある個々のホストがありますか?もしそうなら、これは証明書の問題ではありません。ユーザーが信頼されていない証明書を拒否した場合、接続がどのように破棄されるのか分かりません。

HAProxyマシンでWiresharkを使用してSSLハンドシェイクを取得し、解析することができます(ハンドシェイク解析のセッションを復号化する必要はありませんが、サーバの秘密鍵があるので可能です)。

+1

非常に徹底的な対応のためにTimさんに感謝します。実際にはそれはちょうどあなたの最初の仮説だったので、誰かが同様の問題を抱えている場合に備えてここに詳細を掲載します。 このバックエンドを使用して、アナリティクスをシャットダウンしていたときと同じように複数のAndroidアプリに配信しました。時には(多くの場合、Androidでは、あまり頻繁にはiOSで)リクエストを実際に完了するのに十分な時間がなく、httpsのネゴシエーション中に、またはその直後にアプリが強制終了され、HAProxyでマークされたBADREQリクエストが発生しました。 最終的に私はssldumpを使って何がうまくいかないのかを正確に分析しました。ありがとう、adnan。 – andreimarinescu

0

あなたのhaproxy sslフロントエンドはどのように構成されていますか?例えば

私はBEAST攻撃を軽減するために、次の使用: バインドXXXX:443 SSLのCRT /etc/haproxy/ssl/XXXX.pem無のSSLv3暗号RC4-SHA:AES128-SHA:AES256-SHAを

しかし、一部のクライアントは同じ "SSLハンドシェイク失敗"エラーを生成するようです。私は構成があまりにも制限的だからだと思う。

1

私はこれもまた起こりました。次の最初に登場したSSL handshake failureoption dontlognullをオフにした後、我々はまた、をhaproxyログに入れました。

まず、すべてのdefaultsタイムアウトが正しいことを確認しました。

timeout connect 30s 
timeout client 30s 
timeout server 60s 

は残念ながら、問題は、私が唯一の手段60msの代わり60sを想定timeout client 60とのラインがありましたfrontendセクション

にありました。

SSLハンドシェイク中に特定のクライアントが接続が遅くなり、蹴飛ばされているようです。フロントエンドでクライアントのタイムアウトを確認してください。

+0

これは確かに問題でした、私はTimの答えに関する私のコメントでこれを文書化しました。 – andreimarinescu

関連する問題