Как сгенерировать ключ openSSL, используя фразу-пароль из командной строки?
Во-первых, что произойдет, если я не дам пароль? Используется ли какая-то псевдослучайная фраза? Я просто ищу что-то "достаточно хорошее", чтобы держать в страхе случайных хакеров.
Второе - как мне сгенерировать пару ключей из командной строки, поставив фразу-пароль в командной строке?
Я наконец-то начал работать, используя эти команды, используя 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 ответа
Если вы не используете фразу-пароль, то закрытый ключ не шифруется никаким симметричным шифром - он выводится полностью незащищенным.
Вы можете сгенерировать пару ключей, указав пароль в командной строке, используя такой вызов (в этом случае пароль 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
Параметр as использовался для шифрования закрытого ключа:
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
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
}