web-dev-qa-db-ja.com

ssh-keygen公開鍵をopenssl PEM_read_bio_RSA_PUBKEY()関数が使用する形式に変換するにはどうすればよいですか?

Openssl PEM_read_bio_RSA_PUBKEY()関数が使用できる公開鍵の生成に問題があります。エラーが発生し続けます。

明らかに、ASCII文字列をssh-keygen <>.pubキーファイル(SSHファイル形式またはSubjectPublicKeyInfo構造)です。

これが鍵となるgenコードです:ssh-keygen -t rsa -b 1024 -C "Test Key"

公開鍵の内容をbase64 PEM ASCII文字列形式に変換するWeb上のphpでコンバーターを見つけました。しかし、関数はまだそれを好きではありません。

Opensslドキュメントには次のように記載されています。

  1. 「EVP_PKEY構造を使用して公開鍵を処理するRSA_PUBKEY()関数」
  2. 「RSA_PUBKEY関数は、RSA構造を使用してRSA公開鍵も処理します」

OpenSSH公開キーをOpenSSL関数が使用するいずれかの形式にするにはどうすればよいですか?

53
PeteP

OK!

それで、「簡単に、これを手に入れました」という考えに踏み込みました。思ったよりもずっと多くのことがあることがわかりました。

したがって、最初の問題は(OpenSSLのmanページ(man 3 pem)によると)、OpenSSLはRSAキーがPKCS#1形式であると想定していることです。明らかに、これはssh-keygenが使用しているものではありません。 2つのオプションがあります(検索から)。

OpenSSH v。5.6以降を使用している場合(私のラップトップでは使用していません)、これを実行できます。

ssh-keygen -f key.pub -e -m pem

これを行うより長い方法は、SSHキーをさまざまなコンポーネントに分解することです( ブログエントリ OpenSSHが「独占的」であると非難しているので、この一部を見つけました。 )、ASN1ライブラリを使用して、前後を入れ替えます。

幸い、あなたのために、誰かがこれを行うためのコードを書いた:

https://Gist.github.com/1024558

61
Brian Redbeard

SSH秘密鍵id_rsa、次のようにして公開鍵を抽出できます。

openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem

OPが公開鍵の変換について質問したことを理解しているので、これは質問に完全に答えることはできませんが、いずれにせよ有用だと思いました。

また、このコマンドはPEM公開鍵形式になることに注意してください。これは、一般にOpenSSLが想定している形式です。一方、Brianの回答では、RSSLublicKey形式のファイルが生成されます。これは、OpenSSLが予期する通常の形式ではありません(ただし、それ以降のバージョンでは-RSAPublicKey_in 国旗)。変換するには、これを行うことができます:

openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem
20
shawkinaw

必要な形式は、ssh-keygenPKCS8を呼び出したものです。そのため、次のコマンドで目的の出力が生成されます。

ssh-keygen -f key.pub -e -m pkcs8

ssh-keygenのmanページから:

-m key_format
         Specify a key format for the -i (import) or -e (export) conversion 
         options.  The supported key formats are: 
         ``RFC4716'' (RFC 4716/SSH2 public or private key), 
         ``PKCS8'' (PEM PKCS8 public key) or 
         ``PEM'' (PEM public key).  
         The default conversion format is ``RFC4716''.
12

以下のAmal Chaudhuriの方法と同様に、これは私にとってうまくいきました。 SFTPクライアント(Cyber​​duck)用に生成したssh公開鍵からpemファイルを作成する必要がありました。

openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
7
l3e0wu1f