Créer un certificat SSL de manière non interactive [fermé]

28

Je souhaite créer silencieusement, de manière non interactive, un certificat SSL. C'est-à-dire, sans être invité à fournir des données.

La façon normale de créer le certificat serait:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

J'ai essayé ce qui suit:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Mais je reçois toujours une invite de données.

TheNiceGuy
la source
1
Pouvez-vous fournir une explication ou une sortie de ce qui se passe au lieu du résultat souhaité?
Patrick
Je reçois l'aide en tant que sortie - Tout va mal avec les paramètres ici:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
Il est préférable de fournir la sortie des erreurs lorsque vous rencontrez des problèmes. Je suppose que votre problème est dû à -signkey. Ce n'est pas une openssl reqoption valide sur mon système. Le message d'erreur aura ceci comme toute première ligne:unknown option -signkey
Patrick
Eh bien, cette clé doit indiquer à SSL d'utiliser la clé fournie comme je le sais?
TheNiceGuy
Votre «façon normale de créer le certificat» ne demande aucune donnée. Ne voulez-vous pas qu'il émette quoi que ce soit? Ensuite, utilisez 2> /dev/null.
wingedsubmariner

Réponses:

51

La chose qui vous manque est d'inclure le sujet du certificat dans le -subjdrapeau. Je préfère cela à la création d'un fichier de configuration car il est plus facile à intégrer dans un flux de travail et ne nécessite pas de nettoyage par la suite.

Génération de clés et de CSR en une seule étape:

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

Génération de certificat sans mot de passe auto-signée en une étape:

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

Aucune de ces commandes ne demandera de données.

Voir ma réponse à cette question presque identique sur Super User.

bahamat
la source
Eh bien, c'est une bonne solution. Rend les codes beaucoup plus petits. Merci: D
TheNiceGuy
1
Je n'ai pas modifié son fichier de configuration d'origine, car je pensais que cela pourrait remplacer un certificat plus compliqué. Certaines configurations qui ne peuvent pas être représentées avec un -subjparamètre, en particulier lorsque vous accédez aux extensions v3 et aux paramètres subjectAltName.
robbat2
1
Vous pouvez également utiliser -batch(mode non interactif)
Eran H.
Notez que la première commande semble exiger que la clé existe avant de pouvoir être exécutée là où la deuxième commande crée automatiquement la clé et le certificat car il -subjs'agit d'un CSR en ligne valide de base.
dragon788
@ dragon788 Merci de l'avoir signalé. Je l'ai corrigé.
bahamat
1

La commande que vous recherchez est:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Changements par rapport à votre version:

  • -new est nécessaire pour générer quoi que ce soit
  • -key utilisé à la place de -signkey
robbat2
la source