2011-01-20 4 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}" 

Есть проблема кодировки я не в курсе ? Или это просто невозможно. Поскольку я буду получать файлы ключей через веб-сервис, я бы предпочел не сохранять их на диск и открыть их для чтения, а вместо этого сделать весь процесс в памяти.

Спасибо за ваше время

ответ

0

Попробуйте это:

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 

Вместо чтения файла в строку, вновь открыть стандартный ввод процесса быть файл. Также, чтобы быть в безопасности, откройте его в двоичном режиме (обратите внимание на режим rb в вызове File.open)

Смежные вопросы