Cómo usar el argumento de contraseña en la línea de comando para openssl para descifrar

55

Por lo tanto, no es la práctica más segura pasar una contraseña a través de un argumento de línea de comando. Dicho esto, la documentación para openssl me confundió sobre cómo pasar un argumento de contraseña al comando openssl.

Esto es lo que estoy tratando de hacer.

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

Esto luego solicita la clave de acceso para el descifrado. Busqué en los documentos de openssl y en las interwebs para tratar de encontrar la respuesta si simplemente quería dar la contraseña al comando sin intentar hacer eco de la contraseña en el archivo. Traté de agregar -pass:somepasswordy -pass somepasswordambas con y sin comillas en vano.

Finalmente descubrí la respuesta y vi en otros foros que la gente tenía preguntas similares, así que pensé en publicar mi pregunta y respuesta aquí para la comunidad.

nota: estoy usando openssl versión 0.9.8y

David Sulpy
fuente

Respuestas:

109

La documentación no era muy clara para mí, pero tenía la respuesta, el desafío era no poder ver un ejemplo.

Aquí se explica cómo hacerlo:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

Observe que la sintaxis del comando de la línea de comando siempre va -passseguida de un espacio y luego el tipo de frase de contraseña que está proporcionando, es decir, pass:para la frase de contraseña simple y luego la frase de contraseña real después de los dos puntos sin espacio.

Además, la documentación especifica que puede proporcionar otras fuentes de frase de contraseña haciendo lo siguiente:

  • env:somevar para obtener la contraseña de una variable de entorno
  • file:somepathname para obtener la contraseña de la primera línea del archivo en la ubicación pathname
  • fd:number para obtener la contraseña del número de descriptor de archivo.
  • stdin para leer desde la entrada estándar

Ahora que he escrito esta pregunta y respuesta, todo parece obvio. Pero ciertamente me llevó un tiempo darme cuenta y lo había visto llevar a otros un tiempo similar, ¡así que espero que esto pueda reducir ese tiempo y responder más rápido para los demás! :)

Con OpenSSL 1.0.1e, el parámetro a usar es -passino -passout. Entonces este ejemplo sería:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword

David Sulpy
fuente
¿Cuál es la diferencia entre usar passin o passout? - Ja! ¡Solo lo busqué, stdin vs stdout, por supuesto!
dtmland
Tenga en cuenta que la documentación para las opciones de contraseña que se aplican a la mayoría de los openssl comandos (no solo enc) se encuentra en la página de manual de openssl (1) también en la web en 'OPCIONES'. Pero no creo lo último sobre -passin / out; otros openssl comandos como los rsa dsa ec pkey pkcs8 pkcs12 req causan, pero en todas las versiones que he visto, incluida la 1.0.1e, construida directamente a partir de encusos de fuentes ascendentes -passo -k -kfilecomo se documenta (en la página de encmanual).
dave_thompson_085
¿Qué tal el openssl dgstcomando? ¿Cómo se ingresa la frase de contraseña para eso en la línea de comando?
frakman1
44
BTW -passinse utiliza para proporcionar una contraseña para el certificado de entrada, y -passoutes para el nuevo certificado generado
drmad
7

Solía -passiny -passoutestablecer contraseñas para ambos archivos, por ejemplo:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

donde 123y 321son contraseña

Mikhailo Karpenko
fuente
5

En este momento Ubuntu 14.04 LTS viene con openssl 1.0.1f-1ubuntu2.16

En esta versión, el parámetro a usar es -k

Ejemplo:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword
Javier
fuente
1
en su ejemplo, -k es una opción disponible para el comando openssl 'enc' (try man enc) no es una opción general. Si mira man openssl, verá debajo del encabezado 'Opciones de frase de paso', cuáles son las opciones generales; pass:password, env:var, file:pathname, fd:numberO stdin, como se menciona en una respuesta más temprana.
sibaz