การสร้างคีย์อัตโนมัติ OpenVPN easy-rsa?


18

ฉันมีกุญแจมากมายที่จะสร้างให้กับเซิร์ฟเวอร์ VPN สำหรับลูกค้าของฉัน เมื่อใดก็ตามที่ฉันใช้ easy-rsa เพื่อสร้างคีย์เช่นนี้:

./build-key client1

มีเอาต์พุตบางส่วนพร้อมชุดคำถาม คำถามทั้งหมดมีคำตอบเริ่มต้นที่กำหนดไว้ในvarsไฟล์

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

โดยสรุปฉันต้องกดปุ่มต่อไปนี้ด้วยตนเอง:

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

โดยทั่วไปฉันแค่ยอมรับคำตอบเริ่มต้นทั้งหมดและพูดว่า 'ใช่' สำหรับคำถามสองข้อสุดท้าย มี-forceหรือ-quietธงหรือสิ่งที่ฉันสามารถใช้กับbuild-key? ถ้าไม่มีมีสคริปติงสคริปต์หรือทุบตีที่ฉันสามารถใช้เพื่อทำสิ่งนี้ทุกครั้งหรือไม่? ฉันไม่พบสิ่งใดในหน้าคนใดเกี่ยวกับเรื่องนี้

คำตอบ:


14

ถ้าคุณดูที่แหล่งที่มาของคุณจะพบว่ามันโทรbuild-key pkitoolฉันเขียน wrapper เพื่อรวมกุญแจของ cilent และไฟล์กำหนดค่า openvpn ที่เหมาะสมลงใน tarball ที่ฉันสามารถมอบให้กับผู้ใช้ของฉัน:

#!/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

ลอง-ธงชุด

./build-key --batch client1

ฉันลองสิ่งนี้ แต่ชื่อสามัญคือที่อยู่เซิร์ฟเวอร์ไม่ใช่ชื่อของพวกเขาที่ฉันต้องการสร้างเช่นเดียวกับพฤติกรรมที่ไม่มีแฟล็ก --batch
David Poxon

สำหรับฉันนี่คือคำตอบสำหรับคำถามที่ถูกวาง นี่คือวิธีการผลิตกุญแจโดยอัตโนมัติสำหรับการกำหนดค่ามาตรฐานส่วนใหญ่และแนะนำให้ยอมรับสิ่งนี้เป็นคำตอบ
James Firth

2

สิ่งที่อยู่ในใจของฉันที่เร็วที่สุดคือexpect; มันช่วยให้คุณทำการโต้ตอบบรรทัดคำสั่งเหล่านี้ได้โดยอัตโนมัติ


3
คาดหวังเป็นวิธี overkill สำหรับเรื่องนี้; easy-rsa เป็นเชลล์สคริปต์ทั้งหมดดังนั้นจึงสามารถแฮ็กได้
pjz

2

เวอร์ชั่นใหม่ของEasyRSAมาเป็นไบนารีเดียวในตอนนี้ เพื่อสร้างคีย์ลูกค้าโดยอัตโนมัติตอนนี้คุณสามารถใช้ไฟล์ "vars" (เพียงวางไว้ในไดเรกทอรีเดียวกันกับไบนารี 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"

และใช้ไบนารีของ EasyRSA:

./easyrsa build-client-full client1 nopass

1

ผมมีปัญหาเดียวกัน.

วิธีแก้ปัญหาที่ฉันพบคือ:

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


สิ่งนี้ใช้ได้สำหรับฉัน ฉันชอบมากที่สุดเพราะไม่ต้องการให้ผู้ใช้เข้าใจสคริปต์
AFP_555

1

สิ่งนี้คล้ายกับที่ฉันใช้ หวังว่านี่จะช่วยใครซักคนใช้เวลาหลายชั่วโมงกว่าจะรู้ ตรวจสอบให้แน่ใจว่าคุณกำลังดำเนินการในไดเรกทอรี easy-rsa และอย่าลืมแหล่งที่มา. / 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

ฉันทำ wrapper เหมือน pjz แต่ด้วยการรวมไฟล์ที่จำเป็นทั้งหมดไว้ในไฟล์. vpn ไฟล์เดียวซึ่งสามารถใช้ได้โดยตรง

#! / bin / ทุบตี
cd /etc/openvpn/easy-rsa/2.0
ลูกค้า = $ 1

ถ้า [x $ client = x]; แล้วก็
    echo "การใช้งาน: $ 0 ชื่อลูกค้า"
    ทางออก 1
Fi

ถ้า [! -e keys / $ client.key]; แล้วก็
    echo "กำลังสร้างกุญแจ ... "
    . vars
    ./pkitool $ client
    echo "... สร้างกุญแจแล้ว"
Fi

กำ =. / กุญแจ / $ client.ovpn

ถ้า [! -e $ bundle]; แล้วก็
    echo "กำลังสร้างกลุ่ม ... "
    cat keys / template.ovpn >> $ bundle
    echo '' >> $ ชุดรวม
    cat keys / ca.crt >> $ bundle
    echo '' >> $ ชุดรวม
    echo '' >> $ ชุดรวม
    echo '' >> $ ชุดรวม
    awk '/ BEGIN CERTIFICATE /, 0' keys / $ client.crt >> $ bundle
    echo '' >> $ ชุดรวม
    echo '' >> $ ชุดรวม
    echo '' >> $ ชุดรวม
    กุญแจแมว / $ client.key >> $ มัด
    echo '' >> $ ชุดรวม
    echo '' >> $ ชุดรวม
    echo "... สร้างชุดข้อมูลแล้ว"
อื่น
    echo "ไม่ต้องทำอะไรเลยไม่มีสิ่งใดทำ (คีย์ / $ client.ovpn มีอยู่แล้ว)"
Fi

0

ฉันเพิ่งลองทำสิ่งเดียวกันนี้มากสร้างผู้ใช้ openvpn เงียบ ๆ บนกล่อง FreeBSD

สิ่งนี้ส่งผลให้ไฟล์ใหม่ชื่อ aptly ./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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.