ssh-keygen公開鍵をopenssl PEM_read_bio_RSA_PUBKEY()関数が使用する形式に変換する方法は?

ssh-keygen公開鍵をopenssl PEM_read_bio_RSA_PUBKEY()関数が使用する形式に変換する方法は?

私はopenssl関数で利用可能な公開鍵を生成するのに問題がありますPEM_read_bio_RSA_PUBKEY()。継続エラーが発生します。

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

以下はキー生成コードです。ssh-keygen -t rsa -b 1024 -C "Test Key"

公開鍵の内容をbase64 PEM ASCII文字列形式に変換するPHPコンバータをオンラインで見つけました。しかし、この機能はまだ気に入っていません。

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

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

OpenSSH公開鍵をOpenSSL機能が使用する形式に変換するにはどうすればよいですか?

答え1

いいね!

だから私は「簡単ですね、わかりました」と思い始めました。知ってみると、私が思ったよりもはるかに多くの意味がありました。

最初の問題は、OpenSSLのマニュアルページによると、man 3 pemOpenSSLは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

答え2

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

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

OPが公開鍵変換について要求したことを知っているので、これは質問に正確には答えませんが、とにかく一部の人にとっては役に立つと思いました。

また、このコマンドは通常、OpenSSLで予想されるPEM公開鍵形式を生成します。一方、Brianの答えは、OpenSSLが期待する一般的な形式ではなくRSAPublicKey形式でファイルを生成します(後のバージョンでは明らかにflagsを介して読み取ることができます-RSAPublicKey_in)。変換するには、次のことができます。

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

答え3

希望の形式はですssh-keygenPKCS8したがって、次のコマンドは目的の出力を生成します。

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

ssh-keygenマニュアルページから:

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

答え4

ssh-keygen -f path/to/id_rsa.pub -e -m pem > path/to/rsa.pem

コマンドの各部分は次のことを行います。

-f path/to/id_rsa.pub: 入力ファイル、つまり既存の OpenSSH 公開鍵ファイル (id_rsa.pub) のパスを指定します。

-e -m pem:指定された形式をPEMに変換します。

">" path/to/rsa.pem: 指定したディレクトリ (path/to/) にある rsa.pem というファイルに出力をリダイレクトします。

ssh-keygen -f id_rsa.pub -e -m pem > yourfilename.pem 

関連情報