カスタム暗号化RSAキーを作成する方法は知っていると思いますが、ssh-keygenのように暗号化されたRSAキーを読み取るにはどうすればよいですか?
私はこれができることを知っています:
OpenSSL::PKey::RSA.new(File.read('private_key'))
しかし、OpenSSLはパスフレーズを要求します...どうすればそれをパラメーターとしてOpenSSLに渡すことができますか?
そして、どうすればssh-keygenによって生成されたものと互換性のあるものを作成できますか?
暗号化された秘密鍵を作成するには、次のようにします。
pass = '123456'
key = OpenSSL::PKey::RSA.new(1024)
key = "0000000000000000#{key.to_der}"
c = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
c.encrypt
c.key = Digest::SHA1.hexdigest(pass).unpack('a2' * 32).map {|x| x.hex}.pack('c' * 32)
c.iv = iv
encrypted_key = c.update(key)
encrypted_key << c.final
また、OpenSSL :: PKey :: RSA.new(1024)(暗号化なし)によって生成されたキーは、パスワードなしのログインを試みたときに機能しません(つまり、公開キーをサーバーにコピーし、秘密キーを使用してログインする)。
また、OpenSSLを介してssh-keygenファイルを開き、その内容を確認すると、キーの最初と最後に追加の文字が含まれているように見えます。これは正常ですか?
私はこのセキュリティ関連のいくつかを本当に理解していませんが、私は学ぼうとしています。私が間違っているのは何ですか?