2011-01-20 14 views
1

私はpopen3でバイナリデータを送信しようとしていますが、エラーが発生しています。open3 popen3バイナリデータ

私が発行してるシェルコマンドは次のとおりです。キーはバイナリファイルである

key = File.open('path.key').read 
Open3.popen3("openssl pkcs8 -inform DER -outform PEM -passin pass:#{password}") do |stdin, stdout, stderr| 
    stdin.print(key) 
    unless (err = stderr.read).empty? then raise err end 
    stdout.read 
end 

。 OpenSSLによれば、その鍵は有効ではないと私は頭を傷つけています。私はOpenSSLを持つことでコマンドを発行する場合

さて、それは正しく

"openssl pkcs8 -in path.key -inform DER -outform PEM -passin pass:#{password}" 

作品、私は認識していないよエンコーディング問題がある代わりに、標準入力を通過させることで、ファイルシステムから直接それを読んで?あるいはこれは単に不可能です。私はWebサービスを通じてキーファイルを受け取るので、ディスクに保存しておき、opensslに読み込ませて、代わりにメモリ内のすべてのプロセスを実行する必要がありません。

Open3.popen3("openssl pkcs8 -inform DER ...") do |stdin, stdout, stderr| 
    stdin.reopen(File.open('path.key', 'rb')) 
    unless (err = stderr.read).empty? then raise err end 
    stdout.read 
end 

代わりの文字列にファイルを読み込み、ファイルであることを、プロセスの標準入力を再開:

はこれを試してみてください、あなたの時間を

答えて

0

、ありがとうございました。また、セーフモードにするために、バイナリモードで開きます(File.openコールのrbモードに注意してください)。

関連する問題