OpenVPNi konfigureerimine Easy-RSAga#

Märkus

See juhend on pooleli ja seda ajakohastatakse vastavalt. Palun võtke seda staatust arvesse.

See juhend näitab, kuidas konfigureerida OpenVPN-kliente sisselogimiseks, kasutades Nitrokey Pro 2 või Nitrokey Storage 2. Tarkvaralise võtmehalduse jaoks kasutame Easy-RSA utiliiti, mis on arenenud koos OpenVPNiga.

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).

Me kasutame Easy-RSA-d, sest see näib pakkuvat teatavat paindlikkust ja võimaldab võtmehaldust väliste PKIde kaudu. Me kasutame seda serveris allkirjastamistaotluse esitamiseks ja kordame sama protsessi kliendil. Sertifikaadi allkirjastamistaotlused allkirjastab CA Nitorkey HSMis ja edastab need uuesti serverile ja kliendile.

Eeltingimused#

Järgnevas dokumentatsioonis vajame 3 erinevat masinat, mis on järgmised:

  • OpenVPN server (v. 2.5) Debian 10 peal (EC2 virtuaalne masin - AWS)

  • OpenVPN klient (v. 2.4.9) Fedora 30 (kohalik masin)

  • Sertifitseerimisasutusele pääseb ligi Fedora 30-ga varustatud eraldiseisvast masinast (kohalik masin).

Seadmetega suhtlemiseks vajame OpenSC 0.20, mis on paigaldatud kliendile ja CA masinale (kohalikele masinatele). Selle seadistamise juhiseid saate järgida tema lingil (*Unix).

Sõltuvuste allalaadimiseks Fedora masinatele saame selle juhise:

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

Debian Linuxi jaoks on uuemad OpenSC paketid saadaval kuskil.

Me kasutame füüsilise võtme haldamiseks järgmisi Nitrokeys’e:

Meeldetuletuseks, et Nitrokey HSM 2 sertifikaadibüroo loomiseks võite järgida dokumentatsioonis ` olevaid juhiseid <certificate-authority.html#sign-a-server-certificate>`_.

Alternatiivina võite luua oma CA ` eraldi masinas <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04>`__ või kasutada OpenVPNi õpetust, mis tugineb samuti Easy-RSA. Viimased 2 varianti tuginevad võtmehalduse tarkvaralahendustele.


Serveri poolel#

1. Paigaldage OpenVPN#

  1. Esmalt tuleb lubada IP Forwarding, muutes /etc/sysctl.conf faili.

    $ editor /etc/sysctl.conf
    
  2. Tühjendage või redigeerige vastavalt järgmine rida

    net.ipv4.ip_forward=1
    
  3. Pärast salvestamist sulgege see ja sisestage järgmine käsk

    $ sysctl -p
    

    Kui IP-i suunamine on tehtud, tuleb meie Debian 10 serverile alla laadida OpenvPN-i uusim versioon vastavalt toodud juhistele:

  4. Vahetage administraatoriks ja laadige alla GPG võti, mis on paketi allkirjastanud.

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Lisage sobivate OpenVPN pakettide URL aadressid faili sources.list.

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

    Me laadisime alla OpenVPN 2.5, kuna „password prompt“ nõuab sisselogimiseks vähemalt OpenVPN versiooni 2.4.8.

  6. Järgmisena laadime alla OpenVPN

    $ sudo apt install openvpn
    

    Kui soovite kontrollida versiooni, on võimalik, kui kutsute --version ja trükkida järgmine:

    $ 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. Paigaldage Easy-RSA#

PKI loomiseks laadime Easy-RSA uusima versiooni alla serverisse ja kliendimasinatesse. Viimase versiooni saamiseks minge ametliku EasyRSA GitHub projekti Releases lehele, kopeerige faili allalaadimislink, mis lõpeb .tgz, ja seejärel kleepige see järgnevasse käsku:

  1. Lae alla uusim versioon

    $ cd ~
    $ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
    
  2. Väljavõtta tarball

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

3. Luua PKI OpenVPN-serveri jaoks#

Enne OpenVPN-serveri privaatvõtme ja sertifikaadi loomist peate looma OpenVPN-serverisse kohaliku avaliku võtme infrastruktuuri kataloogi. Seda kataloogi kasutate serveri ja klientide sertifikaaditaotluste haldamiseks, selle asemel, et teha neid otse CA-serveris.

PKI kataloogi loomiseks OpenVPN serveris peate täitma faili nimega vars mõningate vaikeväärtustega.

  1. Loo vars<x> faili.

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Kui fail on avatud, kleepige järgmised kaks rida sisse

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Need on ainsad kaks rida, mida vajate selles vars failis oma OpenVPN serveris, kuna seda ei kasutata sertifikaadiasutusena. Nad tagavad, et teie privaatvõtmed ja sertifikaaditaotlused on konfigureeritud kasutama Elliptic Curve Cryptography (ECC) võtmete ja turvaliste allkirjade loomiseks teie klientide ja OpenVPN-serveri jaoks.

    Mis puutub krüptograafiliste algoritmide valikusse, siis ma järgin tema õpetuse mudelit, ja te võite neid kohandada vastavalt oma konkreetsetele vajadustele.

  3. PKI initsialiseerimine

    Kui olete täitnud vars faili, võite jätkata PKI kataloogi loomisega. Selleks käivitage skript easyrsa koos init-pki valikuga:

    $ ./easyrsa init-pki
    

    Kui olete OpenVPN-serveri PKI initsialiseerinud, olete valmis liikuma järgmise sammu juurde, milleks on OpenVPN-serveri sertifikaaditaotluse ja privaatvõtme loomine.

4. Loo server.req ja server.key.#

Nüüd, kui teie OpenVPN serverile on paigaldatud kõik eeldused, on järgmine samm luua võtmepaar, mis koosneb privaatvõtmest (mida tuleb hoida salajas) ja sertifikaadi allkirjastamise taotlusest (.csr) teie OpenVPN serverile.

Üldiselt on süsteemides, kus me genereerime võtme ja taotluse, need failid jäetakse krüpteerimata, kasutades argumenti nopass, kuna serverid peavad tavaliselt käivituma ilma salasõna sisestamata. See genereerib krüptimata võtme, seega pidage silmas kaitske selle juurdepääsu ja failiõigusi hoolikalt.

Nõuanne

OpenVPNi konfiguratsioonimärkused:

  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. Serveri sertifikaat peaks olema järgmine:

  • keyUsage:  digitalSignature, keyEncipherment<x>

  • extendedKeyUsage: serverAuth<x>

  1. Luua serverile allkirjastamistaotlus

    Navigeerige oma OpenVPN-serveri kataloogi ~/easyrsa oma mitte-root-kasutajana ja sisestage järgmised käsud:

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

    Sellega luuakse serveri jaoks privaatne võti ja sertifikaaditaotluse fail nimega server.req.

    Kui teil on allkirjastatud sertifikaat, siis edastate selle tagasi OpenVPN-serverisse.

  2. Kopeerige võti OpenVPN serveri kataloogi

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

Pärast nende sammude lõpuleviimist olete edukalt loonud OpenVPN-serveri privaatvõtme. Samuti olete loonud OpenVPN-serveri jaoks sertifikaadi allkirjastamise taotluse.

Nõuanne

Sertifikaadi allkirjastamise taotluste faililaiendid

CA ja HSMi juhendmaterjalis kasutatav faililaiend viitab .csr faili loomisele, kuid Easy-RSA loob sertifikaadi allkirjastamise taotlused laiendiga .req.

Kasutame mõlemat laiendust vaheldumisi, tagades samas, et edastame sertifikaadiasutusele õiged failid, ja genereerime lõpliku sertifikaadi laiendiga .crt.

Käesoleva juhendi järgmises osas allkirjastame .req faili meie CA-ga, mis on paigaldatud HSM 2 seadmesse. Selleks kasutan taotluste allkirjastamiseks spetsiaalset masinat.

5. Allkiri ja tagasivõtmine server.crt#

Järgnevad juhised nõuavad server.req (või server.csr) faili ülekandmist CA-süsteemi.

Ülekanne ise ei ole turvatundlik, kuigi on mõistlik kontrollida, kas vastuvõetud fail vastab saatja koopiale, kui transport ei ole usaldusväärne.

Nende sammude läbimiseks toetun ma ulatuslikult toodud juhistele, et allkirjastada sertifikaadi allkirjastamise taotlusi, kui me need Easy-RSA-ga genereerisime.

  1. Allkirjastage server.req faili

    Lokaalses masinas, mis on ette nähtud HSMile juurdepääsuks, kasutame Opensc 0.20 poolt pakutavaid vahendeid, et allkirjastada .req fail ja saata see tagasi OpenVPN-serverisse. Eeldame, et oleme faili edastanud serveri masinast CA masinasse.

    Kõigepealt alustame HSM Nitrokey ühendamisest ja sisestame selle juhise, et loetleda olemasolevad võtmed.

    1. Kättesaadavate seadmete loendi päring

      $ p11tool --list-all
      

      (Vajalik samm) Kui allkirjastate sertifikaadi esmakordselt CAga, võiksite HSMist saada CA privaatvõtme URI ja lisada selle konfiguratsioonifaili.

      Märkus

      Võtme URI peaks olema sellisel kujul:

      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. Loo openvpn/ kataloogi certificate-authority/ alla.

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Allkiri server.req<x>

      $ 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. Tooge server.crt faili serverisse masinasse.

    1. Viige allkirjastatud sertifikaadid serverisse

      Kopeerige CA masinast OpenVPN-serverisse failid server.crt ja chain.crt. Selles näites kasutame käsku scp<x> järgmiselt:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Asetage sertifikaadid serveri kataloogi

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

      Hoiatus

      CA sertifikaat ja chain.crt

      Ülaltoodud juhul tagastab CA allkirjastatud sever-sertifikaadi ja sisaldab CA sertifikaati CA.crt, mis on chain.crt fail. Seda võib teha üle ebaturvalise kanali, kuigi kliendil soovitatakse kinnitada, kas saadud chain.crt on kehtiv, kui transport on ebaturvaline.

      Faili chain.crt on võimalik sihtmasinal ümber nimetada failiks CA.crt, aga me kasutame järgmistes juhistes chain.crt.

6. Konfigureerige OpenVPN server#

TLS-i kasutav ühendus nõuab autentimiseks mitu sertifikaati ja võtit. Nüüd, kui me need välja andsime ja allkirjastasime, võime need õigetesse kataloogidesse paigutada. Sertifikaatide ja võtmete jaotus, mis peavad asuma juurkataloogis, on järgmine:

OpenVPN server

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

Nüüd saate oma OpenVPN-serveris luua oma lemmiktekstiredaktoriga konfiguratsioonifaili server.conf. Faili saab konfigureerida vastavalt teie vajadustele, kusjuures me muudame kindlasti serveri sertifikaadi ja võtme sektsioonid vastavalt teie poolt valitud nimedele teie allkirjastatud failidele:

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

Siin on konfiguratsioonifail, mida saame kasutada nende juhiste testimiseks:

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

Selleks, et testida, kas konfiguratsioon toimib korralikult, võime kasutada seda käsku:

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

7. Käivitage OpenVPN teenus serveris#

Lubage OpenVPN teenus, lisades selle systemctl-i ja käivitage see nende käskude abil:

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

OpenVPN-teenuse aktiivsuse kahekordseks kontrollimiseks kasutage seda käsku:

$ sudo systemctl status openvpn@server

OpenVPN peaks sel hetkel töötama.


Kliendipoolne konfiguratsioon#

1. Paigaldage OpenVPN ja Easy-RSA#

  1. Paigaldage tarkvara

    Me võime kasutada otse dnf install OpenVPN 2.4.9 ja Easy-RSA 3.0.7 installimiseks.

    $ sudo dnf install openvpn easy-rsa
    
  2. Seejärel loome mitte-root’ina kataloogi Easy RSA jaoks nimega Easy-RSA

    $ mkdir ~/easyrsa
    
  3. Ja ühendage see Easy RSA paketiga, mille me just paigaldasime.

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

2. Luua PKI OpenVPN-kliendi jaoks#

Samamoodi, nagu me lõime PKI OpenVPN-i serveris, loome PKI, kasutades Easy-RSA-d kliendi poolel.

3. Loo client.req ja client.key.#

Samamoodi, nagu me väljastasime võtmepaari Severile, genereerime kliendile võtmepaari, mis koosneb client.req failist ja client.key failist. Viimast tuleb hoida kliendi masinas salajas.

4. Kirjutage client.req ja väljastage client.crt fail.#

Faili client.req üleandmiseks CA masinale kasutame sama meetodit, mida kasutasime faili server.req puhul.

Kui see on üle kantud, allkirjastame sertifikaadi allkirjastamise taotluse faili CA masinas selle käsuga

$ 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. Impordi client.crt Nitrokey masinale CA masinast.#

Pärast client.crt faili loomist ühendame Nitrokey Pro 2 seadme CA masinaga ja impordime .crt Pro 2 seadmesse selle käsuga:

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

Selle käsu abil saate näha, kas võti on Nitrokey’s tõhusalt salvestatud:

$ pkcs15-tool -c

Või alternatiivselt

$ pkcs11-tool --list-objects

Rohkem käsklusi leiate OpenSC wiki.

6. Hangi chain.crt fail CA masinast.#

Samas hoiame client.crtstored on the nitrokey Pro 2 device, we must retrieve the chain.crt faili kliendi masinas ja salvestame selle vastavasse kataloogi. Võime kasutada scp nagu käesoleva juhendi serverite osas selgitatud meetodil.

7. Konfigureerige klient Nitrokey’ga suhtlemiseks.#

Nüüd tagasi kliendi masinas, ühendame Nitrokey Pro ja kasutame seda VPN-ühenduse loomiseks serveriga. Üldiselt nõuab TLS-i kasutav ühendus autentimiseks mitut sertifikaati ja võtit:

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

Selle juhendi jaoks võime kasutada järgmist client.conf<x> faili ja lisada sinna vastavalt vajalikud valikud:

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. Määrake õige objekt

    Iga PKCS#11 teenusepakkuja võib toetada mitut seadet. Kättesaadavate objektide nimekirja vaatamiseks saate kasutada järgmist käsku:

    $ 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
    

    Igal sertifikaadi/privaatvõtme paaril on unikaalne Serialized id string. Konfiguratsioonifailis tuleb määrata taotletava sertifikaadi id-stringi jada. Seda saame teha, lisades pkcs11-id valiku, kasutades ühekordseid jutumärke.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Lisada saadud serialiseeritud ID konfiguratsioonifaili

    Kasutades oma lemmiktekstiredaktorit, avage fail server.conf ja lisage järgmised read, hoolitsedes samas selle eest, et sisestada oma 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'
    

    OpenVPN-iga seotud täiendavate seadete autentimisega seoses võite lisada ka paar rida võtmehalduse käsitlemiseks, kuigi see on vabatahtlik.

    Märkus

    Koodide vaatamiseks klõpsake

    # 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
    

    Vabatahtlik samm

    Kui teil on vaja testida konfiguratsiooni koos ja ilma Nitrokey märgiga, võite lisada ridu samasse client.conf ja kommenteerida/mittekommenteerida asjaomaseid ridu vastavalt oma vajadustele:

    Märkus

    Koodide vaatamiseks klõpsake

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. OpenVPN-kliendi konfigureerimine

    Lõplik konfiguratsioonifail client.conf peaks välja nägema selline:

    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)

    Kätevahetuse loomiseks peate konfigureerima OpenVPNi juurde kuuluva OpenSSL-i.

    Looge kataloog ssl aadressil C:\Program Files\OpenVPN ja looge fail openssl.cnf järgmise sisuga :

    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

    Selle muudatusega ei ole teil viga, nagu on teatatud siin, siin ja siin.

  5. Teadaolevad probleemid

    OpenVPN-i sisselogimisega on teadaolevalt seotud mõned probleemid OpenSC-ga. Palun tutvuge nende probleemidega kuskil.

8. Käivitage OpenVPN-klient#

  1. Käivitage OpenVPN teenus kliendil

    Lubage OpenVPN teenus ja käivitage see nende käskude abil:

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

    OpenVPN-teenuse aktiivsuse kontrollimiseks kasutage seda käsku:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Sisestage oma kasutaja PIN-kood

    OpenVPN-kliendi käivitamisel tuleb sisestada Nitrokey PIN-kood:

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

    Hoiatus

    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)
    

    Mõnel teatatud juhul ei küsi terminalis PIN-koodi. Üks lahendus oleks kasutada seda käsku PIN-koodiga sisselogimiseks:

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

    Alternatiivina võite rekompileerida OpenVPN kliendi, mille systemd-tugi on välja lülitatud, ja see küsib PIN-koodi ootuspäraselt.

    Teine võimalus on logida OpenVPNi instantsi sisse Viscosity kliendiga, mis pakub paremat kasutajakogemust, eriti PIN-koodi sisestamisel.