私は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のドキュメントには次のように記載されています。
- 「EVP_PKEY構造を使用して公開鍵を処理するRSA_PUBKEY()関数」
- RSA_PUBKEY 関数は RSA 構造を使用して RSA 公開鍵も処理します。
OpenSSH公開鍵をOpenSSL機能が使用する形式に変換するにはどうすればよいですか?
答え1
いいね!
だから私は「簡単ですね、わかりました」と思い始めました。知ってみると、私が思ったよりもはるかに多くの意味がありました。
最初の問題は、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ライブラリを使用してコンテンツを交換することを発見しました。
幸いなことに、誰かがこれを行うコードを書いています。
答え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-keygen
。PKCS8
したがって、次のコマンドは目的の出力を生成します。
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