Primero, ¿qué pasa si no doy una contraseña? ¿Se utiliza algún tipo de frase pseudoaleatoria? Solo estoy buscando algo "lo suficientemente bueno" para mantener a raya a los piratas informáticos ocasionales.
En segundo lugar, ¿cómo genero un par de claves desde la línea de comando, proporcionando la frase de contraseña en la línea de comando?
Finalmente lo hice funcionar usando estos comandos, usando exec () que generalmente se considera que no es seguro de usar, siendo mejor dar la PassPhrase en un archivo. Puedo aceptar este riesgo porque estoy seguro de que PHP solo se ejecutará en mi PC (que ejecuta Windows y no tiene un comando PS).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Muchas, muchas gracias a @caf, sin el cual esto no hubiera sido posible.
Solo un lamento: no importa cuánto openssl_pkey_new()
busque en Google, parece que nadie puede empezar a trabajar con Xampp en Windows (que es la forma correcta de generar un par de claves)
openssl_pkey_new()
... la forma "adecuada" de generar un par de claves?ps
pero desde Vista sí lo tienewmic process get commandline
Respuestas:
Si no usa una frase de contraseña, entonces la clave privada no está encriptada con ningún cifrado simétrico, se genera completamente desprotegida.
Puede generar un par de claves, proporcionando la contraseña en la línea de comandos utilizando una invocación como (en este caso, la contraseña es
foobar
):Sin embargo, tenga en cuenta que esta frase de contraseña podría ser capturada por cualquier otro proceso que se esté ejecutando en la máquina en ese momento, ya que los argumentos de la línea de comandos generalmente son visibles para todos los procesos.
Una mejor alternativa es escribir la frase de contraseña en un archivo temporal que esté protegido con permisos de archivo y especificar que:
O proporcione la frase de contraseña en la entrada estándar:
También puede utilizar una canalización con nombre con la
file:
opción o un descriptor de archivo.Para luego obtener la clave pública coincidente, debe usar
openssl rsa
, proporcionando la misma frase de contraseña con el-passin
parámetro que se usó para cifrar la clave privada:(Esto espera la clave privada cifrada en la entrada estándar; en su lugar, puede leerla desde un archivo usando
-in <file>
).Ejemplo de creación de un par de claves pública y privada de 3072 bits en archivos, con el par de claves privadas cifradas con contraseña
foobar
:fuente
openssl
comando genera la clave pública correspondiente a la clave privada proporcionada; las claves públicas no están encriptadas (no son secretas), por lo que su uso-passout
no tiene sentido. Probablemente desee utilizar-passin
allí para proporcionar la frase de contraseña que se utilizó para cifrar la clave privada en el primer paso. También agregué algo a la respuesta.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
no lo hago. ¿Puede darme dos comandos: uno para generar la clave privada en un archivo y un segundo para generar la clave pública (también en un archivo)? Lamento ser una molestia, pero he estado jugando con eso y no puedo hacer que funcione :-(-out
parámetro viene después de2048
, en realidad, se supone que eso es lo último en la línea de comando (he actualizado mi respuesta como tal). Mira el último ejemplo, creo que eso es lo que quieres. En cuanto a AES-128, alguien en quien confío en estos asuntos lo recomienda sobre AES-256.genrsa
ha sido reemplazado porgenpkey
& cuando se ejecuta manualmente en un terminal, solicitará una contraseña:Sin embargo, cuando se ejecuta desde un script, el comando no pedirá una contraseña, por lo que para evitar que la contraseña sea visible como un proceso, utilice una función en un
shell
script:fuente