Konfigurácia OpenVPN pomocou Easy-RSA

Poznámka

Na tejto príručke sa pracuje a bude sa priebežne aktualizovať. Prosím, berte tento stav do úvahy.

Tento návod ukazuje, ako nakonfigurovať klientov OpenVPN na prihlásenie pomocou Nitrokey Pro 2 alebo Nitrokey Storage 2. Na správu softvérových kľúčov budeme používať Easy-RSA, nástroj, ktorý sa vyvíjal spolu s OpenVPN.

To sign the certificates, we will use a Nitrokey HSM 2 set up as Certificate Authority, however this guide does not cover the set up of the CA itself (it is clear and well documented here).

Použijeme Easy-RSA, pretože sa zdá, že poskytuje určitú flexibilitu a umožňuje správu kľúčov prostredníctvom externých PKI. Použijeme ho na serveri na vydanie žiadosti o podpis a rovnaký postup zopakujeme na klientovi. Žiadosti o podpísanie certifikátu budú podpísané certifikačnou autoritou na HSM Nitorkey a opätovne odoslané na server a klienta.

Predpoklady

V nasledujúcej dokumentácii budeme potrebovať 3 rôzne stroje:

  • Server OpenVPN (v. 2.5) na Debiane 10 (virtuálny stroj EC2 - AWS)

  • Klient OpenVPN (v. 2.4.9) na Fedore 30 (lokálny počítač)

  • Certifikačná autorita bude prístupná zo samostatného počítača s Fedorou 30 (lokálny počítač)

Na interakciu so zariadeniami budeme potrebovať OpenSC 0.20 nainštalovaný na klientskom počítači a počítači CA (miestne počítače). Môžete postupovať podľa pokynov na jeho nastavenie v tomto odkaze (*Unix).

Na stiahnutie závislostí na počítačoch Fedora môžeme použiť tento návod:

su -c 'dnf install readline-devel openssl-devel libxslt docbook-style-xsl pcsc-lite-devel automake autoconf libtool gcc zlib-devel'

Pre Debian Linux sú novšie balíky OpenSC k dispozícii tu.

Na správu fyzických kľúčov budeme používať nasledujúce Nitrokeys:

Pripomíname, že pri vytváraní certifikačnej autority v systéme Nitrokey HSM 2 môžete postupovať podľa pokynov, ktoré sú k dispozícii ` v dokumentácii <certificate-authority.html#sign-a-server-certificate>`_.

Prípadne môžete nastaviť vlastnú certifikačnú autoritu na na samostatnom počítači, alebo použiť návod OpenVPN, ktorý sa tiež spolieha na Easy-RSA. Posledné 2 možnosti sa spoliehajú na softvérové riešenia na správu kľúčov.


Na strane servera

1. Nainštalujte OpenVPN

  1. Najprv musíme povoliť IP Forwarding úpravou súboru /etc/sysctl.conf

    $ editor /etc/sysctl.conf
    
  2. Zrušte komentár alebo zodpovedajúcim spôsobom upravte nasledujúci riadok

    net.ipv4.ip_forward=1
    
  3. Po uložení ho zavrite a zadajte tento príkaz

    $ sysctl -p
    

    Po dokončení presmerovania IP adries si budeme musieť stiahnuť najnovšiu verziu OpenvPN pre náš server Debian 10 podľa týchto pokynov:

  4. Zmeňte sa na roota a stiahnite kľúč GPG, ktorý podpísal balík

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Pridanie adresy URL príslušných balíkov OpenVPN do súboru sources.list

    # echo "deb http://build.openvpn.net/debian/openvpn/release/2.5 buster main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
    # exit
    

    Stiahli sme OpenVPN 2.5, pretože „výzva na zadanie hesla“ vyžaduje na prihlásenie aspoň OpenVPN verzie 2.4.8.

  6. Ďalej stiahneme OpenVPN

    $ sudo apt install openvpn
    

    Ak chcete skontrolovať verziu, je to možné zavolaním --version a vypísaním nasledujúceho:

    $ sudo openvpn --version
    OpenVPN 2.5_beta3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep  1 2020
    library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
    Originally developed by James Yonan
    Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net>
    Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no \ enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_iproute2=yes \ enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_maintainer_mode=no enable_management=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no \ enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no \ enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no \ enable_systemd=yes enable_werror=no enable_win32_dll=yes enable_x509_alt_username=yes with_aix_soname=aix with_crypto_library=openssl with_gnu_ld=yes \ with_mem_check=no with_sysroot=no
    

2. Nainštalujte Easy-RSA

Na vytvorenie PKI stiahneme na server a klientske počítače najnovšiu verziu Easy-RSA. Ak chcete získať najnovšiu verziu, prejdite na stránku Releases na oficiálnom projekte EasyRSA GitHub, skopírujte odkaz na stiahnutie súboru končiaceho na .tgz a potom ho vložte do nasledujúceho príkazu:

  1. Stiahnite si najnovšiu verziu

    $ cd ~
    $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
    
  2. Rozbalenie balíka tarball

    $ cd ~
    $ tar xvf EasyRSA-3.0.7.tgz
    $ mv EasyRSA-3.0.7/ easyrsa/ # rename folder
    

3. Vytvorenie PKI pre server OpenVPN

Pred vytvorením súkromného kľúča a certifikátu servera OpenVPN musíte na serveri OpenVPN vytvoriť miestny adresár infraštruktúry verejných kľúčov. Tento adresár budete používať na správu požiadaviek na certifikát servera a klientov namiesto toho, aby ste ich zadávali priamo na serveri certifikačnej autority.

Ak chcete vytvoriť adresár PKI na serveri OpenVPN, musíte naplniť súbor s názvom vars niektorými predvolenými hodnotami.

  1. Vytvorenie súboru vars

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Po otvorení súboru vložte nasledujúce dva riadky

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Toto sú jediné dva riadky, ktoré potrebujete v tomto súbore vars na vašom serveri OpenVPN, pretože sa nebude používať ako certifikačná autorita. Zabezpečí, aby vaše súkromné kľúče a žiadosti o certifikát boli nakonfigurované tak, aby sa na generovanie kľúčov a bezpečných podpisov pre vašich klientov a server OpenVPN používala kryptografia eliptických kriviek (ECC).

    Pokiaľ ide o výber kryptografických algoritmov, postupujem podľa vzoru v tomto návode a môžete si ich prispôsobiť podľa svojich konkrétnych potrieb.

  3. Inicializácia infraštruktúry PKI

    Po vyplnení súboru vars môžete pokračovať vo vytváraní adresára PKI. Na tento účel spustite skript easyrsa s voľbou init-pki:

    $ ./easyrsa init-pki
    

    Po inicializácii PKI na serveri OpenVPN môžete prejsť k ďalšiemu kroku, ktorým je vytvorenie žiadosti o certifikát servera OpenVPN a súkromného kľúča.

4. Vytvorte server.req a server.key

Teraz, keď má váš server OpenVPN nainštalované všetky predpoklady, je ďalším krokom vygenerovanie páru kľúčov pozostávajúceho zo súkromného kľúča (ktorý má zostať utajený) a žiadosti o podpis certifikátu (.csr) na vašom serveri OpenVPN.

Všeobecne platí, že v systémoch, kde generujeme kľúč a požiadavku, sa tieto súbory nechávajú nezašifrované pomocou argumentu nopass, pretože servery sa zvyčajne musia spúšťať bez zadávania hesla. Tým sa vygeneruje nešifrovaný kľúč, preto dbajte na dôkladnú ochranu jeho prístupových a súborových práv.

Tip

Poznámky ku konfigurácii z OpenVPN:

  1. The server, and each client, must have their own cert and key

    file. The server and all clients will use the same CA file.

  2. Certifikát servera by mal mať tieto vlastnosti:

  • keyUsage:  digitalSignature, keyEncipherment

  • extendedKeyUsage: serverAuth

  1. Vytvorenie požiadavky na podpisovanie pre server

    Prejdite do adresára ~/easyrsa na serveri OpenVPN ako používateľ, ktorý nie je root, a zadajte nasledujúce príkazy:

    $ cd easyrsa/
    $ ./easyrsa gen-req server nopass
    

    Tým sa vytvorí súkromný kľúč pre server a súbor žiadosti o certifikát s názvom server.req.

    Po získaní podpísaného certifikátu ho prenesiete späť na server OpenVPN.

  2. Skopírujte kľúč do adresára servera OpenVPN

    $ sudo cp /home/admin/EasyRSA/pki/private/server.key /etc/openvpn/server/
    

Po dokončení týchto krokov ste úspešne vytvorili súkromný kľúč pre váš server OpenVPN. Vytvorili ste tiež žiadosť o podpis certifikátu pre server OpenVPN.

Tip

Prípony súborov pre žiadosti o podpisovanie certifikátov

Prípona súboru, ktorú preberá výučbový program CA a HSM, označuje vytvorenie súboru .csr, avšak Easy-RSA vytvára žiadosti o podpis certifikátu s príponou .req.

Obe prípony budeme používať striedavo, pričom sa uistíme, že do certifikačnej autority prenesieme správne súbory a vygenerujeme konečný certifikát s príponou .crt.

V ďalšej časti tejto príručky podpíšeme .req súbor s našou certifikačnou autoritou nasadenou v zariadení HSM 2. Na tento účel použijem na podpisovanie požiadaviek vyhradené zariadenie.

5. Podpis a načítanie server.crt

Nasledujúce pokyny vyžadujú prenos súboru server.req (alebo server.csr) do systému CA.

Samotný prenos nie je bezpečnostne citlivý, hoci je rozumné overiť, či sa prijatý súbor zhoduje s kópiou odosielateľa, ak je prenos nedôveryhodný.

Aby som mohol prejsť týmito krokmi, budem sa vo veľkej miere opierať o tento návod na podpisovanie žiadostí o podpis certifikátu, keď sme ich vygenerovali pomocou Easy-RSA.

  1. Podpíšte súbor server.req

    Na lokálnom počítači určenom na prístup k HSM použijeme nástroje, ktoré poskytuje Opensc 0.20, aby sme podpísali súbor .req a odoslali ho späť na server OpenVPN. Predpokladáme, že sme súbor preniesli zo serverového počítača do počítača CA.

    Najskôr začneme zapojením HSM Nitrokey a zadáme tento pokyn pre zoznam dostupných kľúčov.

    1. Vyhľadanie zoznamu dostupných zariadení

      $ p11tool --list-all
      

      (Povinný krok) Ak podpisujete certifikát pomocou certifikačnej autority prvýkrát, možno budete chcieť získať URI súkromného kľúča certifikačnej autority z HSM a zahrnúť ho do konfiguračného súboru.

      Poznámka

      URI kľúča by malo byť v tomto formáte:

      pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0104068;token=SmartCard-HSM%20%28UserPIN%29%00%00%00%00%00%00%00%00%00;id=%E0%16%1C%C8%B6%F5%D6%6A%C6%83%5E%CD%EC%B6%23%FC%05%06%A6%75;object=root;type=private
      
    2. Vytvorenie openvpn/ adresára pod certificate-authority/

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Podpíšte server.req

      $ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in server.req -out /home/user/pki/issued/server.crt
      
  2. Získanie súboru server.crt do počítača servera

    1. Prenos podpísaných certifikátov na server

      Z počítača CA skopírujte súbory server.crt a chain.crt na server OpenVPN. V tomto príklade použijeme príkaz scp podľa nasledujúceho postupu:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Umiestnenie certifikátov do adresára servera

      $ mv /tmp/{server.crt,chain.crt} /etc/openvpn/server
      

      Varovanie

      Certifikát CA a chain.crt

      V uvedenom prípade certifikačná autorita vráti podpísaný certifikát sever a obsahuje certifikát certifikačnej autority CA.crt, ktorý je chain.crt súborom. Toto sa môže vykonať cez nezabezpečený kanál, hoci klientovi sa odporúča potvrdiť, či je prijatý chain.crt platný, ak je transport nedôveryhodný.

      Je možné premenovať súbor chain.crt na CA.crt na cieľovom počítači, v ďalších pokynoch však budeme používať chain.crt.

6. Konfigurácia servera OpenVPN

Spojenie, ktoré používa TLS, vyžaduje viacero certifikátov a kľúčov na overenie. Teraz, keď sme ich vydali a podpísali, môžeme ich umiestniť do správnych adresárov. Rozdelenie certifikátov a kľúčov, ktoré sa musia nachádzať v koreňovom adresári, je nasledovné:

OpenVPN server

    - The root certificate file (CA.crt or chain.crt in our setup)
    - Server certificate
    - Server key
    - Diffie Hellman Parameters (optional)

Na svojom serveri OpenVPN teraz môžete vytvoriť konfiguračný súbor server.conf pomocou svojho obľúbeného textového editora. Súbor môžete nakonfigurovať podľa svojich potrieb, pričom sa postaráme o zmenu častí certifikátu servera a kľúča podľa názvov, ktoré ste zvolili pre vaše súbory, ktoré sme podpísali:

# OpenVPN Server Certificate - CA, server key and certificate
ca chain.crt
cert server.crt
key server.key

Tu je konfiguračný súbor, ktorý môžeme použiť na testovanie týchto pokynov:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
tls-version-min 1.2 # Lower boundary for TLS version
tls-version-max 1.2 # Higher boundary for TLS version

Ak chceme otestovať, či konfigurácia funguje správne, môžeme použiť tento príkaz:

$ sudo openvpn --server --config server.conf

7. Spustite službu OpenVPN na serveri

Povoľte službu OpenVPN jej pridaním do systemctl a spustite ju pomocou týchto príkazov:

$ sudo systemctl -f enable openvpn@server
$ sudo systemctl start openvpn@server

Ak chcete dvakrát skontrolovať, či je služba OpenVPN aktívna, použite tento príkaz:

$ sudo systemctl status openvpn@server

V tomto okamihu by mala byť spustená sieť OpenVPN.


Konfigurácia na strane klienta

1. Inštalácia OpenVPN a Easy-RSA

  1. Inštalácia softvéru

    Na inštaláciu OpenVPN 2.4.9 a Easy-RSA 3.0.7 môžeme použiť priamo dnf install

    $ sudo dnf install openvpn easy-rsa
    
  2. Potom vytvoríme ako non-root adresár pre Easy RSA s názvom Easy-RSA

    $ mkdir ~/easyrsa
    
  3. A prepojte ho s balíkom Easy RSA, ktorý sme práve nainštalovali

    $ ln -s /usr/share/easy-rsa/3/* ~/easyrsa/
    

2. Vytvorenie PKI pre klienta OpenVPN

Rovnakým spôsobom, ako sme vytvorili PKI na serveri OpenVPN, vytvoríme PKI pomocou Easy-RSA na strane klienta.

3. Vytvorte client.req a client.key

Rovnakým spôsobom, ako sme vydali kľúčový pár na serveri, vygenerujeme kľúčový pár pre klienta, ktorý bude pozostávať zo súboru client.req a súboru client.key. Ten musí byť na klientskom počítači utajený.

4. Podpíšte client.req a vystavte client.crt súbor

Na prenos súboru client.req do počítača CA použijeme rovnaký postup ako pri súbore server.req.

Po prenose podpíšeme na počítači certifikačnej autority súbor so žiadosťou o podpis certifikátu týmto príkazom

$ openssl ca -config sign_server_csrs.ini -engine pkcs11 -keyform engine -days 375 -notext -md sha512 -create_serial -in client.req -out /home/user/pki/issued/client.crt

5. Import client.crt na Nitrokey z počítača CA

Po vytvorení súboru client.crt zapojíme zariadenie Nitrokey Pro 2 do počítača CA a pomocou tohto príkazu importujeme .crt do zariadenia Pro 2:

$ pkcs15-init --store-certificate client.crt --id 3

Pomocou tohto príkazu môžete zistiť, či je kľúč efektívne uložený v zariadení Nitrokey:

$ pkcs15-tool -c

Prípadne

$ pkcs11-tool --list-objects

Viac príkazov nájdete na OpenSC wiki.

6. Získajte súbor chain.crt zo zariadenia CA

While we keep the client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt file on the client machine, and store it in the adequate directory. We may use scp as in the method explained in the server section of this guide.

7. Nakonfigurujte klienta na interakciu s Nitrokey

Teraz v klientskom počítači pripojíme Nitrokey Pro a použijeme ho na vytvorenie pripojenia VPN so serverom. Vo všeobecnosti platí, že spojenie, ktoré využíva TLS, si vyžaduje viacero certifikátov a kľúčov na overenie:

OpenVPN client
    - The root certificate file (`chain.crt`)
    - Client certificate
    - Client key

Pre tento návod môžeme použiť nasledujúci súbor client.conf a podľa toho do neho pridať požadované možnosti:

client
dev tun
proto udp
remote <server> 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
remote-cert-tls server
cipher AES-256-CBC
verb 3
redirect-gateway def1
tls-version-min 1.2 # Lower boundary for TLS version
tls-version-max 1.2 # Higher boundary for TLS version
  1. Určenie správneho objektu

    Každý poskytovateľ PKCS#11 môže podporovať viacero zariadení. Na zobrazenie zoznamu dostupných objektov môžete použiť nasledujúci príkaz:

    $ openvpn --show-pkcs11-ids /usr/lib64/pkcs11/opensc-pkcs11.so
    
    The following objects are available for use.
    Each object shown below may be used as parameter to
    
    --pkcs11-id option please remember to use single quote mark.
    
    Certificate
            DN:             CN=client
            Serial:         E53DA75C5B8F1518F520BCEF0128C09F
            Serialized id:  pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03
    

    Každý pár certifikát/súkromný kľúč má jedinečný Serialized id reťazec. V konfiguračnom súbore by mal byť uvedený serializovaný id reťazec požadovaného certifikátu. Môžeme to urobiť pridaním možnosti pkcs11-id s použitím jednoduchých úvodzoviek.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Pridanie získaného serializovaného ID do konfiguračného súboru

    Pomocou obľúbeného textového editora otvorte súbor server.conf a pridajte nasledujúce riadky, pričom dbajte na to, aby ste vložili vlastné Serialized id:

    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    

    Pre ďalšie nastavenia súvisiace s OpenVPN autentizáciou môžete pridať aj niekoľko riadkov na správu kľúčov, hoci je to voliteľné.

    Poznámka

    Kliknutím zobrazíte kód

    # nitrokey config
    
    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    # pkcs11-pin-cache 300
    # daemon
    # auth-retry nointeract
    # management-hold
    # management-signal
    # management 127.0.0.1 8888
    # management-query-passwords
    pkcs11-cert-private 1 # Prompt for PIN
    

    Voliteľný krok

    Ak potrebujete otestovať konfiguráciu s tokenom a bez tokenu na Nitrokey, môžete pridať riadky do toho istého client.conf a príslušné riadky komentovať/nekomentovať podľa svojich potrieb:

    Poznámka

    Kliknutím zobrazíte kód

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. Konfigurácia klienta OpenVPN

    Konečný konfiguračný súbor client.conf by mal vyzerať takto:

    client
    dev tun
    proto udp
    remote <server> 1194
    resolv-retry infinite
    nobind
    user nobody
    group nobody
    persist-key
    persist-tun
    ca ca.crt
    remote-cert-tls server
    cipher AES-256-CBC
    verb 3
    redirect-gateway def1
    tls-version-min 1.2 # Lower boundary for TLS version
    tls-version-max 1.2 # Higher boundary for TLS version
    
    # nitrokey login
    
    pkcs11-providers /usr/lib64/pkcs11/opensc-pkcs11.so
    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    # pkcs11-pin-cache 300
    # daemon
    # auth-retry nointeract
    # management-hold
    # management-signal
    # management 127.0.0.1 8888
    # management-query-passwords
    pkcs11-cert-private 1 # Prompt for PIN
    
    # OR
    
    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  4. Configure OpenVPN (Windows only)

    Aby ste mohli vytvoriť handshake, musíte nakonfigurovať OpenSSL, ktorý je súčasťou OpenVPN.

    Create the directory ssl in C:\Program Files\OpenVPN and create file openssl.cnf with the following content :

    openssl_conf = default_conf

    [ default_conf ] ssl_conf = ssl_sect

    [ ssl_sect ] system_default = ssl_default_sect

    [ ssl_default_sect ] SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512:RSA+SHA384:ECDSA+SHA384:RSA+SHA256:ECDSA+SHA256 MaxProtocol = TLSv1.2 MinProtocol = TLSv1.2

    Po tejto úprave nebudete mať chybu, ako sa uvádza tu, tu a tu.

  5. Známe problémy

    Existujú niektoré známe problémy súvisiace s prihlásením do OpenVPN pomocou OpenSC. Prosím, prečítajte si tieto problémy tu.

8. Spustite klienta OpenVPN

  1. Spustenie služby OpenVPN v klientovi

    Povoľte službu OpenVPN a spustite ju pomocou týchto príkazov:

    $ sudo systemctl -f enable openvpn-server@server.service
    $ sudo systemctl start openvpn-server@server.service
    

    Ak chcete dvakrát skontrolovať, či je služba OpenVPN aktívna, použite tento príkaz:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Zadajte svoj používateľský kód PIN

    Pri spustení klienta OpenVPN je potrebné zadať PIN kód Nitrokey:

    $ sudo openvpn --client --config client.conf
    Fri Sep 11 17:42:01 2020 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 24 2020
    Fri Sep 11 17:42:01 2020 library versions: OpenSSL 1.1.1g FIPS  21 Apr 2020, LZO 2.08
    Fri Sep 11 17:42:01 2020 PKCS#11: Adding PKCS#11 provider '/usr/lib64/pkcs11/opensc-pkcs11.so'
    Enter User PIN (OpenPGP card) token Password: ******
    

    Varovanie

    Unfortunately OpenVPN doesn’t seem to be able to establish a handshake on some operating systems and stops at an error as reported here, here and here

    This is what the error output looks like:
    
    $ sudo openvpn --client --config client.conf
    Fri Sep 11 17:42:01 2020 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 24 2020
    Fri Sep 11 17:42:01 2020 library versions: OpenSSL 1.1.1g FIPS  21 Apr 2020, LZO 2.08
    Fri Sep 11 17:42:01 2020 PKCS#11: Adding PKCS#11 provider '/usr/lib64/pkcs11/opensc-pkcs11.so'
    Enter User PIN (OpenPGP card) token Password: ******``
    Fri Sep 11 17:42:12 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]18.157.180.240:1194``
    Fri Sep 11 17:42:12 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]``
    Fri Sep 11 17:42:12 2020 UDP link local: (not bound)
    Fri Sep 11 17:42:12 2020 UDP link remote: [AF_INET]18.157.180.240:1194
    Fri Sep 11 17:42:12 2020 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
    Fri Sep 11 17:42:12 2020 TLS: Initial packet from [AF_INET]18.157.180.240:1194, sid=d79690cf 9e38ce89
    Fri Sep 11 17:42:12 2020 VERIFY OK: depth=1, CN=server_CA
    Fri Sep 11 17:42:12 2020 VERIFY KU OK
    Fri Sep 11 17:42:12 2020 Validating certificate extended key usage
    Fri Sep 11 17:42:12 2020 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
    Fri Sep 11 17:42:12 2020 VERIFY EKU OK
    Fri Sep 11 17:42:12 2020 VERIFY OK: depth=0, CN=server
    Fri Sep 11 17:42:12 2020 OpenSSL: error:141F0006:SSL routines:tls_construct_cert_verify:EVP lib
    Fri Sep 11 17:42:12 2020 TLS_ERROR: BIO read tls_read_plaintext error
    Fri Sep 11 17:42:12 2020 TLS Error: TLS object -> incoming plaintext read error
    Fri Sep 11 17:42:12 2020 TLS Error: TLS handshake failed
    Fri Sep 11 17:42:12 2020 SIGUSR1[soft,tls-error] received, process restarting
    Fri Sep 11 17:42:12 2020 Restart pause, 5 second(s)
    

    V niektorých hlásených prípadoch sa na termináli nevyžaduje zadanie kódu PIN. Jedným z riešení by bolo použitie tohto príkazu na prihlásenie pomocou kódu PIN:

    $ telnet 8888 password 'User PIN (OpenPGP card) token' <PIN>
    

    Prípadne môžete prekompilovať klienta OpenVPN s vypnutou podporou systemd a ten vás podľa očakávania vyzve na zadanie kódu PIN.

    Ďalšou možnosťou je prihlásiť sa do inštancie OpenVPN pomocou klienta Viscosity, ktorý poskytuje lepší používateľský komfort, najmä pri zadávaní kódu PIN.