2013-07-07 14 views
7

Niedawno przełączyłem się na HAProxy z AWS ELB. Kończę SSL w równoważniku obciążenia (HAProxy 1.5dev19).Jak wyśledzić "Czas połączenia podczas uzgadniania SSL" i "Połączenie zamknięte podczas uzgadniania połączenia SSL"

Od czasu przełączenia wciąż otrzymuję błędy połączenia SSL w dzienniku HAProxy (5-10% całkowitej liczby żądań). Są trzy rodzaje błędów powtarzających: Połączenie zamknięte podczas SSL handshake Timeout podczas SSL handshake awarii uzgadniania SSL (ten zdarza rzadko)

Używam darmowy certyfikat StartSSL, więc moja pierwsza myśl była, że ​​niektórzy gospodarze są mając problemy z zaakceptowaniem tego certyfikatu i nie widziałem tych błędów w przeszłości, ponieważ ELB nie oferuje rejestrowania. Jedynym problemem jest to, że niektóre hosty mają ostatecznie udane połączenia.

Mogę połączyć się z serwerami bez żadnych błędów, więc nie jestem pewien, jak skopiować te błędy po mojej stronie.

Odpowiedz

8

To brzmi jak klienci, którzy odchodzą w połowie uzgadniania (TCP RST lub timeout). Byłoby to normalne w pewnym stopniu, ale 5-10% brzmi zbyt wysoko. Możliwe, że jest to problem z certyfikatem; Nie jestem pewien dokładnie, jak to przedstawia

Rzeczy, które przyszło mi do głowy:

  • Jeśli negocjacja jest bardzo powolny, będziesz miał więcej klientów zasnąć.
  • Mogą występować problemy z protokołem TCP, o których nie wiesz, dopóki nowy serwer proxy punktu końcowego nie rozpocznie ich zgłaszania.

Czy widzisz pojedyncze hosty, które czasem się udają, a czasami zawodzą? Jeśli tak, jest mało prawdopodobne, aby był to problem z certyfikatem. Nie jestem pewien, w jaki sposób połączenia są zrywane, gdy użytkownik odrzuca niezaufany certyfikat.

Możesz użyć Wireshark na maszynie HAProxy, aby przechwytywać handshake SSL i analizować je (nie musisz odszyfrowywać sesji dla analizy uścisku dłoni, chociaż możesz, ponieważ masz prywatny klucz serwera).

+1

Dziękuję Timowi za bardzo dokładną odpowiedź. Właściwie to była twoja pierwsza hipoteza, więc opublikuję szczegóły tutaj, na wypadek gdyby ktoś miał podobny problem. Wykorzystaliśmy ten backend do obsługi wielu aplikacji na Androida, które wysyłały dane analityczne dokładnie wtedy, gdy były zamykane. Czasami (często na urządzeniach z Androidem, rzadziej w iOS) nie było wystarczająco dużo czasu, aby faktycznie zrealizować żądanie, a aplikacja zostałaby zabita podczas negocjacji HTTPS lub bezpośrednio po tym, skutkując żądaniem BADREQ oznaczonym przez HAProxy. W końcu skończyłem używać ssldump i dokładnie analizowałem, co się stało. – andreimarinescu

0

Jak skonfigurowany jest twój frontend haproxy ssl?

na przykład używać następującym celu zmniejszenia ataków zwierzęcia; wiążą XXX: 443 SSL crt /etc/haproxy/ssl/XXXX.pem nie-SSLv3 szyfrów RC4 SHA: AES128-SHA: AES256-SHA

Jednak niektórzy klienci wydają się generować te same błędy "niepowodzenia uzgadniania SSL". Myślę, że dzieje się tak, ponieważ konfiguracja jest zbyt restrykcyjna.

1

Tak też się stało. Poniżej pojawił się pierwszy SSL handshake failure następnie po wyłączeniu option dontlognull otrzymaliśmy również Timeout during SSL handshake w dziennikach haproxy.

Najpierw upewniłem się, że wszystkie limity czasu defaults są prawidłowe.

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

Niestety, problem był w sekcji

frontend Była kolejka z timeout client 60 które tylko zakładać środki 60ms zamiast 60s.

Wygląda na to, że niektórzy klienci nie mogli nawiązać połączenia i zostali wyrzuceni podczas uzgadniania SSL. Sprawdź frontend pod kątem limitów czasu klienta.

+0

dzięki, Adnan. To był rzeczywiście problem, udokumentowałem to w moim komentarzu do odpowiedzi Tima. – andreimarinescu

Powiązane problemy