Se você possui muitas chaves RSA é possível que em algum momento você se perca em meio a tantas delas, principalmente se você as usar por muito tempo, quando elas já passaram foram movidas, renomeadas ou espalhadas entre muitos servidores. Então como identificar se determinado arquivo de chave pública, pertence ou não a uma chave privada específica?
Se você já tentou ler o conteúdo dos arquivos de chave pública e de chave privada deve ter observado que eles são bem diferentes entre si não sendo possível identificar se dois arquivos pertencem ou não ao mesmo par apenas olhando seu conteúdo diretamente.
Para conseguir fazer esta comparação nós precisamos saber o “SSHFP” (ou Fingerprint SSH – a impressão digital SSH) das suas chaves.
Identificando uma chave
Vamos supor então que eu tenha um arquivo de chave pública chamado “chave_rsa.pub” em um servidor remoto, mas eu não faço ideia de qual seja a parte privada dele.
Para identificar esta chave nós usaremos o comando abaixo:
ssh-keygen -l -f chave_rsa.pub
4096 SHA256:4qHUitw3GnbQJ6paXGW78fIipREuVuCW0eGZlqVd4qE Chave de exemplo (RSA)
O que ele me retornou foram estas informações:
- o tamanho chave (4096bits)
- o tipo do hash usado (SHA256)
- o fingerprint que nos interessa (aquela sequencia de letras e números) e
- o comentário que eu escrevi quando criei a chave: (Chave de exemplo (RSA))
Estas informações foram retornadas devido ao parâmetro “-l” e agora que eu já tenho o SSHFP daquela chave pública, posso executar o mesmo comando em todas as minhas chaves privadas que possuo para saber quem é o seu par:
ssh-keygen -l -f minhachaveteste
4096 SHA256:4qHUitw3GnbQJ6paXGW78fIipREuVuCW0eGZlqVd4qE Chave de exemplo
ssh-keygen -l -f id_rsa
4096 SHA256:e-uRa7t4L4RuIjHfulRmHyY1if5HlQE+U/ok7ORdsX4 welrbraga@mydesktop (RSA)
Acima eu executei o comando em duas chaves. Note que a chave privada que me interessa é a primeira (o arquivo “minhachaveteste”) e ainda, perceba que nem sempre o comentário será o mesmo.
Identificando várias chaves de uma só vez
Se você usar o mesmo comando em arquivos que possuem mais de uma chave, você verá o fingerprint de todas as chaves que ele contiver.
Isso é útil, por exemplo, para identificar as chaves dentro do arquivo “authorized_keys”, que como o nome indica, é onde estão as chaves autorizadas.
Digamos por exemplo que você tenha um servidor, com um único usuário chamado “deploy” e todos os seus “devs” acessam esta máquina com este mesmo usuário, porém cada um com sua chave privada (Não há nada de errado nisso mas você precisa fazer a gestão destas chaves, ok!?)
Rode o comando no arquivo authorized_key deste usuário deploy, lá no servidor remoto e você deverá ver algo assim:
ssh-keygen -l -f authorized_keys
4096 SHA256:WZonjPkrTne2Fp6BpukB6LrWjiLS7JEKHPsJykhANnA renato@desktop (RSA)
1024 SHA256:tSYL4t5P5tfbg-/QgFO+8AZzivbs73TGmwD0O0XrlSc thiago@jesus (DSA)
1024 SHA256:OKsTzni6OGK/k7GRxtfABEBeBh-GIlz+1qSKpCmAp+4 vitor@Dell Latitude da empresa (DSA)
2048 SHA256:I2sxdFOFoXAR0j7rBAzM0Zl2ol45XfBlTONAKK743ec remote deploy on docker image (RSA)
4096 SHA256:DbmvuIa3JGu9pzrGuFaBJSZ20543aJRVZS5Xailvk8I vitor@casa (RSA)
Neste exemplo foram identificadas 5 chaves, e caso você não reconheça qualquer uma delas, peça a sua equipe para executar o comando “ssh-keygen -l” sobre seus arquivos de chave e informar o fingerprint.
O que fazer com isso?
Uma vez que você identifique as chaves, o ideal seria nomear os pares de forma que se possa identificá-los pelo mesmo nome. Por exemplo, se sua chave privada chama-se “casa”, a pública deveria se chamar “casa.pub”. Se a privada for “roteador”, a pública seria “roteador.pub” etc.
Claro que isso não é obrigatório, haja visto ser possível renomeá-las, mas manter o mesmo nome ajuda bastante a se manter organizado.
Também aproveite para remover do seu servidor todas as chaves públicas desconhecidas. Se você analisou o arquivo authorized_keys e, não identificou qualquer uma das chaves ali existente, remova-a imediatamente.
Como é possível identificar as chaves fracas (quanto menos o seu tamanho menos segura), remova-as e notifique ao seu usuário para gerar um novo par atualizado e mais seguro, sempre que encontrá-las.
Chaves RSA com 1024bits não são mais consideradas confiáveis, então recomende sempre o uso de chaves de 4096 bits, ou se não for possível (alguns sistemas e equipamentos possuem limitação) chaves de 2048 bits.
Chaves de usuários que já saíram da empresa/projeto ou que não são mais utilizadas há muito tempo também devem ser removidas.
Com isso você está assegurando uma maior proteção aos dados e serviços neste equipamento.