Estou tendo um problema ao gerar uma chave pública que a PEM_read_bio_RSA_PUBKEY()
função openssl pode consumir. Eu continuo recebendo erros.
Obviamente, não posso simplesmente usar a string ASCII no ssh-keygen <>.pub
arquivo de chave, pois está no formato de arquivo SSH ou talvez eu SubjectPublicKeyInfo
estrutura.
Aqui está o principal código gen: ssh-keygen -t rsa -b 1024 -C "Test Key"
Eu encontrei um conversor em php na web que converterá o conteúdo da chave pública em um formato de seqüência de caracteres base64 PEM ASCII. No entanto, a função ainda não gosta.
A documentação do Openssl declara:
- “Função RSA_PUBKEY () que processa uma chave pública usando uma estrutura EVP_PKEY”
- “As funções RSA_PUBKEY também processam uma chave pública RSA usando uma estrutura RSA”
Como obtenho minha chave pública OpenSSH nos dois formatos que a função OpenSSL a consumirá?
Respostas:
ESTÁ BEM!
Então, entrei no pensamento "Calma, entendi". Acontece que há muito mais do que eu pensava.
Portanto, a primeira questão é que (de acordo com as páginas de manual do OpenSSL (man 3 pem)), o OpenSSL espera que a chave RSA esteja no formato PKCS # 1. Claramente, não é com isso que o ssh-keygen está trabalhando. Você tem duas opções (de pesquisar ao redor).
Se você possui o OpenSSH v. 5.6 ou posterior (eu não tinha no meu laptop), é possível executar o seguinte:
O método mais longo de fazer isso é desmembrar sua chave SSH em seus vários componentes (a entrada do blog que encontrei foi acusar o OpenSSH de ser "proprietário", prefiro chamá-lo de "exclusivo") e usar uma biblioteca ASN1 para trocar as coisas.
Felizmente para você, alguém escreveu o código para fazer isso:
https://gist.github.com/1024558
fonte
ssh-keygen
método parece funcionar no Linux, mas não Mac OS X.ssh -V
.OpenSSH_6.2p2
. FuncionaOpenSSH_6.6p1
.-m
não funciona para mim ... qual é o problema?Supondo que você tenha a chave privada SSH
id_rsa
, você pode extrair a chave pública da seguinte maneira:Sei que o OP perguntou sobre a conversão de uma chave pública, então isso não responde muito bem à pergunta, mas achei que seria útil para alguns de qualquer maneira.
Observe também que esse comando resulta em um formato de chave pública do PEM, que geralmente é o que o OpenSSL espera. A resposta de Brian, por outro lado, resulta em um arquivo no formato RSAPublicKey, que não é o formato normal esperado pelo OpenSSL (embora versões posteriores possam aparentemente lê-lo por meio do
-RSAPublicKey_in
sinalizador). Para converter você pode fazer isso:fonte
openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pem
também funciona (ou seja, a entrada é uma chave privada no formato pem). Boa resposta.-m pkcs8
, apesar de o OpenSSH usar o nome errado , produz X.509 'PUBKEY'. Além disso, desde o OpenSSH 6.5 em 2014-01 se o criador especificou 'novo formato'-o
para maior segurança, esse método não funcionará e, já que o 7.8 em 2018-08 'novo formato' agora é o padrão, o mesmo.O formato que você deseja é o que
ssh-keygen
chamaPKCS8
. Portanto, o seguinte comando produzirá a saída desejada:Na
ssh-keygen
página do manual:fonte
Semelhante ao método de Amal Chaudhuri abaixo, foi o que funcionou para mim. Eu precisava criar um arquivo pem a partir da chave pública ssh que eu gerara para o meu cliente SFTP (Cyberduck).
fonte
id_rsa
já está no formato certo, você pode conferir sozinho, o resultadoid_rsa.pem
é 100% idêntico.Outra maneira de fazer isso em outro site. Publicando isso no caso de você precisar de outro método. Funciona muito bem. http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html
fonte
id_rsa
não é uma chave pública. Resposta errada.