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:
Comment puis-je ignorer l'invite de phrase secrète? Serait-il raisonnablement prudent pour moi de le faire? (comme dans ce ne devrait pas être carrément idiot comme n'importe qui devrait pouvoir pirater le certificat)
Comment puis-je éviter de demander le nom du pays, l'organisation, etc. J'espère pouvoir leur donner l'invite de commande (la page de manuel n'indique que les options de niveau supérieur pour OpenSSL)
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.
Vous pouvez fournir toutes ces informations sur la ligne de commande.
Génération de certificat auto-signé sans mot de passe en une é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 openssl ont leur propre page de manuel. Voir man req
.
Répondant spécifiquement à vos questions et pour être plus explicite sur exactement quelles options sont en vigueur:
L'indicateur -nodes
indique de ne pas chiffrer la clé, vous n'avez donc pas besoin de mot de passe. Vous pouvez également utiliser l'indicateur -passout arg
. VoirPASS PHRASE ARGUMENTS
dans la page de manuel openssl(1)
pour savoir comment formater l'arg.
En utilisant le drapeau -subj
, vous pouvez spécifier le sujet (exemple ci-dessus).
L'option -passin
ne vous convient-elle pas?
Avec la forme file:pathname
, vous pouvez être assez sûr avec les autorisations 600 pour ce fichier.
La réponse acceptée nécessite quelques petites corrections. Lignes EC:
-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écrit ci-dessous
Pour lister les courbes elliptiques disponibles:
$ openssl ecparam -list_curves
Pour générer un fichier de clé:
$ openssl ecparam -name secp256k1 -out secp256k1.pem
Pour générer le certificat sans invite 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 voir le cert:
$ openssl x509 -noout -text -in server.crt
Essayez la commande suivante:
openssl genrsa -des3 -out user.key -passout pass:foo 1024
La partie qui saute est: -passout pass:foo
.
@bahamat a une excellente réponse. Malheureusement, certaines versions d’openssl génèrent une erreur lorsqu’on tente de créer un certificat ECDSA avec une seule commande. L'erreur va quelque chose comme:
routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404
J'utilisais openssl 1.0.1e-fips
sur 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