„OpenVPN“ konfigūracija su „Easy-RSA#

Pastaba

Šis vadovas yra nebaigtas rengti ir bus atnaujinamas. Prašome atsižvelgti į šį statusą.

Šiame vadove parodyta, kaip sukonfigūruoti „OpenVPN“ klientus prisijungti naudojant „Nitrokey Pro 2“ arba „Nitrokey Storage 2“. Programiniam raktų valdymui naudosime Easy-RSA, įrankį, kuris buvo tobulinamas kartu su 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).

Naudosime „Easy-RSA“, nes atrodo, kad ji užtikrina tam tikrą lankstumą ir leidžia valdyti raktus per išorinius PKI. Ją naudosime serveryje pasirašymo užklausai pateikti ir tą patį procesą pakartosime klientui. Sertifikatų pasirašymo prašymus pasirašys „Nitorkey HSM“ CA ir pakartotinai perduos juos serveriui ir klientui.

Būtinosios sąlygos#

Toliau pateiktoje dokumentacijoje mums reikės 3 skirtingų mašinų:

  • „OpenVPN“ serveris (2.5 versija) „Debian 10“ sistemoje (EC2 virtuali mašina - AWS)

  • „OpenVPN“ klientas (v. 2.4.9) „Fedora 30“ (vietiniame kompiuteryje)

  • Sertifikatų tarnyba bus pasiekiama iš atskiro kompiuterio su „Fedora 30“ (vietinis kompiuteris).

Kad galėtume sąveikauti su įrenginiais, reikės OpenSC 0.20, įdiegtos kliento ir CA kompiuteryje (vietiniuose kompiuteriuose). Galite vadovautis instrukcijomis, kaip ją nustatyti šioje nuorodoje (*Unix).

Norėdami atsisiųsti priklausomybes „Fedora“ kompiuteriuose, galime pasinaudoti šia instrukcija:

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

„Debian Linux“ atveju naujesnius „OpenSC“ paketus galima rasti čia.

Fiziniam raktų valdymui naudosime šiuos Nitrokeys:

Primename, kad norėdami sukurti „Nitrokey HSM 2“ sertifikatų tarnybą, galite vadovautis instrukcijomis, pateiktomis ` dokumentuose <certificate-authority.html#sign-a-server-certificate>`_.

Taip pat galite nustatyti savo CA atskirame kompiuteryje arba naudoti „OpenVPN“ vadovėlį, kuris taip pat remiasi Easy-RSA. Pastarosios 2 galimybės remiasi raktų valdymo programinės įrangos sprendimais.


Serverio pusėje#

1. Įdiekite OpenVPN#

  1. Pirmiausia reikia įjungti IP persiuntimą redaguojant /etc/sysctl.conf failą.

    $ editor /etc/sysctl.conf
    
  2. Panaikinkite arba atitinkamai redaguokite šią eilutę

    net.ipv4.ip_forward=1
    
  3. Išsaugoję jį uždarykite ir įveskite šią komandą

    $ sysctl -p
    

    Atlikę IP peradresavimą, turėsime atsisiųsti naujausią „OpenvPN“ versiją savo „Debian 10“ serveriui, kaip nurodyta šiose instrukcijose:

  4. Pasikeiskite į root ir atsisiųskite paketą pasirašiusį GPG raktą

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Į failą sources.list įtraukite tinkamų „OpenVPN“ paketų URL.

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

    Atsisiuntėme „OpenVPN 2.5“, nes „slaptažodžio paraginimas“ reikalauja bent „OpenVPN“ versijos 2.4.8, kad galėtumėte prisijungti.

  6. Toliau atsisiunčiame „OpenVPN

    $ sudo apt install openvpn
    

    Jei norite patikrinti versiją, tai galima padaryti paskambinus --version ir išspausdinus toliau pateiktą informaciją:

    $ 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. Įdiekite „Easy-RSA#

Norėdami sukurti PKI, į serverio ir kliento kompiuterius atsisiųsime naujausią „Easy-RSA“ versiją. Norėdami gauti naujausią versiją, eikite į Releases puslapį oficialiame „EasyRSA GitHub“ projekte, nukopijuokite failo, pasibaigiančio .tgz, atsisiuntimo nuorodą ir įklijuokite ją į šią komandą:

  1. Atsisiųskite naujausią versiją

    $ cd ~
    $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
    
  2. Ištraukti tarball

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

3. Sukurti PKI OpenVPN serveriui#

Prieš kurdami OpenVPN serverio privatųjį raktą ir sertifikatą, savo OpenVPN serveryje turite sukurti vietinį viešojo rakto infrastruktūros katalogą. Šį katalogą naudosite serverio ir klientų sertifikatų užklausoms tvarkyti, užuot jas teikę tiesiogiai CA serveryje.

Norėdami „OpenVPN“ serveryje sukurti PKI katalogą, turėsite užpildyti failą, pavadintą vars, kai kuriomis numatytosiomis reikšmėmis.

  1. Sukurkite vars failą

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Atidarę failą įklijuokite šias dvi eilutes

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Tai vienintelės dvi eilutės, kurių reikia šiame vars faile OpenVPN serveryje, nes jis nebus naudojamas kaip sertifikato institucija. Jie užtikrins, kad jūsų privatieji raktai ir sertifikatų užklausos būtų sukonfigūruotos taip, kad raktams generuoti būtų naudojama elipsinės kreivės kriptografija (ECC), o jūsų klientams ir OpenVPN serveriui - saugūs parašai.

    Dėl kriptografinių algoritmų pasirinkimo vadovaujuosi šioje vadovėlyje pateiktu modeliu, o jūs galite juos pritaikyti pagal savo konkrečius poreikius.

  3. PKI inicijavimas

    Užpildę vars failą, galite tęsti PKI katalogo kūrimą. Norėdami tai padaryti, paleiskite easyrsa scenarijų su parinktimi init-pki:

    $ ./easyrsa init-pki
    

    Inicializavę PKI „OpenVPN“ serveryje, galite pereiti prie kito veiksmo - sukurti „OpenVPN“ serverio sertifikato užklausą ir privatųjį raktą.

4. Sukurkite server.req ir server.key.#

Dabar, kai „OpenVPN“ serveryje įdiegtos visos būtinosios sąlygos, kitas žingsnis - sugeneruoti raktų porą, sudarytą iš privataus rakto (kurį reikia laikyti paslaptyje) ir sertifikato pasirašymo prašymo (.csr) „OpenVPN“ serveryje.

Apskritai sistemose, kuriose generuojame raktą ir užklausą, šie failai paliekami neužšifruoti naudojant nopass argumentą, nes serverius paprastai reikia paleisti neįvedus slaptažodžio. Taip sukuriamas nešifruotas raktas, todėl nepamirškite atidžiai apsaugoti jo prieigos ir failų teisių.

Patarimas

„OpenVPN“ konfigūracijos pastabos:

  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. Serverio sertifikatas turi turėti šiuos požymius:

  • keyUsage:  digitalSignature, keyEncipherment

  • extendedKeyUsage: serverAuth

  1. Sukurti serverio pasirašymo užklausą

    Pereikite į ~/easyrsa katalogą savo OpenVPN serveryje kaip ne šakninis naudotojas ir įveskite šias komandas:

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

    Taip bus sukurtas serverio privatusis raktas ir sertifikato prašymo failas, pavadintas server.req.

    Kai turėsite pasirašytą sertifikatą, perduosite jį atgal į „OpenVPN“ serverį.

  2. Nukopijuokite raktą į OpenVPN serverio katalogą

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

Atlikę šiuos veiksmus sėkmingai sukūrėte „OpenVPN“ serverio privatų raktą. Taip pat sukūrėte „OpenVPN“ serverio sertifikato pasirašymo užklausą.

Patarimas

Sertifikatų pasirašymo užklausų failų plėtiniai

Failo plėtinys, kurį priima CA ir HSM vadovėlis, nurodo, kad reikia sukurti </x id="92"></x>.csr failą, tačiau „Easy-RSA“ sukuria sertifikatų pasirašymo prašymus su </x id="168"></x> plėtiniu.

Naudosime pakaitomis abu plėtinius, tačiau įsitikinsime, kad į sertifikatų tarnybą perduodame tinkamus failus, ir sukursime galutinį sertifikatą su .crt plėtiniu.

Kitame šio vadovo skyriuje pasirašysime .req failą su mūsų CA, įdiegta HSM 2 įrenginyje. Šiam tikslui pasirašyti užklausas naudosiu specialų kompiuterį.

5. Pasirašyti ir gauti server.crt#

Pagal toliau pateiktus nurodymus į CA sistemą reikia perkelti server.req (arba server.csr) failą.

Pats perkėlimas nėra saugus, tačiau, jei transportas nepatikimas, pravartu patikrinti, ar gautas failas atitinka siuntėjo kopiją.

Atlikdamas šiuos veiksmus, plačiai remsiuosi šiomis instrukcijomis, kad galėčiau pasirašyti sertifikatų pasirašymo prašymus, kai juos sugeneruosime naudodami „Easy-RSA“.

  1. Pasirašykite server.req failą

    Vietiniame kompiuteryje, skirtame HSM pasiekti, naudosime Opensc 0.20 įrankius, kad pasirašytume .req failą ir nusiųstume jį atgal į OpenVPN serverį. Darome prielaidą, kad failą iš serverio kompiuterio persiuntėme į CA kompiuterį.

    Pirmiausia pradedame nuo HSM „Nitrokey“ prijungimo ir įveskite šią instrukciją, kad išvardytumėte turimus klavišus.

    1. Užklausa apie turimų prietaisų sąrašą

      $ p11tool --list-all
      

      (Būtinas veiksmas) Jei sertifikatą su CA pasirašote pirmą kartą, galbūt norėsite iš HSM gauti CA privataus rakto URI ir įtraukti jį į konfigūracijos failą.

      Pastaba

      Raktas URI turėtų būti tokio formato:

      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. Sukurti openvpn/ katalogą po certificate-authority/.

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Pasirašykite 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. server.crt failo gavimas į serverio kompiuterį

    1. Pasirašytų sertifikatų perkėlimas į serverį

      Iš CA kompiuterio nukopijuokite failus server.crt ir </x id="57"></x> į „OpenVPN“ serverį. Šiame pavyzdyje naudosime scp komandą, kaip nurodyta toliau:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Įdėkite sertifikatus į serverio katalogą

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

      Įspėjimas

      CA sertifikatas ir chain.crt

      Pirmiau pateiktame pavyzdyje CA grąžina pasirašytą Šiaurės sertifikatą ir įtraukia CA sertifikatą CA.crt, kuris yra chain.crt failas. Tai galima atlikti nesaugiu kanalu, tačiau klientui rekomenduojama patvirtinti, ar gautas chain.crt galioja, jei transportas nepatikimas.

      Failą chain.crt galima pervadinti į CA.crt tiksliniame kompiuteryje, tačiau kituose nurodymuose naudosime chain.crt.

6. Sukonfigūruokite OpenVPN serverį#

TLS naudojančiam ryšiui reikia kelių autentifikavimo sertifikatų ir raktų. Dabar, kai juos išdavėme ir pasirašėme, galime juos patalpinti į reikiamus katalogus. Sertifikatų ir raktų, kurie turi būti šakniniame kataloge, suskirstymas yra toks:

OpenVPN server

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

Dabar savo „OpenVPN“ serveryje galite sukurti konfigūracijos failą server.conf naudodami mėgstamą teksto redaktorių. Failą galite konfigūruoti pagal savo poreikius, o mes pasirūpinsime, kad serverio sertifikato ir rakto dalys būtų pakeistos pagal jūsų pasirinktus jūsų pasirašytų failų pavadinimus:

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

Čia pateikiamas konfigūracijos failas, kurį galime naudoti šioms instrukcijoms išbandyti:

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

Norėdami patikrinti, ar konfigūracija veikia tinkamai, galime naudoti šią komandą:

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

7. Įjunkite OpenVPN paslaugą serveryje#

Įjunkite „OpenVPN“ paslaugą, pridėdami ją į systemctl, ir paleiskite ją šiomis komandomis:

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

Norėdami patikrinti, ar OpenVPN paslauga yra aktyvi, naudokite šią komandą:

$ sudo systemctl status openvpn@server

Šiuo metu turėtų veikti „OpenVPN“.


Kliento pusės konfigūracija#

1. Įdiekite „OpenVPN“ ir „Easy-RSA#

  1. Įdiekite programinę įrangą

    Galime tiesiogiai naudoti dnf install, kad įdiegtume OpenVPN 2.4.9 ir Easy-RSA 3.0.7

    $ sudo dnf install openvpn easy-rsa
    
  2. Tada sukuriame ne šakninį katalogą, skirtą „Easy RSA“, pavadintą Easy-RSA.

    $ mkdir ~/easyrsa
    
  3. Ir susiekite jį su ką tik įdiegtu „Easy RSA“ paketu

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

2. Sukurti PKI OpenVPN klientui#

Tokiu pat būdu, kokiu sukūrėme PKI „OpenVPN“ serveryje, sukursime PKI naudodami „Easy-RSA“ kliento pusėje.

3. Sukurkite client.req ir client.key.#

Tokiu pat būdu, kaip ir išdavėme raktų porą serveriui, sugeneruosime raktų porą klientui, kurią sudarys client.reqclient.req failas ir client.key failas. Pastarasis turi būti slaptas kliento kompiuteryje.

4. Pasirašykite client.req ir išduokite client.crt failą.#

Norėdami perkelti client.req failą į CA kompiuterį, naudosime tą patį metodą, kaip ir </x id="103"></x> failo atveju.

Perdavus sertifikatą, CA kompiuteryje pasirašome sertifikato pasirašymo prašymo failą naudodami šią komandą

$ 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. Importuokite client.crt į „Nitrokey“ iš CA mašinos.#

Sukūrę client.crt failą, prijungiame „Nitrokey Pro 2“ įrenginį prie CA kompiuterio ir importuojame .crt į „Pro 2“ įrenginį naudodami šią komandą:

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

Naudodami šią komandą galite patikrinti, ar raktas veiksmingai saugomas „Nitrokey“, naudodami šią komandą:

$ pkcs15-tool -c

Arba

$ pkcs11-tool --list-objects

Daugiau komandų galite rasti OpenSC wiki.

6. Atgaukite chain.crt failą iš CA kompiuterio.#

O client.crt`stored on the nitrokey Pro 2 device, we must retrieve the chain.crt failą laikome kliento kompiuteryje ir saugome atitinkamame kataloge. Galime naudoti scp, kaip ir šio vadovo serverio skyriuje paaiškintame metode.

7. Sukonfigūruokite klientą sąveikai su „Nitrokey#

Dabar vėl kliento kompiuteryje prijunkite „Nitrokey Pro“ ir naudokite jį VPN ryšiui su serveriu užmegzti. Apskritai TLS naudojančiam ryšiui reikia kelių sertifikatų ir raktų autentiškumui patvirtinti:

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

Šiame vadove galime naudoti šį client.conf failą ir į jį atitinkamai pridėti reikiamas parinktis:

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. Nustatykite tinkamą objektą

    Kiekvienas PKCS#11 teikėjas gali palaikyti kelis įrenginius. Norėdami peržiūrėti galimų objektų sąrašą, galite naudoti šią komandą:

    $ 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
    

    Kiekviena sertifikato ir privataus rakto pora turi unikalią Serialized id eilutę. Konfigūracijos faile reikia nurodyti prašomo sertifikato serijinę id eilutę. Tai galime padaryti pridėdami pkcs11-id parinktį, naudodami viengubus kabliataškius.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Įtraukti gautą serijinį ID į konfigūracijos failą

    Naudodamiesi mėgstamu teksto redaktoriumi atidarykite server.conf failą ir pridėkite toliau nurodytas eilutes, tačiau nepamirškite įterpti savo 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'
    

    Norėdami atlikti papildomus nustatymus, susijusius su OpenVPN autentifikavimu, taip pat galite pridėti kelias eilutes, skirtas raktų tvarkymui, nors tai neprivaloma.

    Pastaba

    Spustelėkite, jei norite peržiūrėti kodą

    # 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
    

    Neprivalomas žingsnis

    Jei reikia išbandyti konfigūraciją su „Nitrokey“ ženklu ir be jo, galite pridėti eilučių į tą pačią client.conf ir komentuoti/nekomentuoti atitinkamas eilutes pagal savo poreikius:

    Pastaba

    Spustelėkite, jei norite peržiūrėti kodą

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. Sukonfigūruokite „OpenVPN“ klientą

    Galutinis konfigūracijos failas client.conf turėtų atrodyti taip:

    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)

    Kad būtų galima užmegzti rankų suvedimą, turite sukonfigūruoti „OpenVPN“ įtrauktą „OpenSSL“.

    Sukurkite katalogą ssl C:\Program Files\OpenVPN ir sukurkite failą openssl.cnf su tokiu turiniu :

    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

    Atlikus šį pakeitimą, neliks klaidų, apie kurias pranešta čia, čia ir čia.

  5. Žinomos problemos

    Yra keletas žinomų problemų, susijusių su „OpenVPN“ prisijungimu prie „OpenSC“. Prašome susipažinti su šiomis problemomis čia.

8. Paleiskite OpenVPN klientą#

  1. Įjunkite „OpenVPN“ paslaugą kliento kompiuteryje

    Įjunkite „OpenVPN“ paslaugą ir paleiskite ją šiomis komandomis:

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

    Norėdami dar kartą patikrinti, ar „OpenVPN“ paslauga yra aktyvi, naudokite šią komandą:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Įveskite naudotojo PIN kodą

    Vykdant „OpenVPN“ klientą reikia įvesti „Nitrokey“ PIN kodą:

    $ 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: ******
    

    Įspėjimas

    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)
    

    Kai kuriais atvejais terminale neprašoma įvesti PIN kodo. Viena iš apeičių būtų naudoti šią komandą prisijungimui su PIN kodu:

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

    Arba galite perkompiluoti OpenVPN klientą su išjungtu „systemd“ palaikymu, ir jis, kaip ir tikėtasi, paprašys nurodyti PIN kodą.

    Kitas variantas - prisijungti prie „OpenVPN“ instancijos naudojant „Viscosity“ klientą, kuris užtikrina geresnę naudotojo patirtį, ypač įvedant PIN kodą.