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 [it@mycompany.com]:

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:'it@mycompany.com'
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.

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

19

essayer - drapeau de lot

./build-key --batch client1

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.


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      "vpn@example.com"
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

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


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 

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

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"

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

-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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.