2010-11-28 1 views
71

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

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


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

+1

почему `openssl_pkey_new()` ... " правильный "способ создания пары ключей? – 2014-05-18 00:39:24

ответ

127

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

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

+1 Отлично, это работает!Спасибо, если вы можете просто помочь подростку немного больше, тогда вы получите ответ ... почему это не будет работать? openssl rsa -in privkey.pem -pubout -passout pass: foobar -out pubkey.pem – Mawg 2010-11-29 07:17:25