Подтвердить что ты не робот

Как сгенерировать ключ openSSL с использованием ключевой фразы из командной строки?

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

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


Я, наконец, начал работать с этими командами, используя exec(), который, как считается, небезопасен для использования, лучше передать PassPhrase в файл. Я могу принять этот риск, так как я уверен, что PHP будет выполняться только на моем ПК (который запускает окна и не имеет команды 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 (что является правильным способом генерации пары ключей)

4b9b3361

Ответ 1

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

Вы можете создать пару ключей, поставляя пароль в командной строке, используя подобный вызов (в этом случае пароль 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