LINUX.ORG.RU

Подскажите, как правильно написать такую команду в виде python скрипта.

 , ,


0

1
openssl smime -sign -binary \
    -signer sert.cer -inkey key.pem -outform PEM \
    -in file.txt -out file.txt.sig

Можно было бы и не париться, да вызывать эту команду через subprocess, но проблема в том, что ключ требует пароля.

Как перевести эту команду в скрипт на питоне с использованием PyOpenSSL (или его вообще не стоит использовать) документация у него совсем уж никакая: http://pyopenssl.sourceforge.net/

★★★★★
Ответ на: комментарий от true_admin

иногда хитропопые проги типа ssh препятствуют перенаправлению вывода, но и их можно надурить через эмуляцию терминала.

true_admin ★★★★★
()

expect например

anonymous
()

Из man 1 openssl:

PASS PHRASE ARGUMENTS
       Several commands accept password arguments, typically using -passin and
       -passout for input and output passwords respectively. These allow the
       password to be obtained from a variety of sources. Both of these
       options take a single argument whose format is described below. If no
       password argument is given and a password is required then the user is
       prompted to enter one: this will typically be read from the current
       terminal with echoing turned off.

       pass:password
                 the actual password is password. Since the password is
                 visible to utilities (like 'ps' under Unix) this form should
                 only be used where security is not important.

       env:var   obtain the password from the environment variable var. Since
                 the environment of other processes is visible on certain
                 platforms (e.g. ps under certain Unix OSes) this option
                 should be used with caution.

       file:pathname
                 the first line of pathname is the password. If the same
                 pathname argument is supplied to -passin and -passout
                 arguments then the first line will be used for the input
                 password and the next line for the output password. pathname
                 need not refer to a regular file: it could for example refer
                 to a device or named pipe.

       fd:number read the password from the file descriptor number. This can
                 be used to send the data via a pipe for example.

       stdin     read the password from standard input.
Можешь созать пайп, передать openssl'ю дескриптор на «другой конец» и отправить через пайп свой пароль. ИМХО самый прямой вариант. Ещё можно через временный файл, главное права на него безопасные выставить.

Deleted
()
Ответ на: комментарий от true_admin

иногда хитропопые проги типа ssh препятствуют перенаправлению вывода, но и их можно надурить через эмуляцию терминала.

Обычно у таких хитропопых программ предусмотрен некий способ безопасной передачи паролей из другой программы или скрипта. Для целей автоматизации и интеграции с другими системами. Если не ошибаюсь, openssh для этого использует переменную окружения SSH_ASKPASS.

Deleted
()
Ответ на: комментарий от Deleted

Да, действительно, так оказалось гораздо проще, через добавление "-passin pass:password"

Спасибо.

Только вот все равно интересно, использует ли вообще кто-нибудь PyOpenSSL с такой-то документацией.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

Да, действительно, так оказалось гораздо проще, через добавление "-passin pass:password"

А вот так делать решительно не рекомендуется. В цитате из мана даже написано почему.

Deleted
()

Делал когда-то такое для SSH и subproces.Popen.Потом переделал скриптик на Ruby. В Python как-то криворуко реализовали это дело.

lucentcode ★★★★★
()
20 мая 2014 г.
Ответ на: комментарий от Siado

Понимаю, что тема старая, но столкнулся с той же проблемой. Подскажите поподобнее решение? Сейчас мeчаюсь с twisted, но не могу в доке найти как пароль к сертификату передать

quick
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.