Мой мозг обернут вокруг оси на открытых и закрытых ключах. Когда вы создаете облачный сервер (экземпляр) в сервисе Amazon EC2, а затем хотите подключиться к нему через SSH, Amazon требует, чтобы вы установили закрытый ключ для установления соединения. Разве идея открытого / закрытого ключа не предполагает, что Amazon должен требовать от вас загрузки открытого?
Кроме того, если я настрою SFTP-сервер для использования клиентом, должен ли я устанавливать его ключ на сервер или давать ему ключ от сервера? В любом случае, это должен быть открытый или закрытый ключ?
Ответы:
Размышляя более глубоко о процессе аутентификации, что нужно держать в секрете? Amazon знает публичную половину ключа, и любой желающий может знать публичную половину. Публичная половина пары ключей при сопоставлении с частной половиной означает, что частная половина использовалась для аутентификации.
Ваш закрытый ключ, который предоставляется вам, когда Amazon генерирует для вас пару ключей, полезен только в том случае, если он у вас есть. Если это не секрет, то любой, кто знает это, может также аутентифицироваться любому, кто владеет половиной пары ключей.
Тот, кто проходит проверку подлинности, должен иметь личную половину. Это нормально, если все в мире могут аутентифицировать вас, удерживая открытую половину ключа, но только вы должны контролировать личную половину.
источник
Amazon предоставляет услуги генерации ключей, потому что некоторые операционные системы (кашель, Windows, кашель) могут не облегчать создание пар ключей SSH.
При использовании SSH (и SFTP) открытый ключ устанавливается в файл авторизованного пользователя при запуске экземпляра EC2. Закрытый ключ хранится только пользователем и предоставляется для аутентификации на сервере.
Из документации по адресу:
http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html
похоже, что Amazon генерирует пару ключей на своих серверах и отправляет вам закрытый ключ через HTTPS. Возможно, это не совсем идеально (в идеале, вы и никто другой не будете обладать закрытым ключом), но, вероятно, это не так ужасно, учитывая, что все это происходит в контексте вашей аутентифицированной сессии, и только вы (и Amazon временно) видите закрытый ключ. Вы также можете всегда создавать и загружать свой собственный открытый ключ для использования в EC2, сохраняя при этом личный ключ строго закрытым.
Для настройки пользователей SFTP для аутентификации ключей они должны генерировать ключи SSH на своих компьютерах. После того, как они сгенерируют пару ключей, они должны только отправить вам открытый ключ для установки в соответствующем файле авторизованных ключей. Закрытый ключ, как следует из названия, является закрытым.
источник
Аутентификация с открытым ключом работает в обратном направлении, как вы, вероятно, думаете. Открытый ключ шифрует сообщения, а закрытый ключ расшифровывает их. Сервер хранит открытый ключ владельца учетной записи и использует его для шифрования сообщения. Только владелец закрытого ключа может расшифровать это сообщение.
Если вы отправляете кому-то секрет, зашифрованный с помощью его открытого ключа, если он может сказать вам, что это за секрет, то вы знаете, что он держит соответствующий закрытый ключ. Пользователь аутентифицируется.
AWS требует, чтобы вы загрузили и сохранили свой закрытый ключ, потому что по соображениям безопасности он не будет его хранить. Поскольку закрытый ключ нигде не хранится в AWS, вы можете быть уверены, что ваш экземпляр EC2 защищен.
источник
В каком-то смысле это не имеет значения. Пара закрытых / открытых ключей состоит из двух частей, и какая из них является открытой, зависит от вас. Если что-то зашифровано одним ключом, вам нужен другой для его расшифровки. Если вы опубликовали один ключ публично, а не другой, закрытый ключ - это тот, который вы не опубликовали.
Возвращаясь к вашему актуальному вопросу: предположительно, ключ, который дает вам Amazon, - это позволить вам контролировать свои собственные ресурсы, поэтому он не должен передаваться другим людям. В этом контексте вы должны доверять Amazon иметь свой закрытый ключ, по крайней мере, достаточно долго, чтобы его настроить.
Если вы хотите, чтобы ваши клиенты входили таким образом, вам нужно, чтобы они дали вам ключ, которым они готовы поделиться с вами, и, следовательно, их открытый ключ. Вы устанавливаете это на сервере в authorized_keys, который фактически говорит, что «любой, кто обладает закрытым ключом, соответствующим этому общему, может получить доступ к этому ресурсу».
источник