Как использовать аргумент пароля в командной строке для openssl для расшифровки


55

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

Вот что я пытаюсь сделать

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

Затем запрашивается ключ доступа для расшифровки. Я искал документы openssl и веб-сайты, чтобы попытаться найти ответ, если я просто хотел дать пароль команде, не пытаясь отобразить пароль в файле. Я пытался добавить -pass:somepasswordи -pass somepasswordкак с кавычками, так и без, но безрезультатно.

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

примечание: я использую openssl версии 0.9.8y

Ответы:


109

Документация была не очень понятна для меня, но в ней был ответ, задача не заключалась в том, чтобы увидеть пример.

Вот как это сделать:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

Обратите внимание, что за синтаксисом командной строки всегда -passследует пробел, а затем тип вводимой вами парольной фразы, то есть pass:для простой парольной фразы, а затем фактической парольной фразы после двоеточия без пробела.

Кроме того, в документации указано, что вы можете предоставить другие источники парольных фраз, выполнив следующие действия:

  • env:somevar получить пароль из переменной окружения
  • file:somepathname получить пароль из первой строки файла на месте pathname
  • fd:number получить пароль от номера дескриптора файла.
  • stdin читать со стандартного ввода

Теперь, когда я написал этот вопрос и ответ, все это кажется очевидным. Но определенно потребовалось некоторое время, чтобы понять, и я видел, что это заняло у других такое же время, так что, надеюсь, это может сократить это время и быстрее ответить для других! :)

В OpenSSL 1.0.1e используемый параметр - -passinили -passout. Так что этот пример будет:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword


В чем разница между использованием passin или passout? - Ха! Просто посмотрел, stdin vs stdout конечно!
dtmland

Обратите внимание, что документация для параметров пароля, применяемых к большинству openssl команд (не только enc), находится на странице руководства для openssl (1) также в Интернете в разделе «ОПЦИИ». Но я не верю вашему последнему слову о -passin / out; другие openssl команды типа rsa dsa ec pkey pkcs8 pkcs12 req caПользуются теми , но в каждой версии , которую я видел , в том числе 1.0.1e построен непосредственно из вышестоящего источника encиспользования -passили -k -kfileкак описано (на encстраницах руководства).
dave_thompson_085

Как насчет openssl dgstкоманды? Как вы вводите парольную фразу для этого в командной строке?
frakman1

4
Кстати -passin, используется для предоставления пароля для входного сертификата, и -passoutдля нового сгенерированного сертификата
drmad

7

Я использовал -passinи -passoutдля установки паролей к обоим файлам в примере:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

где 123и 321пароль


5

На данный момент Ubuntu 14.04 LTS поставляется с openssl 1.0.1f-1ubuntu2.16

В этой версии параметр для использования -k

Пример:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword

1
в вашем примере опция -k доступна команде openssl 'enc' (try man enc), она не является общей. Если вы посмотрите man opensslпод заголовком «Pass Phrase Options», каковы общие параметры; pass:password, env:var, file:pathname, fd:numberИли stdin, как упоминалось в предыдущем ответе.
Сибаз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.