Comment utiliser l'argument de mot de passe dans via la ligne de commande vers openssl pour le déchiffrement

52

Donc, ce n’est pas la pratique la plus sécurisée de passer un mot de passe via un argument en ligne de commande. Cela dit, la documentation pour openssl m'a confondu sur la façon de passer un argument de mot de passe à la commande openssl.

Voici ce que j'essaie de faire

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

Ceci demande ensuite la clé de passe pour le déchiffrement. J'ai cherché dans les documents openssl et les interwebs pour essayer de trouver la réponse si je voulais simplement donner le mot de passe à la commande sans essayer de renvoyer le mot de passe au fichier. J'ai essayé d'ajouter -pass:somepasswordet les -pass somepassworddeux avec et sans guillemets en vain.

J'ai finalement trouvé la réponse et vu que sur d'autres forums les gens avaient des questions similaires, alors j'ai pensé poster ma question et ma réponse ici pour la communauté.

note: j'utilise la version 0.9.8y de openssl

David Sulpy
la source

Réponses:

103

La documentation n'était pas très claire pour moi, mais il y avait la réponse, le défi était de ne pas voir un exemple.

Voici comment le faire:

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

Notez que la syntaxe de commande en ligne de commande est toujours -passsuivie d'un espace, puis du type de phrase secrète que vous indiquez, c'est- pass:à- dire pour la phrase secrète simple puis pour la phrase secrète après le signe deux-points sans espace.

De plus, la documentation indique que vous pouvez fournir d'autres sources de phrase secrète en procédant comme suit:

  • env:somevar obtenir le mot de passe d'une variable d'environnement
  • file:somepathname pour obtenir le mot de passe de la première ligne du fichier à l'emplacement pathname
  • fd:number pour obtenir le mot de passe à partir du numéro de descripteur de fichier.
  • stdin lire depuis l'entrée standard

Maintenant que j'ai écrit cette question et cette réponse, tout semble évident. Mais cela a certainement pris du temps à comprendre et j’avais vu que cela prenait du temps similaire, alors espérons que cela puisse réduire ce temps et répondre plus rapidement aux besoins des autres! :)

Avec OpenSSL 1.0.1e, le paramètre à utiliser est -passinou -passout. Donc, cet exemple serait:

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

David Sulpy
la source
Quelle est la différence entre utiliser passin et passout? - Ha! Juste regardé, stdin vs stdout bien sûr!
dtmland
Notez que la documentation pour les options de mot de passe s'appliquant à la plupart des openssl commandes (pas seulement enc) se trouve dans la page de manuel de openssl (1) également sur le Web, sous «OPTIONS». Mais je ne crois pas que votre dernier commentaire concerne -passin / out; D'autres openssl commandes, telles que rsa dsa ec pkey pkcs8 pkcs12 req cado les utilisent, mais dans toutes les versions que j'ai déjà vues, notamment 1.0.1e, construite directement à partir d' encutilisations sources en amont -passou -k -kfilecomme indiqué (sur la encpage de manuel).
dave_thompson_085
Que diriez-vous de la openssl dgstcommande? Comment entrez-vous la phrase secrète pour cela en ligne de commande?
frakman1
4
btw -passinest utilisé pour fournir un mot de passe pour le certificat d'entrée et -passoutcorrespond au nouveau certificat généré
drmad
6

J'ai utilisé -passinet -passoutdéfinir des mots de passe pour les deux fichiers dans l'exemple:

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

123et 321sont mot de passe

Mikhailo Karpenko
la source
5

Actuellement, Ubuntu 14.04 LTS est livré avec openssl 1.0.1f-1ubuntu2.16

Dans cette version, le paramètre à utiliser est -k

Exemple:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword
Javier
la source
1
dans votre exemple, -k est une option disponible pour la commande openssl 'enc' (try man enc), ce n'est pas une option générale. Si vous regardez, man opensslvous verrez sous le titre "Options de phrase de passe", quelles sont les options générales; pass:password, env:var, file:pathname, fd:numberOu stdin, tel que mentionné dans une réponse antérieure.
sibaz