Zjednodušení hromadné tvorby certifikátů pro OpenVPN TLS

Obrázek uživatele anydot

Na začátku byla tma…

Každého kdo už dělal krapet větší OpenVPN klient-server instalaci určitě nebavilo všechny potřebné soubory pro klienta pokaždé balit ručně. Jsem jedním z nich. Tak vznikl další bezejmenný skript.

I řekl Bůh: „Budiž světlo“

Jako většina těch, co v OpenVPN využívají TLS i já používám přiložených skriptů easyrsa – ve verzi 2. K nim mám ale napsaný obalový skript, který mi certifikát vygeneruje, udělá konfigurační soubor a celé to zabalí a hodí do výstupního adresáře. Tvoří i více uživatelů na jedno zavolaní a dokáže balíčky regenerovat – což se hodí při změně konfiguračního souboru.

Instalace je poměrně jednoduchá, do vybraného adresáře nakopírujeme skript. Do podadresáře easyrsa pak easyrsa. Do podadresáře keys se pak bude ukládat výstup z easyrsa – klíče, certifikáty a dh parametry. Out pak slouží pro uložení už hotových balíčků. A konečně v template je uložena šablona klientské konfigurace a certifikáty a jiné potřebné soubory. Conf pak obsahuje nastavení serveru.

adresar
  +- conf/
  +- easyrsa/
  +- keys/
  +- out/
  +- template/
  +- doit.sh

Před samotným použitím pak ještě nastavíme easyrsa editací souboru easyrsa/vars – ten přibalený má nastaveny rozumné defaulty a obsahuje čáru pod kterou nedoporučuji editovat :). A následně pomocí:

cd easyrsa
. vars
# . easyrsa/vars
# ./easyrsa/clean-all  # vymaze obsah adresare keys, pouzivat jednorazove!!
# ./easyrsa/build-dh   # idealni cas uvarit si kavicku
# ./easysa/pkitool --initca
# ./easyrsa/pkitool --server server
./clean-all  # vymaze obsah adresare keys, pouzivat jednorazove!!
./build-dh   # idealni cas uvarit si kavicku
./pkitool --initca
./pkitool --server server
cd ..
openvpn --genkey --secret keys/secret.key
cp keys/ca.crt keys/secret.key template/

Tím vytvoříme CA, certifikát serveru a sdílený klíč pro použití jako tls-auth (jsou to obecné a základní kroky, není vytvářena mezivrstva v podobě dceřinné CA, nejsou použita žádná hesla apod.)

Vytvoření konfiguračních souborů nechávám na Vás (je přiložena ukázka cfg pro klienta). V konfiguračním souboru klienta se sekvence %NAME% nahradí názvem certifikátu klienta – využívá se pro nastavení souboru který obsahuje certifikát a pro přehlednost.

A sedmého dne Bůh odpočíval

A konečně se dostaneme ke generování uživatelských „balíčků“:

./doit.sh klient1 klient2 klient3 klient4

Tím se nám vytvořily balíčky ve výstupním adresáři out, připravené na rozdělení

V případě, že bychom někdy upravovali šablonu, stačí spustit:

./doit.sh --regen klient1 klient2 klient3 klient4

Certifikaty se tak negenerují nové, vše se jenom „updatuje“.

Přiložené soubory: vpn.tar.gz


K rozumnému použití je stále doporučeno nastudovat man openvpn, stránky www.openvpn.net a README v easyrsa. Informace jsou bez záruky, za případné způsobené škody neručím – nicméně toto v provozu používám. Obsah přiloženého taru je po nastavení požadovaných údajů reálně použitelný – byť je pro většinu použití pouhou kostrou.


UPDATE1: opravena tvorba CA

Komentáře

Obrázek uživatele Douglish

Dalsi script

A kdy bude dals script na administraci celeho systemu? :)

Neco jako
zadejte ukol: nastav ftp pro uzivatele pomoci mysql
instaluji a nastavuji ftp… provedeno
dalsi ukol [A/n]
zadejte ukol: hackni microsoft
trivialni operace jsou na uzivateli… skipping
dalsi ukol [A/n] n


Uz se tesim

..:: Stanley Douglish ::..
http://stanley-douglish.wz.cz

Obrázek uživatele anydot

Nebudou

Skriptovane mam jenom mista kde existuje casto opakovana cinnost ktera se da parametrizovat ;)

Obrázek uživatele maleprase

par poznamek ke skriptum

1.

$ . easyrsa/vars
-bash: /home/xxx/openvpn/vpn/whichopensslcnf: No such file or directory

vyresi to zmena v easyrsa/vars na

export EASY_RSA="`pwd`/easyrsa"

2.

$ ./easyrsa/clean-all
-bash: ./easyrsa/clean-all: /bin/bash: bad interpreter: No such file or directory

mozna by stalo za to zkusit pouzit obecnejsi

#!/usr/bin/env bash

v dalsich skriptech uz je /bin/sh - to by melo byt funkcni asi vsude

Obrázek uživatele anydot

ad1: chyba nastala pri

ad1: chyba nastala pri zpetnem vytvareni howto z neceho co uz delsi dobu uspokojive funguje. S trochou stesti by se to dalo zahrnout do te casti, kde pisi ze mas editovat ten soubor ‚vars‘ a nastavit v nem veci nad =====, ta promenna je nastesti nad nimi ;)

ad2: tvurcem skriptu easyrsa nejsem ja, tuhle chybu muzes nahlasit jako bug v openvpn, v jeho balicku je to distribuovane