web-dev-qa-db-fra.com

Comment générer une clé openSSL à l'aide d'une phrase secrète depuis la ligne de commande?

Premièrement, que se passe-t-il si je ne donne pas de phrase secrète? Une sorte de phrase pseudo-aléatoire est-elle utilisée? Je cherche juste quelque chose de "assez bon" pour garder les hackers occasionnels aux abois.

Deuxièmement, comment générer une paire de clés à partir de la ligne de commande, en fournissant la phrase secrète sur la ligne de commande?


Je l’ai finalement obtenu en utilisant ces commandes, en utilisant exec (), qu’il est généralement jugé dangereux d’utiliser, car il est préférable de donner le mot de passe Passhrase dans un fichier. Je peux accepter ce risque car je suis sûr que PHP ne sera 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

Merci beaucoup à @caf, sans qui cela n'aurait pas été possible.

Un seul regret - que peu importe le nombre de Google, personne ne semble pouvoir utiliser openssl_pkey_new() avec Xampp sous Windows (méthode utilisée par propre pour générer une paire de clés).

88
Mawg

Si vous n'utilisez pas de phrase secrète, la clé privée n'est chiffrée avec aucun chiffrement symétrique - la sortie est complètement non protégée.

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

openssl genrsa -aes128 -passout pass:foobar 3072

Toutefois, notez que cette phrase secrète peut être saisie par tout autre processus en cours d'exécution 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, en précisant ce qui suit:

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

Ou fournissez le mot de passe sur l'entrée standard:

openssl genrsa -aes128 -passout stdin 3072

Vous pouvez également utiliser un tube nommé avec le file: option ou un descripteur de fichier.


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

openssl rsa -passin file:passphrase.txt -pubout

(Ceci attend la clé privée chiffrée sur l'entrée standard. Vous pouvez plutôt la lire à partir d'un fichier en utilisant -in <file>).


Exemple de création d'une paire de clés publique et privée de 3 072 bits dans des fichiers, la paire de clés privée étant cryptée avec le mot de passe foobar:

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

genrsa a été remplacé par genpkey & Lorsqu'il est exécuté manuellement dans un terminal, un mot de passe est demandé:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

Toutefois, lorsqu'elle est exécutée à partir d'un script, la commande ne demande pas de mot de passe. Par conséquent, pour éviter que le mot de passe ne soit visible, un processus utilise une fonction dans un script Shell:

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
5
Stuart Cardall