Protokół SSH wspiera wiele metod uwierzytelniania. Prawdopodobnie jedną z najważniejszych z nich jest uwierzytelnianie kluczem publicznym dla połączeń interaktywnych i automatycznych.
Uwierzytelnianie kluczem publicznym – co i dlaczego?
Motywacją do stosowania uwierzytelniania kluczem publicznym zamiast zwykłego hasła jest bezpieczeństwo. Uwierzytelnianie kluczem publicznym zapewnia siłę kryptograficzną, której nie są w stanie zapewnić nawet bardzo długie hasła. W przypadku SSH, uwierzytelnianie kluczem publicznym znacznie poprawia bezpieczeństwo, ponieważ uwalnia użytkowników od konieczności pamiętania skomplikowanych haseł (lub co gorsza ich zapisywania).
Oprócz bezpieczeństwa, uwierzytelnianie kluczem publicznym oferuje również korzyści użytkowe – pozwala użytkownikom na wdrożenie pojedynczego logowania na wszystkich serwerach SSH, z którymi się łączą. Uwierzytelnianie za pomocą klucza publicznego umożliwia również zautomatyzowane logowanie bez hasła, co jest kluczowym czynnikiem umożliwiającym realizację niezliczonych bezpiecznych procesów automatyzacji, które zachodzą w sieciach przedsiębiorstw na całym świecie.
Kryptografia klucza publicznego obraca się wokół kilku kluczowych koncepcji. Poniższe sekcje krótko je wyjaśniają.
Kryptografia asymetryczna – Algorytmy
Jak w przypadku każdego schematu szyfrowania, uwierzytelnianie za pomocą klucza publicznego opiera się na algorytmie. Istnieje kilka dobrze zbadanych, bezpiecznych i godnych zaufania algorytmów – najpopularniejsze z nich to RSA i DSA. W przeciwieństwie do powszechnie znanych algorytmów szyfrowania (symetrycznych lub z kluczem tajnym), algorytmy szyfrowania z kluczem publicznym działają z dwoma oddzielnymi kluczami. Te dwa klucze tworzą parę, która jest specyficzna dla każdego użytkownika.
Para kluczy – publiczny i prywatny
W przypadku uwierzytelniania kluczem publicznym SSH, jest raczej typowe, że użytkownicy tworzą (tj. dostarczają) parę kluczy dla siebie. Implementacje SSH zawierają łatwe w użyciu narzędzia do tego celu (więcej informacji znajdziesz w ssh-keygen i ssh-copy-id).
Każda para kluczy SSH zawiera dwa klucze:
-
Klucz publiczny, który jest kopiowany na serwer(y) SSH. Każda osoba posiadająca kopię klucza publicznego może szyfrować dane, które następnie mogą być odczytane tylko przez osobę posiadającą odpowiedni klucz prywatny. Gdy serwer SSH otrzyma klucz publiczny od użytkownika i uzna go za godny zaufania, oznacza klucz jako autoryzowany w pliku authorized_keys. Takie klucze nazywane są kluczami autoryzowanymi.
-
Klucz prywatny, który pozostaje (tylko) u użytkownika. Posiadanie tego klucza jest dowodem tożsamości użytkownika. Tylko użytkownik posiadający klucz prywatny odpowiadający kluczowi publicznemu na serwerze będzie w stanie pomyślnie uwierzytelnić się. Klucze prywatne muszą być przechowywane i obsługiwane z należytą starannością, a ich kopie nie powinny być rozpowszechniane. Klucze prywatne używane do uwierzytelniania użytkowników są nazywane kluczami tożsamości.
Ustawianie uwierzytelniania kluczem publicznym dla SSH
Do skonfigurowania uwierzytelniania kluczem publicznym (dla SSH) wymagane są następujące proste kroki:
-
Para kluczy jest tworzona (zazwyczaj przez użytkownika). Zazwyczaj robi się to za pomocą ssh-keygen.
-
Klucz prywatny pozostaje u użytkownika (i tylko tam), natomiast klucz publiczny jest wysyłany do serwera. Zazwyczaj za pomocą narzędzia ssh-copy-id.
-
Serwer przechowuje klucz publiczny (i „zaznacza” go jako autoryzowany).
-
Serwer umożliwi teraz dostęp każdemu, kto udowodni, że posiada odpowiedni klucz prywatny.
Obsługa klucza prywatnego
Niezwykle ważne jest, aby prywatność klucza prywatnego była strzeżona ostrożnie. W większości przypadków użycia zależnych od użytkownika jest to osiągane przez szyfrowanie klucza prywatnego za pomocą hasła.
Gdy klucz prywatny jest potrzebny, użytkownik jest proszony o podanie hasła, aby klucz prywatny mógł zostać odszyfrowany. Obsługa fraz hasła może być zautomatyzowana za pomocą agenta SSH.
W większości zautomatyzowanych przypadków użycia (skrypty, aplikacje, itp.) klucze prywatne nie są chronione i aby pozostać bezpiecznym i zgodnym z przepisami, należy starannie planować i zarządzać kluczami.
Z chaosu w porządek – zarządzanie kluczami SSH
W środowiskach, w których użytkownicy mogą samodzielnie dostarczać klucze uwierzytelniające, często zdarza się, że z biegiem lat liczba dostarczonych i wdrożonych kluczy staje się bardzo duża. Ponieważ nie ma możliwości sprawdzenia, kto posiada lub pierwotnie udostępnił dany klucz publiczny znajdujący się na serwerze, a klucze te nigdy nie wygasają, rzeczywisty stan kontroli dostępu w dużych, niezarządzanych środowiskach może być bardzo niejasny lub wręcz chaotyczny.
Zarządzanie i kontrola dostępu do serwerów i innej infrastruktury IT jest wymogiem prawnym dla każdego przedsiębiorstwa, które działa na rynkach regulowanych, takich jak finanse, energetyka, opieka zdrowotna czy handel. Przedsiębiorstwa te muszą stosować rozwiązania do zarządzania kluczami SSH, aby kontrolować dostęp przyznawany przez klucze SSH.