Primeiro - o que acontece se eu não fornecer uma senha longa? É usado algum tipo de frase pseudoaleatória? Estou apenas procurando algo "bom o suficiente" para manter os hackers casuais afastados.
Segundo - como faço para gerar um par de chaves da linha de comando, fornecendo a frase secreta na linha de comando?
Eu finalmente consegui fazer funcionar usando esses comandos, usando exec () que geralmente é considerado não seguro para usar, sendo melhor fornecer a senha em um arquivo. Posso aceitar o risco, pois tenho certeza de que o PHP só será executado no meu PC (que roda o Windows e não tem um comando PS).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Muito obrigado a @caf, sem o qual isso não teria sido possível.
Apenas um arrependimento - que, não importa o quanto eu pesquise no Google, ninguém consegue openssl_pkey_new()
trabalhar com o Xampp no Windows (que é a maneira correta de gerar um par de chaves)
openssl_pkey_new()
... a maneira "adequada" de gerar um par de chaves?ps
mas desde o Vista temwmic process get commandline
Respostas:
Se você não usar uma frase secreta, a chave privada não será criptografada com nenhuma cifra simétrica - ela será gerada totalmente desprotegida.
Você pode gerar um par de chaves, fornecendo a senha na linha de comando usando uma invocação como (neste caso, a senha é
foobar
):No entanto, observe que essa frase secreta pode ser capturada por qualquer outro processo em execução na máquina no momento, uma vez que os argumentos da linha de comando geralmente são visíveis para todos os processos.
A melhor alternativa é escrever a frase secreta em um arquivo temporário protegido com permissões de arquivo e especificar:
Ou forneça a senha na entrada padrão:
Você também pode usar um canal nomeado com a
file:
opção ou um descritor de arquivo.Para obter a chave pública correspondente, você precisa usar
openssl rsa
, fornecendo a mesma senha longa com o-passin
parâmetro que foi usado para criptografar a chave privada:(Isso espera a chave privada criptografada na entrada padrão - você pode, em vez disso, lê-la de um arquivo usando
-in <file>
).Exemplo de criação de um par de chaves pública e privada de 3072 bits em arquivos, com o par de chaves privadas criptografado com senha
foobar
:fonte
openssl
comando está emitindo a chave pública correspondente à chave privada fornecida - as chaves públicas não são criptografadas (não são secretas), portanto,-passout
não faz sentido usar . Você provavelmente deseja usar-passin
lá, para fornecer a frase secreta que foi usada para criptografar a chave privada na primeira etapa. Também acrescentei algo à resposta.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
não faço isso. Você pode me dar dois comandos - um para gerar a chave privada em um arquivo e um segundo para gerar a chave pública (também em um arquivo)? Desculpe ser um incômodo, mas estou brincando com isso e simplesmente não consigo fazer funcionar :-(-out
parâmetro vier depois de2048
- realmente, essa é a última coisa na linha de comando (atualizei minha resposta como tal). Veja o último exemplo, acho que é isso que você quer. Quanto ao AES-128, alguém em quem confio nesses assuntos o recomenda em vez do AES-256.genrsa
foi substituído porgenpkey
& quando executado manualmente em um terminal, ele solicitará uma senha:No entanto, quando executado a partir de um script, o comando não pedirá uma senha, para evitar que a senha seja visualizada como um processo, use uma função em um
shell
script:fonte