Как сгенерировать ключ openSSL, используя фразу-пароль из командной строки? - PullRequest
86 голосов
/ 28 ноября 2010

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

Второе - как мне сгенерировать пару ключей из командной строки, поставив ключевую фразу в командной строке?1004 *

Наконец-то я заработал, используя эти команды, используя exec (), который обычно считается небезопасным, лучше передать PassPhrase в файл.Я могу принять этот риск, так как уверен, что PHP будет когда-либо выполняться только на моем ПК (который запускает windows и не имеет команды PS).

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

Большое спасибо @caf,без кого это было бы невозможно.

Только одно сожаление - что, независимо от того, сколько я Google, никто не может заставить openssl_pkey_new() работать с Xampp на Windows (что является собственно ) способ создания пары ключей)

Ответы [ 2 ]

168 голосов
/ 29 ноября 2010

Если вы не используете фразу-пароль, то закрытый ключ не шифруется никаким симметричным шифром - он выводится полностью незащищенным.

Вы можете сгенерировать пару ключей, указав пароль в командной строке, используя такой вызов (в данном случае пароль foobar):

openssl genrsa -aes128 -passout pass:foobar 3072

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

Лучшая альтернатива - записать фразу-пароль во временный файл, защищенный правами доступа к файлу, и указать следующее:

openssl genrsa -aes128 -passout file:passphrase.txt 3072

Или введите пароль на стандартный ввод:

openssl genrsa -aes128 -passout stdin 3072

Вы также можете использовать именованный канал с параметром file: или дескриптор файла.


Чтобы затем получить соответствующий открытый ключ, вам нужно использовать openssl rsa, предоставляя ту же фразу-пароль с параметром -passin, которая использовалась для шифрования закрытого ключа:

openssl rsa -passin file:passphrase.txt -pubout

(Это предполагает зашифрованный закрытый ключ при стандартном вводе - вместо этого вы можете прочитать его из файла, используя -in <file>).


Пример создания 3072-битной пары секретного и открытого ключа в файлах с парой секретного ключа, зашифрованной паролем foobar:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
4 голосов
/ 15 августа 2018

genrsa был заменен на genpkey, и при запуске вручную в терминале он запрашивает пароль:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

Однако при запуске из скрипта командане будет запрашивать пароль, чтобы избежать его просмотра в процессе, используйте функцию в shell сценарии:

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...