Во-первых, что произойдет, если я не дам пароль? Используется ли какая-то псевдослучайная фраза? Я просто ищу что-то «достаточно хорошее», чтобы держать в страхе случайных хакеров.
Во-вторых, как мне сгенерировать пару ключей из командной строки, указав кодовую фразу в командной строке?
Я наконец-то заставил его работать с помощью этих команд, используя 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, без которого это было бы невозможно.
Сожалею только об одном - что, сколько бы я ни гуглил, никто не может начать openssl_pkey_new()
работать с Xampp в Windows (что является правильным способом создания пары ключей)
openssl_pkey_new()
... "правильный" способ создания пары ключей?ps
но с Vista, она естьwmic process get commandline
Ответы:
Если вы не используете парольную фразу, то закрытый ключ не шифруется каким-либо симметричным шифром - он выводится полностью незащищенным.
Вы можете сгенерировать пару ключей, указав пароль в командной строке, используя такой вызов (в данном случае пароль
foobar
):Однако обратите внимание, что эта кодовая фраза может быть перехвачена любым другим процессом, запущенным на компьютере в то время, поскольку аргументы командной строки обычно видны всем процессам.
Лучшая альтернатива - записать кодовую фразу во временный файл, защищенный правами доступа к файлу, и указать, что:
Или введите кодовую фразу на стандартный ввод:
Вы также можете использовать именованный канал с
file:
опцией или дескриптор файла.Чтобы затем получить соответствующий открытый ключ, вам необходимо использовать
openssl rsa
, указав ту же парольную фразу с-passin
параметром, которая использовалась для шифрования закрытого ключа:(Это ожидает зашифрованный закрытый ключ на стандартном вводе - вместо этого вы можете прочитать его из файла, используя
-in <file>
).Пример создания 3072-битной пары закрытого и открытого ключей в файлах, при этом пара закрытых ключей зашифрована паролем
foobar
:источник
openssl
команда выводит открытый ключ, соответствующий предоставленному закрытому ключу - открытые ключи не зашифрованы (они не секретные), поэтому использование-passout
не имеет смысла. Вы, вероятно, захотите использовать-passin
там, чтобы указать кодовую фразу, которая использовалась для шифрования закрытого ключа на первом этапе. Я тоже кое-что добавил к ответу.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
этого не делаю. Не могли бы вы дать мне две команды - одну для генерации закрытого ключа в файл, а вторую - для генерации открытого ключа (также в файле)? Извините за такую неприятность, но я играл с этим и просто не могу заставить его работать :-(-out
параметр идет после2048
- на самом деле, это должно быть последнее, что в командной строке (я обновил свой ответ как таковой). Посмотрите последний пример, я думаю, вы этого и хотите. Что касается AES-128, кто-то , кому я доверяю в этих вопросах, рекомендует его вместо AES-256.genrsa
был заменен наgenpkey
& при запуске вручную в терминале он запросит пароль:Однако при запуске из сценария команда не запрашивает пароль, чтобы пароль не отображался в процессе, используйте функцию в
shell
сценарии:источник