Como você testar a / par de chaves DSA público-privada?
-
07-07-2019 - |
Pergunta
Existe uma maneira fácil de verificar se uma determinada chave privada corresponde a um determinado chave pública? Eu tenho alguns * pub, e alguns arquivos .key *, e eu preciso verificar que ir com o que.
Novamente, estes são pub / arquivos de chave, DSA.
Eu realmente prefiro uma frase de algum tipo ...
Solução
Eu encontrei uma maneira que parece funcionar melhor para mim:
ssh-keygen -y -f <private key file>
que a saída do comando vontade a chave pública para a chave privada dada, então, em seguida, basta comparar a saída para cada arquivo pub *.
Outras dicas
Eu sempre comparar um hash MD5 do módulo usando estes comandos:
Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5
Se os hashes corresponderem, em seguida, os dois arquivos juntos.
Para chaves DSA, use
openssl dsa -pubin -in dsa.pub -modulus -noout
para imprimir as chaves públicas, então
openssl dsa -in dsa.key -modulus -noout
para exibir as chaves públicas correspondentes a uma chave privada, em seguida, compará-los.
Supondo que você tenha as chaves públicas dentro X.509 certificados, e assumindo que eles são chaves RSA, em seguida, para cada chave pública, faça
openssl x509 -in certfile -modulus -noout
Para cada chave privada, faça
openssl rsa -in keyfile -modulus -noout
Em seguida, combinar as chaves por módulo.
A verificação pode ser feita mais fácil com diff:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
A única coisa estranha é que diff não diz nada se os arquivos são os mesmos, assim você só vai ser dito se o público e privado não jogo.
Excluir as chaves públicas e gerar novos das chaves privadas. Mantê-los em diretórios separados, ou usar uma convenção de nomenclatura para mantê-los em linha reta.
Se você estiver em Windows e quer usar uma GUI, com puttygen você pode importar sua chave privada para ele:
Uma vez importado, você pode salvar a sua chave pública e compará-lo ao seu.
Digite o seguinte comando para verificar se uma chave privada e uma chave pública são um conjunto combinado (idêntico) ou não um conjunto combinado (diferem) em $ USUÁRIO diretório / .ssh. O comando corte evita que o comentário no final da linha na chave pública de serem comparados, permitindo apenas a chave para ser comparado.
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
saída será semelhante a qualquer uma destas linhas.
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
Eu escrevi um script shell que os usuários usam para verificar permissão de arquivo de seus ~ / .ssh / arquivos e combinados conjunto de chaves. Ele resolve os meus desafios com incidentes Utilizador Configurar ssh. Pode ajudá-lo. https://github.com/BradleyA/docker-security-infrastructure/ árvore / master / ssh
Nota: A minha resposta anterior (março 2018) já não funciona com as versões mais recentes do OpenSSH. resposta Anterior: dif -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(corte -d '' -f 1,2 ~ / .ssh / id_rsa.pub)
Criptografar algo com a chave pública, e ver qual chave privada decifra-lo.
Este artigo projeto de código por ninguém menos que implementos Jeff Atwood uma simplificado invólucro em torno das classes .NET cripto. Supondo que essas chaves foram criadas para uso com RSA, use a classe assimétrica com sua chave pública para criptografar e o mesmo com a sua chave privada para descriptografar.
Se ele retornar nada, então eles combinam:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
Basta usar puttygen e carregar a sua chave privada em isto. Oferece diferentes opções, por exemplo, exportar a chave pública coressponding.