Premièrement, que se passe-t-il si je ne donne pas de phrase secrète? Est-ce qu'une sorte de phrase pseudo aléatoire est utilisée? Je cherche juste quelque chose de "suffisamment bon" pour éloigner les pirates occasionnels.
Deuxièmement - comment générer une paire de clés à partir de la ligne de commande, en fournissant la phrase de passe sur la ligne de commande?
Je l'ai finalement fait fonctionner en utilisant ces commandes, en utilisant exec () qu'il est généralement considéré comme non sûr à utiliser, étant préférable de donner la PassPhrase dans un fichier. Je peux accepter ce risque car je suis sûr que PHP ne sera jamais exécuté que sur mon PC (qui exécute Windows et n'a pas de 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 à quel point je Google, personne ne semble pouvoir openssl_pkey_new()
travailler avec Xampp sous Windows (ce qui est la bonne façon de générer une paire de clés)
openssl_pkey_new()
... la "bonne" façon de générer une paire de clés?ps
mais depuis Vista, il awmic process get commandline
Réponses:
Si vous n'utilisez pas de phrase de passe, la clé privée n'est chiffrée avec aucun chiffrement symétrique - elle est sortie complètement sans protection.
Vous pouvez générer une paire de clés, en fournissant le mot de passe sur la ligne de commande en utilisant un appel comme (dans ce cas, le mot de passe est
foobar
):Cependant, notez que cette phrase de passe peut être saisie par tout autre processus exécuté sur la machine à ce moment-là, car les arguments de ligne de commande sont généralement visibles par tous les processus.
Une meilleure alternative consiste à écrire la phrase secrète dans un fichier temporaire protégé par des autorisations de fichier et à spécifier que:
Ou fournissez la phrase de passe sur l'entrée standard:
Vous pouvez également utiliser un tube 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 le-passin
paramètre que celle utilisée pour chiffrer la clé privée:(Cela attend la clé privée chiffrée sur l'entrée standard - vous pouvez à la place la lire à partir d'un fichier en utilisant
-in <file>
).Exemple de création d'une paire de clés privée et publique de 3072 bits dans des fichiers, avec la paire de clés privées chiffrée avec un mot de passe
foobar
:la source
openssl
commande génère la clé publique correspondant à la clé privée fournie - les clés publiques ne sont pas chiffrées (elles ne sont pas secrètes), donc l'utilisation-passout
n'a aucun sens. Vous souhaitez probablement l'utiliser-passin
pour fournir la phrase de passe qui a été utilisée pour crypter la clé privée lors de la première étape. J'ai également ajouté quelque chose à la réponse.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
je ne le fais pas. Pouvez-vous s'il vous plaît me donner deux commandes - une pour générer la clé privée dans un fichier et une seconde pour générer la clé publique (également dans un fichier)? Désolé d'être une telle nuisance, mais j'ai joué avec et je ne peux tout simplement pas le faire fonctionner :-(-out
paramètre vient après le2048
- vraiment, c'est censé être la dernière chose sur la ligne de commande (j'ai mis à jour ma réponse en tant que telle). Voir le dernier exemple, je pense que c'est ce que vous voulez. Quant à AES-128, quelqu'un en qui j'ai confiance dans ces domaines le recommande plutôt qu'à AES-256.genrsa
a été remplacé pargenpkey
& lorsqu'il est exécuté manuellement dans un terminal, il vous demandera un mot de passe:Cependant, lorsqu'elle est exécutée à partir d'un script, la commande ne demandera pas de mot de passe, donc pour éviter que le mot de passe ne soit visible en tant que processus, utilisez une fonction dans un
shell
script:la source