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ドキュメントには次のように記載されています。
OpenSSH公開キーをOpenSSL関数が使用するいずれかの形式にするにはどうすればよいですか?
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ライブラリを使用して、前後を入れ替えます。
幸い、あなたのために、誰かがこれを行うためのコードを書いた:
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
必要な形式は、ssh-keygen
がPKCS8
を呼び出したものです。そのため、次のコマンドで目的の出力が生成されます。
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''.
以下のAmal Chaudhuriの方法と同様に、これは私にとってうまくいきました。 SFTPクライアント(Cyberduck)用に生成したssh公開鍵からpemファイルを作成する必要がありました。
openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem