Automatisation des clés de construction OpenVPN easy-rsa?

18

J'ai beaucoup de clés à générer pour le serveur VPN de mes clients. Chaque fois que j'utilise easy-rsa pour générer les clés comme ceci:

./build-key client1

Il y a une sortie avec une série de questions. Les questions ont toutes des réponses par défaut qui sont définies dans le varsfichier.

Generating a 1024 bit RSA private key
............................................++++++
.......................++++++
writing new private key to 'client1.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) [US]:
State or Province Name (full name) [CO]:
Locality Name (eg, city) [Denver]:
Organization Name (eg, company) [mycompany]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CO'
localityName          :PRINTABLE:'Denver'
organizationName      :PRINTABLE:'mycompany'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Jan  3 20:16:04 2038 GMT (9999 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Dans l'ensemble, je dois appuyer manuellement sur les touches suivantes:

ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
y
ENTER
y
ENTER

En gros, j'accepte simplement toutes les réponses par défaut et je dis «oui» aux deux dernières questions. Y at - il -forceou des -quietdrapeaux ou quelque chose que je peux utiliser build-key? Sinon, y a-t-il des scripts ou des astuces bash que je peux utiliser pour faire cela à chaque fois? Je ne trouve rien dans les pages de manuel à ce sujet.

Jake Wilson
la source

Réponses:

14

Si vous regardez la source de build-key, vous constaterez qu'il appelle pkitool. J'ai écrit un wrapper pour regrouper les clés du cilent et les fichiers de configuration openvpn appropriés dans une archive que je pourrais ensuite donner à mes utilisateurs:

#!/bin/bash

client=$1

if [ x$client = x ]; then
    echo "Usage: $0 clientname"
    exit 1
fi

if [ ! -e keys/$client.key ]; then
    echo "Generating keys..."
    . vars
    ./pkitool $client
    echo "...keys generated." 
fi

tarball=./keys/$client.tgz

if [ ! -e $tarball ]; then
    echo "Creating tarball..."
    tmpdir=/tmp/client-tar.$$
    mkdir $tmpdir
    cp company.ovpn $tmpdir/company.ovpn
    cp keys/ca.crt $tmpdir 
    cp keys/$client.key $tmpdir/client.key
    cp keys/$client.crt $tmpdir/client.crt
    tar -C $tmpdir -czvf $tarball .
    rm -rf $tmpdir
    echo "...tarball created" 
else
    echo "Nothing to do, so nothing done. (keys/$client.tgz already exists)" 
fi
pjz
la source
19

essayer - drapeau de lot

./build-key --batch client1
Tomot
la source
J'ai essayé, mais le nom commun était l'adresse du serveur, pas le nom de ceux que je voulais générer, tout comme le comportement sans l'indicateur --batch
David Poxon
Pour moi, c'est la réponse à la question posée. Voici comment automatiser la production de clés pour la plupart des configurations standard et suggérer d'accepter cela comme réponse.
James Firth
2

La chose qui me vient à l'esprit le plus rapidement est expect; il vous permet d'automatiser ce type d'interactions en ligne de commande.

Christian Paredes
la source
3
attendre est beaucoup trop pour cela; easy-rsa est tous les scripts shell, donc facilement piratables.
pjz
2

La nouvelle version d' EasyRSA est disponible en tant que binaire unique en ce moment. Pour automatiser la construction d'une clé client, vous pouvez maintenant utiliser le fichier "vars" (il suffit de le placer dans le même répertoire que le binaire easyrsa):

if [ -z "$EASYRSA_CALLER" ]; then
    echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
    echo "This is no longer necessary and is disallowed. See the section called" >&2
    echo "'How to use this file' near the top comments for more details." >&2
    return 1
fi

set_var EASYRSA        "$PWD"
set_var EASYRSA_OPENSSL        "openssl"
set_var EASYRSA_PKI            "$EASYRSA/pki"
set_var EASYRSA_DN     "org"

set_var EASYRSA_REQ_COUNTRY    "Country"
set_var EASYRSA_REQ_PROVINCE   "Province"
set_var EASYRSA_REQ_CITY       "City"
set_var EASYRSA_REQ_ORG        "Org Ltd"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "Infrastructure"

set_var EASYRSA_KEY_SIZE       2048

set_var EASYRSA_ALGO           rsa

set_var EASYRSA_CA_EXPIRE      3650
set_var EASYRSA_CERT_EXPIRE    365
set_var EASYRSA_CRL_DAYS       180

set_var EASYRSA_TEMP_FILE      "$EASYRSA_PKI/extensions.temp"

et utilisez le binaire d'EasyRSA:

./easyrsa build-client-full client1 nopass
user394252
la source
1

J'ai eu le même problème.

La solution que j'ai trouvée était:

echo -en "\ n \ n \ n \ n \ n \ n \ n \ ny \ ny \ n" | ./build-key client1

Cristiano Felipe
la source
Cela a fonctionné pour moi. Je l'aime le plus car il ne nécessite pas que l'utilisateur comprenne le script.
AFP_555
1

C'est similaire à ce que j'utilise. J'espère que cela aide quelqu'un, il m'a fallu des heures pour comprendre cela. Assurez-vous que vous exécutez dans le répertoire easy-rsa, et n'oubliez pas de source ./vars

(echo -en "\n\n\n\n\n\n\n\n"; sleep 1; echo -en "\n"; sleep 1; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n") | ./build-key $key_id 
Kevin Knowlen
la source
0

J'ai fait un wrapper comme pjz, mais en regroupant tous les fichiers nécessaires dans un seul fichier .ovpn, qui peut être utilisé directement

#! / bin / bash
cd /etc/openvpn/easy-rsa/2.0
client = 1 $

si [x $ client = x]; ensuite
    echo "Utilisation: $ 0 clientname"
    sortie 1
Fi

si [ ! -e clés / $ client.key]; ensuite
    echo "Génération de clés ..."
    . vars
    ./pkitool $ client
    echo "... clés générées."
Fi

bundle =. / keys / $ client.ovpn

si [ ! -e $ bundle]; ensuite
    echo "Création d'un bundle ..."
    cat keys / template.ovpn >> $ bundle
    echo '' >> $ bundle
    clés de chat / ca.crt >> $ bundle
    echo '' >> $ bundle
    echo '' >> $ bundle
    echo '' >> $ bundle
    awk '/ BEGIN CERTIFICATE /, 0' keys / $ client.crt >> $ bundle
    echo '' >> $ bundle
    echo '' >> $ bundle
    echo '' >> $ bundle
    clés de chat / $ client.key >> $ bundle
    echo '' >> $ bundle
    echo '' >> $ bundle
    echo "... bundle créé"
autre
    echo "Rien à faire, donc rien à faire. (keys / $ client.ovpn existe déjà)"
Fi
rattkin
la source
0

Je viens d'essayer de faire la même chose, en générant les utilisateurs openvpn en silence sur la boîte freeBSD.

Cela a abouti à un nouveau fichier, bien nommé ./build-key-quiet

#!/bin/sh

# Make a certificate/private key pair using a locally generated
# root certificate.
# JP - automating my time away

cd /root/openvpn

client=$1

if [ x$client = x ];
    then
    echo "Usage: $0 clientname"
    exit 1
fi

if [ ! -e keys/$client.key ];
  then
    echo "Generating keys..."
    . ./vars
    ./pkitool $client
    echo "Great Success ...keys generated."
fi

echo 'Generating ovpn Files'
cd /root/clients
./make-client-config.sh $client
rm -rf /tmp/*.ovpn
cp /root/clients/files/$client.ovpn /tmp/
chmod 777 /root/clients/files/*.ovpn

echo "cleaning up /tmp/ of old ovpn files..."
echo "OVPN file generated and copied into /tmp/$client.ovpn"
Jaroslav Pantsjoha
la source
0
(echo -en "\n\n\n\n\n\n\n\n"; sleep 1; echo -en "\n"; sleep 1; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n") | ./build-key $key_id
Sitesh Behera
la source
-2

il suffit de modifier le fichier de clé de construction et de supprimer la --interactméthode la plus simple d'option que je connaisse

Allan Swanepoel
la source