Mój mózg jest owinięty wokół osi na kluczach publicznych i prywatnych. Kiedy tworzysz serwer w chmurze (instancję) w usłudze EC2 Amazon, a następnie chcesz się z nim połączyć przez SSH, Amazon wymaga pobrania prywatnego klucza, aby nawiązać połączenie. Czy idea klucza publicznego / prywatnego nie sugeruje, że Amazon powinien wymagać pobrania klucza publicznego?
Ponadto, jeśli skonfiguruję serwer SFTP do użytku klienta, czy powinienem instalować jego klucz na serwerze, czy dać mu klucz z serwera? W obu przypadkach powinien to być klucz publiczny czy prywatny?
Odpowiedzi:
Zastanawiając się głębiej nad procesem uwierzytelniania, co należy zachować w tajemnicy? Amazon zna publiczną połowę klucza i każdy może znać publiczną połowę klucza . Publiczna połowa klucza, w połączeniu z prywatną połową, oznacza, że prywatna połowa została użyta do uwierzytelnienia.
Twój klucz prywatny, który jest ci dostarczany, gdy Amazon generuje dla ciebie parę kluczy, jest użyteczny tylko wtedy, gdy jesteś jedynym, który go posiada. Jeśli nie jest to tajemnicą, każdy, kto ją zna, może również uwierzytelnić każdego, kto posiada publiczną połowę pary kluczy.
Ktokolwiek jest uwierzytelniany, musi posiadać prywatną połowę. Nie ma problemu, jeśli wszyscy na świecie mogą Cię uwierzytelnić, trzymając publiczną połowę klucza, ale tylko Ty powinieneś mieć kontrolę nad prywatną połową.
źródło
Amazon zapewnia usługi generowania kluczy, ponieważ niektóre systemy operacyjne (kaszel, Windows, kaszel) mogą nie ułatwić wygenerowania par kluczy SSH.
W przypadku SSH (i SFTP) klucz publiczny jest instalowany w pliku autoryzowanych_kluczy użytkownika podczas uruchamiania instancji EC2. Klucz prywatny jest przechowywany tylko przez użytkownika i jest przedstawiany w celu uwierzytelnienia na serwerze.
Z dokumentacji na:
http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html
wygląda na to, że Amazon generuje parę kluczy na swoich serwerach i wysyła ci klucz prywatny za pośrednictwem HTTPS. Jest to może mniej niż idealne (najlepiej, że ty i nikt inny nie będzie posiadał klucza prywatnego), ale prawdopodobnie nie strasznie, biorąc pod uwagę, że wszystko to dzieje się w kontekście uwierzytelnionej sesji i tylko Ty (i Amazon tymczasowo) widzisz klucz prywatny. Możesz również zawsze wygenerować i przesłać własny klucz publiczny do użytku EC2, zachowując jednocześnie klucz prywatny.
Aby skonfigurować użytkowników SFTP do uwierzytelniania klucza, powinni oni generować klucze SSH na swoich komputerach. Po wygenerowaniu pary kluczy powinni jedynie wysłać ci klucz publiczny do zainstalowania w odpowiednim pliku autoryzowanych_kluczy. Klucz prywatny, jak sama nazwa wskazuje, jest prywatny.
źródło
Uwierzytelnianie za pomocą klucza publicznego działa w odwrotnym kierunku niż prawdopodobnie myślisz. Klucz publiczny szyfruje wiadomości, a klucz prywatny odszyfrowuje je. Serwer przechowuje klucz publiczny właściciela konta i używa go do szyfrowania wiadomości. Tylko posiadacz klucza prywatnego może odszyfrować tę wiadomość.
Jeśli wyślesz komuś klucz tajny zaszyfrowany jego kluczem publicznym, jeśli może on powiedzieć ci, co to jest klucz tajny, to wiesz, że ma on odpowiedni klucz prywatny. Użytkownik jest następnie uwierzytelniany.
AWS wymaga pobrania i zapisania klucza prywatnego, ponieważ nie będzie go przechowywać ze względów bezpieczeństwa. Ponieważ klucz prywatny nie jest nigdzie przechowywany w AWS, możesz mieć pewność, że instancja EC2 jest bezpieczna.
źródło
W pewnym sensie to nie ma znaczenia. Para kluczy prywatny / publiczny składa się z dwóch części, a która z nich jest publiczna, zależy od Ciebie. Jeśli coś jest szyfrowane za pomocą jednego klucza, potrzebny jest drugi, aby go odszyfrować. Jeśli jeden klucz został opublikowany publicznie, a nie drugi, klucz prywatny to ten, którego nie opublikowałeś.
Dotarcie do twojego rzeczywistego pytania: prawdopodobnie kluczem, który daje ci Amazon, jest umożliwienie ci kontrolowania własnych zasobów, więc nie należy go przekazywać innym osobom. W tym kontekście musisz zaufać Amazonowi, aby mieć swój klucz prywatny, przynajmniej przez wystarczająco długi czas, aby się skonfigurować.
Jeśli chcesz, aby Twoi klienci logowali się w ten sposób, musisz dać im klucz, który są gotowi udostępnić Tobie, a zatem klucz publiczny. Instalujesz to na serwerze w uprawnionych kluczach, co w rzeczywistości mówi „każdy, kto posiada klucz prywatny pasujący do tego publicznego, może uzyskać dostęp do tego zasobu”.
źródło