Meu cérebro está enrolado no eixo com chaves públicas e privadas. Quando você cria um servidor em nuvem (instância) no serviço EC2 da Amazon e depois deseja se conectar a ele via SSH, a Amazon exige que você baixe uma chave privada para fazer a conexão. A idéia por trás da chave pública / privada não sugere que a Amazon exija que você baixe uma pública?
Além disso, se eu configurar um servidor SFTP para uso de um cliente, devo instalar a chave no servidor ou fornecer uma chave do servidor? Em ambos os casos, deve ser uma chave pública ou privada?
Respostas:
Pensando mais profundamente sobre o processo de autenticação, o que precisa ser mantido em segredo? A Amazon conhece a metade pública da chave e qualquer pessoa pode conhecer a metade pública. A metade pública do par de chaves, quando combinada com a metade privada, indica que a metade privada foi usada para autenticar.
Sua chave privada que é fornecida quando a Amazon gera um par de chaves para você é útil apenas se você for a única. Se não é um segredo, qualquer pessoa que o conheça também pode se autenticar para quem detém a metade pública do par de chaves.
Quem está sendo autenticado deve ter a metade privada . Tudo bem se todos no mundo puderem autenticá-lo mantendo a metade pública da chave, mas apenas você deve estar no controle da metade privada.
fonte
A Amazon fornece serviços de geração de chaves porque alguns sistemas operacionais (tosse, Windows, tosse) podem não facilitar a geração dos pares de chaves SSH.
Com o SSH (e SFTP), a chave pública é instalada no arquivo allowed_keys do usuário quando a instância do EC2 é iniciada. A chave privada é mantida apenas pelo usuário e é apresentada para autenticação no servidor.
A partir da documentação em:
http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html
parece que a Amazon gera o par de chaves em seus servidores e envia a chave privada via HTTPS. Talvez isso seja menos do que perfeito (idealmente, você e mais ninguém possuirão a chave privada), mas provavelmente não o será, visto que tudo isso ocorre no contexto da sua sessão autenticada e somente você (e a Amazon temporariamente) vêem a chave privada. Você também pode sempre gerar e fazer upload de sua própria chave pública para uso do EC2, mantendo a chave privada estritamente privada.
Para configurar usuários SFTP para autenticação de chave, eles devem gerar chaves SSH em suas máquinas. Depois que eles gerarem um par de chaves, eles deverão enviar apenas a chave pública para instalação no arquivo autorizado_chaves relevante. A chave privada, como o nome indica, é privada.
fonte
A autenticação de chave pública funciona no sentido inverso ao que você provavelmente está pensando. A chave pública criptografa as mensagens e a chave privada as descriptografa. O servidor armazena a chave pública do titular da conta e a usa para criptografar uma mensagem. Somente o titular da chave privada pode descriptografar essa mensagem.
Se você enviar a alguém um segredo criptografado com sua chave pública, se ele puder lhe dizer qual é esse segredo, você saberá que ele possui a chave privada correspondente. O usuário é então autenticado.
A AWS exige que você baixe e salve sua chave privada porque ela não será armazenada por motivos de segurança. Como a chave privada não é armazenada em nenhum lugar da AWS, você pode ter certeza de que sua instância do EC2 é segura.
fonte
Em certo sentido, isso não importa. Um par de chaves públicas / privadas consiste em duas partes, e qual delas é a pública depende de você. Se algo estiver criptografado com uma chave, você precisará da outra para descriptografar. Se você publicou uma chave publicamente e não a outra, a chave privada é a que você não publicou.
Chegando à sua pergunta real: presumivelmente, a chave que a Amazon fornece é permitir que você controle seus próprios recursos, para que não seja entregue a outras pessoas. Nesse contexto, você precisa confiar na Amazon para ter sua chave privada, pelo menos por tempo suficiente para ser configurado.
Se você deseja que seu cliente efetue logon dessa maneira, é necessário que ele forneça uma chave que eles estão preparados para compartilhar com você, portanto, a chave pública deles. Você instala isso no servidor em allowed_keys, que está efetivamente dizendo "qualquer pessoa que possua a chave privada correspondente a essa pública poderá acessar esse recurso".
fonte