102 votes

Évitez les demandes de mot de passe pour les clés et les demandes d'informations sur les DN.

J'utilise le code suivant pour générer des clés :

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

J'ai deux questions :

  1. Comment puis-je ignorer la demande de phrase de passe ? Serait-il raisonnablement sûr pour moi de le faire ? (en d'autres termes, il ne faut pas que ce soit complètement insensé, comme si n'importe qui était capable de pirater le certificat).

  2. Comment éviter que l'on me demande le nom du pays, de l'organisation, etc. J'espère pouvoir les donner à l'invite de commande (la page de manuel ne montre que les options de haut niveau pour OpenSSL).

172voto

bahamat Points 5456

Edit : C'est de loin ma réponse la plus populaire, et cela fait quelques années maintenant que j'ai ajouté une variante ECDSA. Si vous pouvez utiliser ECDSA, vous devriez le faire.


Vous pouvez fournir toutes ces informations sur la ligne de commande.

Génération de certificats sans mot de passe auto-signé en une seule étape :

Version RSA

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Version ECDSA

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Toutes les sous-commandes d'openssl ont leur propre page de manuel. Voir man req .


Répondre spécifiquement à vos questions et être plus explicite sur les options en vigueur :

  1. El -nodes signale qu'il n'y a pas de cryptage de la clé et que vous n'avez donc pas besoin de mot de passe. Vous pouvez également utiliser l'option -passout arg drapeau. Voir PASS PHRASE ARGUMENTS dans le openssl(1) pour savoir comment formater l'arg.

  2. Utilisation de la -subj vous pouvez spécifier le sujet (l'exemple est ci-dessus).

3 votes

La lecture des données via "-subj" fonctionne très bien, mais - pour moi - uniquement lorsque OPENSSL_CONF n'est PAS défini. C'est-à-dire que si OPENSSL_CONF est défini, OpenSSL essaiera de lire à partir de là, et ignorer "-subj" argument de ligne de commande. Ça m'a pris un moment pour le comprendre.

0 votes

Oberstet : Oui, c'est vrai.

0 votes

Est-il possible de passer le sujet clé à partir de stdin ? J'ai essayé "-key stdin", "-key fd:1" et "-key -" sans succès.

12voto

9000 Points 415

Non. -passin option fait l'affaire pour vous ?

Avec file:pathname vous pouvez être tout à fait sûr avec les permissions 600 pour ce fichier.

0 votes

J'ai vu l'option dans la page de manuel. On dirait que je peux avoir la phrase de passe de cette façon sans demande. Merci.

0 votes

Et avec -passin 'pass:YOUR_PASSWORD' ? - doc : openssl.org/docs/man1.0.2/apps/

7voto

Nisanio Points 1030

La réponse acceptée nécessite quelques petites corrections. Lignes CE :

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

devrait être :

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

Sur MacOS - OpenSSL 1.0.2f installé via brew j'ai vérifié la réponse acceptée comme décrite ci-dessous

  • Pour lister les courbes elliptiques disponibles :

    $ openssl ecparam -list_curves
  • Pour générer un fichier clé :

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
  • Pour générer le cert sans demande de mot de passe :

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
  • Pour consulter le certificat :

    $ openssl x509 -noout -text -in server.crt

0 votes

En quoi cela diffère-t-il de la réponse acceptée ?

1 votes

La seule différence importante est que je liste explicitement l'étape de génération du fichier pem. La réponse acceptée ne contient pas les deux caractères \ et cela m'a fait penser que la commande est incorrecte.

1 votes

Vous pourriez vouloir mentionner ce fait. Si la réponse acceptée est effectivement incomplète, et qu'il manque des caractères, il est important de souligner les différences et la façon dont votre réponse contient des informations importantes et significatives.

4voto

kenorb Points 22006

Essayez la commande suivante :

openssl genrsa -des3 -out user.key -passout pass:foo 1024

La partie à sauter est : -passout pass:foo .

0 votes

Qu'est-ce que foo ?

0 votes

@ChamindaBandara foo Voici un exemple de mot de passe pour la démonstration

2voto

jxmallett Points 121

@bahamat a une excellente réponse. Malheureusement, certaines versions d'openssl génèrent une erreur lorsqu'on essaie de créer un certificat ECDSA avec une seule commande. L'erreur ressemble à quelque chose comme :

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

J'utilisais openssl 1.0.1e-fips en CentOS 7 .

La création de votre certificat avec les 3 commandes suivantes semble fonctionner :

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

0 votes

La dernière ligne ne devrait-elle pas se terminer par server.crt ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X