zarządzanie kluczami SSH
Łącząc się z hostem poprzez SSH z nowego komputera, jesteśmy pytani o to, czy jesteśmy pewni z kim się łączymy. To pytanie, to raptem odcisk klucza publicznego serwera, który musimy zweryfikować.
Osobiście zawsze “zarządzałem” kluczami poprzez stronę WWW na której publikowałem odciski kluczy. Niemniej artykuł na Debian Administration, a dokładnie komentarze do niego pokazały mi ciekawą drogę.
Jak podaje RFC 4255, wystarczy dodać pewien typ rekordu do opisu strefy oraz uruchomić ssh z odpowiednią opcją aby łatwo zweryfikować drugą stronę połączenia. Do szukanej domeny (np. example.com) wystarczy dodać rekord SSHFP zawierający klucz (szczegółowa definicja).
Wygląda to mniej więcej następująco (RSA potem DSA):
example.com IN SSHFP 2 1 e58a8ccd12c06997ed1b68f8f1b0fedcf72375b
Te linijki można wygenerować za pomocą komend:
ssh-keygen -r example.com -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -r example.com -f /etc/ssh/ssh_host_dsa_key
lub dla starszej wersji bind
ssh-keygen -r example.com -f /etc/ssh/ssh_host_rsa_key -g
ssh-keygen -r example.com -f /etc/ssh/ssh_host_dsa_key -g
Żeby się połączyć wystarczy wydać komendę ssh example.com -o “VerifyHostKeyDNS=yes” (putty na razie nie ma opcji pozwalającej na weryfikację klucza zapytaniami DNS).
Chociaż jest to mało prawdopodobne, to oczywiście warto pamiętać, że jeśli ktoś zmanipuluje rekordy strefy (szczególnie, jeśli ułatwiamy sobie sprawę i trzymamy wszystkie informacje jako klucze swojej pod domeny, np. serwerX.moja_domena.com) to jesteśmy niestety mocno wystawieni na atak typu man-in-the-middle, więc warto przemyśleć swoją strategię postępowania (dodatkowa autoryzacja poprzez klucze dostępu, wpisy SSHFP per host per domain, weryfikacja rekordów od czasu do czasu).