Como proteger a conexão SFTP em ambos os sentidos

1

Eu quero configurar uma conexão SFTP entre meu computador e um servidor.

Gerei um par de chaves no meu computador e escrevi minha chave pública no arquivo "authorized_keys" no servidor. Tenho certeza de que funciona, porque quando tento me conectar de um computador que não tem minha chave privada (eu sei, ninguém mais deve tê-lo), uma senha é solicitada.

De acordo com esta imagem , meu servidor é Bob e meu computador é Alice. Quando o servidor está enviando uma mensagem, ele usa minha chave pública para criptografá-la e eu uso minha chave privada para descriptografá-la. Mas se eu enviar uma mensagem para o servidor, ela não será criptografada, não é? Se for, como é criptografado?

Pelo que entendi sobre criptografia assimétrica, se eu quiser criptografar as mensagens que envio, tenho que gerar um par de chaves no servidor e colocar sua chave pública no arquivo "authorized_keys" do meu computador, certo?

Como posso verificar se a conexão está segura em ambos os sentidos (envio e recebimento)?

Obrigado!

    
por Rallph 15.03.2018 / 08:52

2 respostas

0

Há duas coisas importantes acontecendo nas conexões SSH:

Autenticação do servidor & criptografia

O servidor lhe envia sua chave pública e você precisa confiar nela. Você poderia obtê-lo manualmente antes disso e, em um ambiente de segurança ideal, nunca se conectaria a um servidor SSH ANTES de saber que a chave pública dele está correta. Para que servem as CAs, elas assinam uma chave pública de servidores. Na maioria dos ambientes SSH, você apenas aceita o pubkey do servidor como cliente. Esta é a inicial "você quer confiar neste servidor e adicioná-lo à sua lista?" - pergunta. O pubkey do servidor é armazenado em .ssh / known_hosts no cliente em sistemas Linux .

A criptografia real da conexão não é assimétrica. Este é um grande equívoco que muitas pessoas têm sobre criptografia de chave privada / pública. Seria muito lento. O que realmente acontece é que o servidor e o cliente geram um segredo compartilhado (também conhecido como senha longa) que é criptografia simétrica para essa sessão. O cliente e o servidor usam criptografia assimétrica até concordarem com um segredo compartilhado. Depois disso, eles mudam para criptografia simétrica com esse segredo compartilhado como chave.

Esse tipo de criptografia é a mais comum e chamada criptografia híbrida , embora quase todo mundo (erroneamente) a chame de criptografia assimétrica.

Um exemplo de criptografia assimétrica "real" e pura é a criptografia de e-mail com PGP, porque TODAS as mensagens são criptografadas assimetricamente.

Além disso: o segredo compartilhado não é armazenado permanentemente, a cada nova sessão um novo segredo compartilhado é negociado.

Autenticação de cliente

Isso é uma coisa totalmente diferente, é o que pode ser autenticação por senha e / ou chave. A chave pública do cliente (localizada em ~ / .ssh / id_rsa.pub) deve estar presente no arquivo authorized_keys dos servidores (por exemplo, para root: /root/.ssh/authorized_keys). Antes que ssh-copy-id existisse, as pessoas fariam algo como

    cat ~/.ssh/id_rsa.pub | ssh root@server "cat >>  ~/.ssh/authorized_keys"

para anexar sua chave aos servidores authorized_keys.

O certificado do cliente NÃO é usado para criptografia, apenas para autenticação.

IMPORTANTE Editar: tornou a postagem mais clara em relação a ssh-copy-id para evitar mal-entendidos.

A partir de agora, ssh-copy-id é a melhor maneira prática de adicionar uma chave pública de clientes a um servidor. Acabei de postar o método cat para mostrar quais arquivos são manipulados em ambos os lados para mostrar a conexão entre chaves privadas e públicas e como elas são armazenadas.

Ao usar o gato, há o risco de esquecer um ">" por exemplo, que sobrescreveria o seu arquivo authorized_keys (no Linux "> >" significa anexar, ">" significa sobrescrever). Seja responsável ao manipular arquivos de configuração diretamente. Obrigado @Rallph por apontar isso.

    
por 15.03.2018 / 09:51
0

O servidor tem seu próprio par de chaves. Quando você se conectar pela primeira vez a um servidor SSH, deverá ser solicitado pelo seu cliente SSH / SFTP, se confiar na chave do host do servidor (= chave pública).

Somente depois de verificar cuidadosamente se é realmente uma chave pública legítima do servidor, sua conexão é segura. Veja meu artigo Onde eu obtenho a impressão digital da chave de host SSH para autorizar o servidor?

Observe também que nem o par de chaves nem o par de chaves do servidor são realmente usados para criptografar os dados. Isso é um pouco mais complicado.

Veja também:

por 15.03.2018 / 09:12