Além de: ssh-keygen -m
é apenas em versões bastante recentes do OpenSSH, muito mais recentes do que eu esperaria no CentOS 3.9. Você usou algum repositório secundário ou construiu você mesmo ou algo assim? Enfim ...
O que o OpenSSH chama de 'PEM' não é o tipo de PEM OpenSSL usa aqui.
Antecedentes: A OpenSSL library há muito tempo suporta dois tipos de estruturas de chave pública, nos formatos PEM e DER:
-
uma estrutura 'herdada' específica para cada algoritmo suportado, com cabeçalhos PEM como
-----BEGIN RSA PUBLIC KEY-----
-----BEGIN DSA PUBLIC KEY-----
-----BEGIN EC PUBLIC KEY-----
implementado pelas rotinasPEM_{write,read}{RSA,DSA,EC}PublicKey
-
uma estrutura genérica definida por X.509 denominada
SubjectPublicKeyInfo
com cabeçalho PEM em-----BEGIN PUBLIC KEY-----
!! note que nenhum nome de algoritmo
implementado pelas rotinasPEM_{write,read}{,RSA,DSA,EC}PUBKEY
No entanto, a linha de comando OpenSSL usa o último quase que exclusivamente, incluindo rsautl -pubin
. Você pode ver que você tem o primeiro. Por quê?
OpenSSH , quando recentemente adicionou a opção -m
format a ssh-keygen -e
export, inexplicavelmente chamada de estruturas herdadas do OpenSSL PEM
, mas a estrutura genérica do OpenSSL X.509 PKCS8
- embora não seja de todo PKCS # 8, que é um formato padrão e comum para chaves privadas .
Suas opções são:
-
use a opção de formato de aparência errada, mas realmente correta
ssh-keygen -e -m pkcs8
-
converta o arquivo que você usa com a única operação que faz manipula a estrutura legada:
openssl rsa -in sshpub_called_pem -RSAPublicKey_in -out goodpub -pubout
mas apenas no OpenSSL 1.0.0 e superior. -
dado que seu arquivo de chave privada OpenSSH está no formato compatível com OpenSSL (
-----BEGIN RSA PRIVATE KEY-----
não-----BEGIN OPENSSH PRIVATE KEY-----
, que também é uma adição recente ao OpenSSH), é possível usar OpenSSL em vez dessh-keygen -e
:openssl rsa -in sshprivate -pubout -out pubforopenssl
ou em 1.0.0 e acima, a nova alternativa brilhanteopenssl pkey -in sshprivate -pubout -out pubforopenssl
TAMBÉM SEJA PRECISADO : rsautl -sign|-verify
(por padrão) usa preenchimento PKCS # 1-v1.5 (também conhecido como tipo 01), mas NÃO obedece ao padrão que requer você também codifica o hash em um ASN.1 SEQUENCE
. As assinaturas que você criar dessa maneira NÃO serão verificadas em outro software que obedeça ao padrão, e as assinaturas criadas em outro software fornecerão resultados diferentes (embora PARTICULARMENTE). Considere, em vez disso, usar
openssl {dgst -hashname | hashname} {-sign privatekey | -verify publickey}
que faz a operação completa: codificar os dados, codificar ASN.1, bloco e sinal RSA ou, por outro lado, verificar, desmarcar, decodificar e corresponder o RSA; ou
openssl pkeyutl -sign|-verify -inkey key [-pubin] -pkeyopt digest:hashname
em que a chave é uma chave RSA, que faz todo o PKCS # 1-v1.5 exceto codificar os dados. Por exemplo: link
link
link
link
link