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


49

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

明らかにssh-keygen <>.pub、SSHファイル形式のようにキーファイルでASCII文字列を使用したり、SubjectPublicKeyInfo構造化したりすることはできません。

主要なコードは次のとおりです。 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関数が使用するいずれかの形式にするにはどうすればよいですか?


このアウトを考え出し:のみなどのOpenSSLツールを使用します
PeteP

秘密鍵の作成:openssl genrsa -out test.priv.key 2048; 同じ形式で公開キーを出力(PEM?):openssl rsa -in test.priv.key -pubout -out test.pub.key
PeteP

回答:


56

OK!

それで、私はこの考えに歩み寄りました。「簡単です、私はこれを得ました。」思った以上に多くのことがあります。

そのため、最初の問題は(OpenSSLのマニュアルページ(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


9
ssh-keygenこの方法は、Linuxではなく、マックOS X上で動作しているようです
ふた

3
ふた、SSHバージョンに関する回答のメモを参照してください。OS XはOpenSSHの最新バージョンを出荷していません。コマンドを実行しますssh -V
ブライアンレッドビアード14年

3
では動作しませんOpenSSH_6.2p2。で動作しOpenSSH_6.6p1ます。
古いプロ14

-m私にとってはうまくいきません...回避策は何ですか?
プスタントン

2
Macで動作します!
グレッグホーンビー

18

SSH秘密鍵を持っていると仮定するとid_rsa、次のように公開鍵を抽出できます。

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

OPが公開鍵の変換について尋ねたので、これは質問にまったく答えていませんが、とにかく役に立つと思いました。

また、このコマンドはPEM公開キー形式になります。これは一般にOpenSSLが期待するものです。一方、Brianの答えは、RSAPublicKey形式のファイルになりますが、これはOpenSSLが期待する通常の形式ではありません(ただし、後のバージョンでは明らかに-RSAPublicKey_inフラグを介して読み取ることができます)。変換するには、これを行うことができます:

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

おかげで、秘密鍵からの-puboutが私にとってはうまくいきました。
ショーンデューベリー16年

openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pem動作します(つまり、入力はpem形式の秘密鍵です)。いい答えだ。
ジョニーウォン

1
更新:ブライアンの回答が修正され-m pkcs8、OpenSSHの人々が間違った名前を使用てもX.509 'PUBKEY' 生成されるようになりました。また、2014-01のOpenSSH 6.5以降、作成者が-oセキュリティを強化するために「新しい形式」を指定した場合、この方法は機能しません。
dave_thompson_085

11

あなたが望むフォーマットは、何をssh-keygen呼ぶかPKCS8です。したがって、次のコマンドは目的の出力を生成します。

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

ssh-keygenmanページから:

-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''.

これは実際にはLinuxとmacOSの両方で動作します。
ジェイテイラー

OpenSSLの秘密鍵から同等の生成された公開鍵を抽出するにはopenssl rsa -in key -pubout -out key.pub.openssl.pkcs8
Mohannd

6

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

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

これは実際には機能していないようです。
outside2344 14年

5
これは、公開キーOPが要求していた秘密RSAキーに対してのみ機能します。間違った答え。
-Devy

3
実際、id_rsaすでに正しい形式になっています。自分でチェックアウトできますid_rsa.pem。結果は100%同じです。
ミロクロパチェク

-2

別のサイトからこれを行う別の方法。別の方法が必要な場合にこれを投稿します。とてもうまくいきます。 http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html

openssl dsa -in ~/.ssh/id_dsa -outform pem > id_dsa.pem

この方法は実際には機能しないようです。
ショーン

7
id_rsa公開鍵ではありません。間違った答え。
アフメットアルプバルカン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.