Création non interactive de demandes de certificats SSL

15

Existe-t-il un moyen de créer des demandes de certificat SSL en spécifiant tous les paramètres requis sur la commande initiale? J'écris un panneau de configuration de serveur Web basé sur CLI et je voudrais éviter l'utilisation de expect lors de l'exécution opensslsi possible.

C'est une manière typique de créer une demande de certificat:

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

J'espère voir quelque chose comme ça: (exemple sans travail)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress [email protected] \
-Company FooBar

La belle page de manuel n'avait rien à dire à ce sujet, et je n'ai rien trouvé via Google. La génération de demande de certificat SSL doit-elle être un processus interactif ou existe-t-il un moyen de spécifier tous les paramètres dans une seule commande?

C'est sur une distribution Linux dérivée de Debian en cours d'exécution openssl 1.0.1.

dotancohen
la source
@ceejayoz: Très bien, merci. א) Où ces openssldrapeaux sont-ils documentés? ב) Pourquoi avez-vous recherché cela sur Google? Je vous remercie!
dotancohen
1
J'ai googlé "CSR générer un script". Le -subjparamètre est documenté (peu en détail) sur openssl.org/docs/apps/req.html .
ceejayoz
Il est également possible de créer un fichier de configuration, généralement appelé openssl.cnf.
sebix

Réponses:

16

il vous manque deux parties:

la ligne d'objet, qui peut être appelée

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • remplacer ... par value, X=étant le code X509 ( O rganisation / O rganisation U nit / etc ...)

la valeur du mot de passe, qui peut être appelée comme

-passout pass:client11
-passin  pass:client11
  • qui donne un mot de passe de sortie / entrée

mon appel pour une nouvelle clé ressemble

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(maintenant que je le vois, il y en a deux -new...)

Archemar
la source
2

Vérifiez l' -batchoption comme décrit dans les documents officiels .

éjecter
la source
2
Je vous remercie. Je vois que l'option batch existe, mais il ne semble pas y avoir d'explication sur la façon de l'utiliser.
dotancohen
Pourquoi cette réponse a-t-elle été rejetée? Le lot n'est-il pas une solution possible au problème? D'après le nom, il semble que ce pourrait être le cas.
dotancohen
C'est certainement la seule façon de le faire avec l'option -batch, pourquoi downvoted je n'en ai aucune idée. La déclaration "La belle page de manuel n'avait rien à dire à ce sujet" est fausse, en raison de l'option "-batch".
éjecter
Voté pour mentionner le lot, car même si je ne l'ai pas utilisé dans la solution, il pourrait être utile à l'avenir.
dotancohen
-1

J'ajoute à ma commande openssl habituelle:

openssl req -x509 -nodes -days 7300 -newkey rsa: 2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

Cette ligne:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

La description:

  • Nom du pays (code à 2 lettres) [AU]: PE
  • Nom de l'État ou de la province (nom complet) [Quel État]: Lima
  • Nom de la localité (par exemple, ville) []: Lima
  • Nom de l'organisation (par exemple, société) [Internet Widgits Pty Ltd]: Acme Inc.
  • Nom de l'unité organisationnelle (par exemple, section) []: Département informatique
  • Nom commun (par exemple, nom de domaine complet du serveur ou VOTRE nom) []: acme.com

Utilisez "/" comme séparateur.

JorgeM
la source
1
Il semble que la réponse acceptée contienne déjà ces informations. Sinon, merci.
dotancohen