118 votes

Comment générer une clé avec une phrase secrète à partir de la ligne de commande?

D'abord - ce qui se passe si je ne donne pas un mot de passe? Est une sorte de pseudo-aléatoires expression utilisée? Je suis juste à la recherche de quelque chose d'assez "bon" pour les garder décontracté, les pirates à distance.

Deuxième - comment puis-je générer une paire de clés forme la ligne de commande, la fourniture de la phrase de passe sur la ligne de commande?


J'ai finalement obtenu de travail à l'aide de ces commandes, en utilisant exec (), qui est généralement reconnu comme dangereux à utiliser, mieux de donner le mot de passe dans un fichier. Je peux accepter ce risque, comme je suis sûr que le PHP ne jamais être exécuté sur mon PC (qui fonctionne sous windows et ne dispose pas d'une commande PS).

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

Un grand merci à @caf, sans qui cela n'aurait pas été possible.

Un seul regret - que, peu importe combien j'ai de Google, personne ne peut le sembler obtenir openssl_pkey_new() de travail avec Xampp sous Windows (qui est la bonne façon de générer une paire de clés)

235voto

caf Points 114951

Si vous n'utilisez pas un mot de passe, puis de la clé privée n'est pas chiffré avec n'importe quel algorithme symétrique - elle est sortie complètement protégé.

Vous pouvez générer une paire de clés, en fournissant le mot de passe sur la ligne de commande à l'aide d'une invocation comme (dans ce cas, le mot de passe est - foobar):

openssl genrsa -aes128 -passout pass:foobar 2048

Toutefois, notez que ce mot de passe peut être saisi par tout autre processus en cours d'exécution sur la machine à l'époque, puisque les arguments de ligne de commande sont généralement visibles à tous les processus.

Une meilleure alternative est d'écrire le mot de passe dans un fichier temporaire qui est protégé avec les autorisations de fichier et de préciser que:

openssl genrsa -aes128 -passout file:passphrase.txt 2048

Ou de la fourniture de la phrase de passe sur l'entrée standard:

openssl genrsa -aes128 -passout stdin 2048

Vous pouvez aussi utiliser un pipe nommé avec l' file: option, ou un descripteur de fichier.


Pour ensuite obtenir la clé publique correspondante, vous devez utiliser openssl rsa, en fournissant la même phrase de passe avec l' -passin paramètre a été utilisé pour chiffrer la clé privée:

openssl rsa -passin file:passphrase.txt -pubout

(Il attend de la clé privée chiffré sur l'entrée standard - vous pouvez au lieu de lire à partir d'un fichier à l'aide d' -in <file>).


Exemple de création d'une définition de 2 048 bits privée et la clé publique de la paire dans des fichiers, avec la clé privée de la paire crypté avec un mot de passe foobar:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X