Klucze 8192-bitowe blokują uzgadnianie; DH 1024-bitowy jest odrzucany
Dwa błędy rozmiaru z przeciwnymi poprawkami: zbyt duży klucz pali czas uzgadniania, aż partner przekroczy limit czasu, a mała grupa DH jest odrzucana, zanim zacznie.
Na jednym serwerze klienci zawieszają się na chwilę i potem łączą ponownie, a inny od razu odrzuca połączenia z komunikatem o rozmiarze klucza. Wyglądają jak różne błędy, a to ten sam błąd wskazujący w przeciwnych kierunkach. Kryptografia uzgadniania ma koszt rosnący wraz z rozmiarem parametrów, a także dolny limit, poniżej którego nowoczesne biblioteki nie schodzą. Dobranie rozmiaru materiału to lista kontrolna, a pierwszy punkt to ustalenie, którego z dwóch błędów naprawdę doświadczasz.
Przeczytaj awarię, zanim cokolwiek wygenerujesz ponownie
Czas mówi ci o większości. Uzgadnianie, które zajmuje kilka sekund i potem umiera, zwykle oznacza, że obliczenie przerosło cierpliwość partnera, co wskazuje na parametry zbyt duże dla sprzętu lub limitu czasu. Natychmiastowe odrzucenie, które wymienia rozmiar klucza lub grupy, wskazuje przeciwny kierunek, na materiał, którego biblioteka w ogóle nie przyjmie.
Te dwa wymagają przeciwnych poprawek, i tu właśnie myli się większość prób. Ponowne generowanie parametrów 8192-bitowych na kliencie, który już odrzucił małą grupę, pogarsza wolny przypadek, nie robiąc nic dla szybkiego. Zapisz, jaki objaw zaobserwowałeś, zanim dotkniesz pliku.
Następnie sprawdź, czego wymaga się od partnera. Serwer skonfigurowany dla dużej grupy ciała skończonego zmusza każdego klienta do zużywania tego samego czasu procesora przy każdym ponownym uzgadnianiu, nie tylko przy połączeniu. Jeśli problem pojawia się w regularnym odstępie, a nie przy starcie, ten odstęp jest silną wskazówką, które ustawienie jest drogie. Ponowne uzgadnianie powtarza całe obliczenie, więc zatrzymanie powtarzające się co godzinę to zwykle ten sam koszt płacony ponownie.
Wolny przypadek: materiał, na który sprzętu nie stać
Praca Diffie-Hellmana i RSA rośnie szybko z rozmiarem klucza, i wszystko to dzieje się, zanim tunelem popłynie jakikolwiek ruch. Na małym routerze lub kliencie o małej mocy wystarczająco duża grupa może wypchnąć wymianę poza limit czasu drugiej strony, więc połączenie ponawia próbę albo po prostu wygląda na zawieszone bez żadnego błędu.
Poprawka to zejście do rozmiaru, który obsługuje każdy partner i który każde urządzenie może wygodnie obliczyć. Klucz RSA 2048-bitowy i grupa 2048-bitowa pozostają szeroko zgodną linią bazową; większy pomaga tylko wtedy, gdy wszystkie strony się zgadzają i procesor może zapłacić za to przy każdym ponownym uzgadnianiu. Wszystko powyżej tej linii bazowej to świadomy kompromis, nie aktualizacja.
Rozmiar nie jest wynikiem, a największa liczba w tabeli porównawczej nie jest automatycznie właściwym wyborem. Wybierz najmniejszą wartość, jaką dopuszcza twoja polityka i akceptują wszyscy partnerzy, a potem zmierz uzgadnianie, zamiast zakładać, że się poprawiło. Mniejsza grupa, która nadal przekracza limit czasu, mówi ci, że rozmiar nigdy nie był całą historią.
Szybki przypadek: grupa, którą biblioteka odrzuca
Nowoczesne kompilacje OpenSSL odrzucają najmniejsze grupy ciała skończonego wprost, a podniesiony poziom bezpieczeństwa popycha dolną granicę jeszcze wyżej. Oprogramowanie routera, które niesie ze sobą dziesięciolecia stary plik parametrów, jest zwykłym źródłem, a objawem jest połączenie, które od razu zawodzi z komunikatem wymieniającym grupę lub rozmiar klucza. Nic w tej awarii nie jest okresowe, i właśnie to czyni ją łatwą do rozpoznania.
Zastąp plik, zamiast edytować konfigurację, aby pominąć sprawdzenie. Wygeneruj aktualną grupę, zweryfikuj ją, a następnie zainstaluj tam, gdzie demon naprawdę ją czyta. Zachowaj stary plik, dopóki klient nie połączy się pomyślnie z nowym:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemPolecenie sprawdzające weryfikuje plik i nie wypisuje nic użytecznego, gdy przejdzie; lista potwierdza, że zastąpiłeś plik ładowany przez usługę, a nie starą kopię obok. Wskaż konfiguracji tę ścieżkę, uruchom demona ponownie i potwierdź, że klient, który wcześniej zawodził, teraz kończy uzgadnianie.
Jeśli serwer ustawia też poziom bezpieczeństwa lub profil certyfikatu, przeczytaj je, zanim uznasz, że grupa była zła. Profil wymagający surowszej klasy może odrzucić materiał, który domyślny by przyjął, a usunięcie tego ustawienia jest węższą zmianą niż globalne wyłączenie sprawdzania.
Wybierz rozmiar dla partnera i sprzętu
Dowiedz się, co wytrzyma drugi koniec, zanim wygenerujesz coś egzotycznego. Urządzenie zbyt stare dla grupy 2048-bitowej to urządzenie do wymiany, bo wskazanie serwera na słabszą grupę tylko zamienia skargę o zgodność w awarię. Trwałe poprawki idą w stronę nowszego oprogramowania, a nie starszych parametrów. Każdy tymczasowy wyjątek w tej dziedzinie ma zwyczaj stawania się stałą konfiguracją.
Gdzie limitem jest procesor serwera, zmień algorytm, zamiast schodzić poniżej polityki. Wymiana kluczy na krzywej eliptycznej, taka jak X25519, jest dramatycznie tańsza niż duża grupa ciała skończonego i jest szeroko wspierana, co czyni ją lepszą odpowiedzią na skargę o wydajność niż mniejszy moduł RSA.
Cokolwiek wybierzesz, przetestuj jednym prawdziwym połączeniem i obserwuj, ile trwa uzgadnianie, a nie tylko czy w końcu się połączy. Połączenie, które udaje się w dwanaście sekund, ma tę samą przyczynę źródłową co to, które zawodzi w piętnaście.
Zapisz wybór, żeby przebudowa nie mogła go cofnąć
Trzymaj plik parametrów pod kontrolą konfiguracji i zapisz obok rozmiar, powód i datę. Odbudowany serwer, który po cichu generuje własne wartości domyślne, to sposób, w jaki ten sam błąd wraca po sześciu miesiącach, a nikt nie potrafi wyjaśnić pierwotnej decyzji.
Zapisz te same informacje obok punktu końcowego i profilu, aby przegląd nie musiał ich odtwarzać z rozmiaru pliku. Gdy następne połączenie się zatnie, ta notatka jest różnicą między pięciominutowym sprawdzeniem a nowym dochodzeniem. Powstrzymuje też następnego inżyniera przed rozwiązaniem wolnego przypadku poprawką przeznaczoną dla szybkiego.