OpenVPN konfigurācija ar Easy-RSA

Nitrokey 3

Nitrokey Passkey

Nitrokey FIDO2

Nitrokey U2F

`Nitrokey U2F <x id=“14“></x><x id=“66“></x>

Nitrokey Pro 2

Nitrokey Start

Nitrokey Storage 2

Piezīme

Šī rokasgrāmata ir darba procesā, un tā tiks atjaunināta atbilstoši. Lūdzu, ņemiet vērā šo statusu.

Šajā rokasgrāmatā ir parādīts, kā konfigurēt OpenVPN klientus, lai pieteiktos, izmantojot Nitrokey Pro 2 vai Nitrokey Storage 2. Programmatūras atslēgu pārvaldībai mēs izmantosim Easy-RSA, utilītu, kas attīstījās līdztekus 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).

Mēs izmantosim Easy-RSA, jo šķiet, ka tas nodrošina zināmu elastību un ļauj pārvaldīt atslēgas, izmantojot ārējos PKI. Mēs to izmantosim serverī, lai izdotu parakstīšanas pieprasījumu, un atkārtosim to pašu procesu klientam. Sertifikātu parakstīšanas pieprasījumus parakstīs CA uz Nitorkey HSM un atkārtoti nosūtīs serverim un klientam.

Priekšnosacījumi

Šajā dokumentācijā mums būs nepieciešamas 3 dažādas mašīnas:

  • OpenVPN serveris (v. 2.5) uz Debian 10 (EC2 virtuālā mašīna - AWS)

  • OpenVPN klients (v. 2.4.9) Fedora 30 (vietējā datorā)

  • Sertifikātu iestāde būs pieejama no atsevišķas mašīnas ar Fedora 30 (vietējā mašīna).

Lai mijiedarbotos ar ierīcēm, mums būs nepieciešams OpenSC 0.20, kas instalēts klienta un CA ierīcē (vietējās iekārtās). Varat sekot norādījumiem, lai to iestatītu, kas sniegti šajā saitē (*Unix).

Lai lejupielādētu atkarības Fedora mašīnām, mēs varam šo instrukciju:

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

Debian Linux operētājsistēmai jaunākās OpenSC paketes ir pieejamas šeit.

Fiziskās atslēgas pārvaldībai mēs izmantosim šādus Nitrokeys:

Atgādinām, ka, lai izveidotu Nitrokey HSM 2 sertifikātu iestādi, varat sekot instrukcijām, kas pieejamas ` dokumentācijā <certificate-authority.html#sign-a-server-certificate>`_.

Varat arī iestatīt savu CA atsevišķā datorā vai izmantot OpenVPN pamācību, kas arī balstās uz Easy-RSA. Pēdējās 2 iespējas paļaujas uz programmatūras risinājumiem atslēgu pārvaldībai.


Servera puse

1. Instalējiet OpenVPN

  1. Vispirms ir jāiedarbina IP pārsūtīšana, rediģējot /etc/sysctl.conf failu.

    $ editor /etc/sysctl.conf
    
  2. Atceliet komentāru vai attiecīgi rediģējiet šādu rindu

    net.ipv4.ip_forward=1
    
  3. Pēc saglabāšanas aizveriet un ievadiet šo komandu

    $ sysctl -p
    

    Kad IP pārsūtīšana ir pabeigta, mums būs nepieciešams lejupielādēt jaunāko OpenvPN versiju mūsu Debian 10 serverim saskaņā ar šīm instrukcijām:

  4. Mainiet root un lejupielādējiet GPG atslēgu, kas parakstīja paketi.

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Pievienojiet atbilstošo OpenVPN pakotņu URL sources.list failā.

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

    Lejupielādējām OpenVPN 2.5, jo „paroles uzvednē“ ir nepieciešama vismaz OpenVPN versija 2.4.8, lai pieteiktos.

  6. Tālāk mēs lejupielādējam OpenVPN

    $ sudo apt install openvpn
    

    Ja vēlaties pārbaudīt versiju, to var izdarīt, izsaucot --version un izdrukājot:

    $ 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. Instalējiet Easy-RSA

Lai izveidotu PKI, mēs lejupielādēsim jaunāko Easy-RSA versiju servera un klienta datoros. Lai iegūtu jaunāko versiju, dodieties uz Releases lapu oficiālajā EasyRSA GitHub projektā, nokopējiet lejupielādes saiti uz failu, kas beidzas ar .tgz, un tad ielīmējiet to nākamajā komandā:

  1. Lejupielādēt jaunāko versiju

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

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

3. PKI izveide OpenVPN serverim

Pirms varat izveidot OpenVPN servera privāto atslēgu un sertifikātu, OpenVPN serverī ir jāizveido vietējais publiskās atslēgas infrastruktūras direktorijs. Šo direktoriju jūs izmantosiet, lai pārvaldītu servera un klientu sertifikātu pieprasījumus, nevis tieši CA serverī.

Lai OpenVPN serverī izveidotu PKI direktoriju, ir jāaizpilda fails ar nosaukumu vars ar noklusējuma vērtībām.

  1. Izveidot vars failu

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Kad fails ir atvērts, ielīmējiet šādas divas rindas

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Šīs ir vienīgās divas rindiņas, kas jums nepieciešamas šajā vars failā OpenVPN serverī, jo tas netiks izmantots kā sertifikātu iestāde. Tie nodrošinās, ka jūsu privātās atslēgas un sertifikātu pieprasījumi ir konfigurēti tā, lai izmantotu elipses līknes kriptogrāfiju (ECC) atslēgu ģenerēšanai un drošus parakstus jūsu klientiem un OpenVPN serverim.

    Attiecībā uz kriptogrāfisko algoritmu izvēli es ievēroju modeli, kas aprakstīts šajā pamācībā, un jūs varat tos pielāgot atbilstoši savām vajadzībām.

  3. PKI inicializēšana

    Kad esat aizpildījis vars failu, varat turpināt PKI direktorija izveidi. Lai to izdarītu, palaidiet easyrsa skriptu ar opciju init-pki:

    $ ./easyrsa init-pki
    

    Pēc tam, kad OpenVPN serverī esat inicializējis savu PKI, varat pāriet pie nākamā soļa, proti, OpenVPN servera sertifikāta pieprasījuma un privātās atslēgas izveides.

4. Izveidojiet server.req un server.key.

Tagad, kad OpenVPN serverī ir instalēti visi priekšnoteikumi, nākamais solis ir OpenVPN serverī ģenerēt atslēgu pāri, kas sastāv no privātās atslēgas (lai saglabātu slepenību) un sertifikāta parakstīšanas pieprasījuma (.csr).

Vispārīgi runājot, sistēmās, kurās mēs ģenerējam atslēgu un pieprasījumu, šie faili netiek šifrēti, izmantojot nopass argumentu, jo serverus parasti nepieciešams palaist bez paroles ievadīšanas. Tādējādi tiek ģenerēta nešifrēta atslēga, tāpēc uzmanīgi aizsargājiet tās piekļuvi un failu atļaujas.

Padoms

OpenVPN konfigurācijas piezīmes:

  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. Servera sertifikātam ir jābūt šādam:

  • keyUsage:  digitalSignature, keyEncipherment`

  • extendedKeyUsage: serverAuth`

  1. Servera parakstīšanas pieprasījuma izveide

    Pārejiet uz ~/easyrsa direktoriju savā OpenVPN serverī kā lietotājs, kas nav root lietotājs, un ievadiet šādas komandas:

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

    Tādējādi tiks izveidota servera privātā atslēga un sertifikāta pieprasījuma fails ar nosaukumu server.req.

    Kad sertifikāts ir parakstīts, pārsūtiet to atpakaļ uz OpenVPN serveri.

  2. Atslēgas kopēšana OpenVPN servera direktorijā

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

Pēc šo darbību veikšanas esat veiksmīgi izveidojis OpenVPN servera privāto atslēgu. Jūs arī esat izveidojis OpenVPN servera sertifikāta parakstīšanas pieprasījumu.

Padoms

Sertifikātu parakstīšanas pieprasījumu failu paplašinājumi

Faila paplašinājums, ko pieņem CA un HSM apmācība, norāda uz .csr faila izveidi, taču Easy-RSA izveido sertifikātu parakstīšanas pieprasījumus ar </x id="168"></x> paplašinājumu.

Abus paplašinājumus izmantosim pārmaiņus, vienlaikus pārliecinoties, ka mēs pārsūtām pareizos failus sertifikātu iestādei, un izveidosim galīgo sertifikātu ar .crt paplašinājumu.

Nākamajā šīs rokasgrāmatas sadaļā mēs parakstīsim .req failu ar mūsu CA, kas izvietota HSM 2 ierīcē. Šim nolūkam pieprasījumiem parakstīt izmantošu īpašu ierīci.

5. Parakstīt un saņemt server.crt`

Saskaņā ar turpmāk minētajiem norādījumiem server.req (vai </x>`server.csr) fails jāpārsūta uz CA sistēmu.

Pats pārsūtīšanas process nav saistīts ar drošību, tomēr ir lietderīgi pārbaudīt, vai saņemtais fails atbilst sūtītāja kopijai, ja transportēšana nav uzticama.

Lai veiktu šos soļus, es lielā mērā balstīšos uz šīm instrukcijām, lai parakstītu sertifikātu parakstīšanas pieprasījumus, tiklīdz mēs tos izveidojām ar Easy-RSA.

  1. Parakstiet server.req failu

    Lai parakstītu .req failu un nosūtītu to atpakaļ uz OpenVPN serveri, mēs izmantosim Opensc 0.20 nodrošinātos rīkus, lai piekļūtu HSM. Mēs pieņemam, ka esam pārsūtījuši failu no servera mašīnas uz CA mašīnu.

    Vispirms mēs sākam, pievienojot HSM Nitrokey, un ievadiet šo instrukciju, lai uzskaitītu pieejamos taustiņus.

    1. Pieejamo ierīču saraksta pieprasīšana

      $ p11tool --list-all
      

      (Obligāts solis) Ja sertifikātu ar CA parakstat pirmo reizi, iespējams, vēlēsieties iegūt CA privātās atslēgas URI no HSM un iekļaut to konfigurācijas failā.

      Piezīme

      Atslēgas URI jābūt šādā formātā:

      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. Izveidot openvpn/ direktoriju zem certificate-authority/.

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Parakstiet 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 faila atgūšana servera datorā

    1. Parakstīto sertifikātu pārsūtīšana uz serveri

      No CA datora nokopējiet failus server.crt un </x>`chain.crt uz OpenVPN serveri. Šajā piemērā mēs izmantosim scp komandu šādi:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Sertifikātu ievietošana servera direktorijā

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

      Brīdinājums

      CA sertifikāts un chain.crt.

      Iepriekš minētajā gadījumā CA atgriež parakstītu sever sertifikātu un iekļauj CA sertifikātu CA.crt, kas ir chain.crt fails. To var izdarīt, izmantojot nedrošu kanālu, tomēr klientam ieteicams apstiprināt, vai saņemtais <x id="239"></x id="239"></x> ir derīgs, ja transports nav uzticams.

      Ir iespējams pārdēvēt failu chain.crt failu uz </x>`CA.crt mērķa datorā, tomēr nākamajos norādījumos mēs izmantosim chain.crt.

6. OpenVPN servera konfigurēšana

Savienojumam, kas izmanto TLS, autentifikācijai ir nepieciešami vairāki sertifikāti un atslēgas. Tagad, kad esam tos izdevuši un parakstījuši, varam tos ievietot pareizajos direktorijos. Sertifikātu un atslēgu sadalījums, kam jāatrodas saknes direktorijā, ir šāds:

OpenVPN server

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

Tagad OpenVPN serverī varat izveidot konfigurācijas failu server.conf, izmantojot savu iecienītāko teksta redaktoru. Failu var konfigurēt atbilstoši jūsu vajadzībām, savukārt mēs pārliecināsimies, ka servera sertifikāta un atslēgas sadaļas ir jāmaina atbilstoši jūsu izvēlētajiem nosaukumiem jūsu parakstītajiem failiem:

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

Šeit ir konfigurācijas fails, ko varam izmantot šo norādījumu testēšanai:

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

Lai pārbaudītu, vai konfigurācija darbojas pareizi, varam izmantot šo komandu:

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

7. Palaidiet OpenVPN pakalpojumu serverī

Aktivizējiet OpenVPN pakalpojumu, pievienojot to systemctl, un palaidiet to, izmantojot šīs komandas:

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

Lai divreiz pārbaudītu, vai OpenVPN pakalpojums ir aktīvs, izmantojiet šo komandu:

$ sudo systemctl status openvpn@server

Šajā brīdī OpenVPN ir jābūt darbojošam.


Klienta puses konfigurācija

1. OpenVPN un Easy-RSA instalēšana

  1. Instalējiet programmatūru

    Mēs varam tieši izmantot dnf install, lai instalētu OpenVPN 2.4.9 un Easy-RSA 3.0.7.

    $ sudo dnf install openvpn easy-rsa
    
  2. Pēc tam kā ne-root izveidojam direktoriju Easy RSA ar nosaukumu Easy-RSA.

    $ mkdir ~/easyrsa
    
  3. Un izveidojiet saiti ar tikko instalēto pakotni Easy RSA.

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

2. Izveidojiet OpenVPN klienta PKI

Tādā pašā veidā, kādā mēs izveidojām PKI OpenVPN serverī, mēs izveidosim PKI, izmantojot Easy-RSA klienta pusē.

3. Izveidojiet client.req un client.key.

Tādā pašā veidā, kādā mēs izsniedzām atslēgu pāri serverī, mēs ģenerējam atslēgu pāri klientam, kas sastāv no </x id="126"></x> faila un client.key faila. Pēdējais no šiem failiem klienta datorā ir jāglabā slepenībā.

4. Parakstiet client.req un izdodiet client.crt failu.

Lai pārsūtītu client.req failu uz CA datoru, izmantosim to pašu metodi, ko izmantojām ``</x id=“103“></x id=“113“></x>` faila gadījumā.

Pēc pārsūtīšanas CA datorā mēs parakstām sertifikāta parakstīšanas pieprasījuma failu, izmantojot šo komandu.

$ 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ēt client.crt uz Nitrokey no CA iekārtas.

Pēc client.crt faila izveides pievienojam Nitrokey Pro 2 ierīci CA datorā un importējam </x>`.crt failu Pro 2 ierīcē, izmantojot šo komandu:

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

Izmantojot šo komandu, varat pārbaudīt, vai atslēga ir efektīvi saglabāta Nitrokey, izmantojot šo komandu:

$ pkcs15-tool -c

Vai arī

$ pkcs11-tool --list-objects

Vairāk komandu var atrast OpenSC wiki.

6. chain.crt faila atgūšana no CA iekārtas.

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. Konfigurējiet klientu mijiedarbībai ar Nitrokey

Tagad, atgriežoties klienta datorā, mēs pievienosim Nitrokey Pro un izmantosim to, lai izveidotu VPN savienojumu ar serveri. Vispārīgi runājot, savienojumam, kas izmanto TLS, autentifikācijai ir nepieciešami vairāki sertifikāti un atslēgas:

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

Šajā rokasgrāmatā mēs varam izmantot šādu client.conf failu un attiecīgi pievienot tam nepieciešamās opcijas:

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. Noteikt pareizo objektu

    Katrs PKCS#11 nodrošinātājs var atbalstīt vairākas ierīces. Lai apskatītu pieejamo objektu sarakstu, varat izmantot šādu komandu:

    $ 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
    

    Katram sertifikāta/privātā atslēgas pārim ir unikāla Serialized id virkne. Konfigurācijas failā jānorāda pieprasītā sertifikāta serializētā id virkne. To varam izdarīt, pievienojot pkcs11-id opciju, izmantojot vienpēdiņas.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Iegūtā serializētā ID pievienošana konfigurācijas datnei

    Izmantojot savu iecienītāko teksta redaktoru, atveriet server.conf failu un pievienojiet tam šādas rindiņas, vienlaikus rūpējoties par to, lai tiktu ievietotas savas 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'
    

    Papildu iestatījumiem, kas saistīti ar OpenVPN autentifikāciju, varat pievienot arī dažas rindas, lai apstrādātu atslēgu pārvaldību, lai gan tas nav obligāti.

    Piezīme

    Noklikšķiniet, lai apskatītu kodu

    # 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
    

    Fakultatīvs solis

    Ja nepieciešams pārbaudīt konfigurāciju ar un bez Nitrokey marķiera, varat pievienot rindas tajā pašā client.conf un komentēt/nekomentēt attiecīgās rindas atbilstoši savām vajadzībām:

    Piezīme

    Noklikšķiniet, lai apskatītu kodu

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. OpenVPN klienta konfigurēšana

    Galīgajam konfigurācijas failam client.conf jāizskatās šādi:

    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)

    Lai izveidotu rokas satricinājumu, ir jākonfigurē OpenVPN iekļautais OpenSSL.

    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

    Ar šo modifikāciju jums nebūs kļūdas, kā ziņots šeit, šeit un šeit.

  5. Zināmās problēmas

    Ir zināmas dažas problēmas, kas saistītas ar OpenVPN pieteikšanos ar OpenSC. Lūdzu, iepazīstieties ar šiem jautājumiem šeit.

8. OpenVPN klienta palaišana

  1. OpenVPN pakalpojuma palaišana klientā

    Aktivizējiet OpenVPN pakalpojumu un palaidiet to, izmantojot šīs komandas:

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

    Lai vēlreiz pārbaudītu, vai OpenVPN pakalpojums ir aktīvs, izmantojiet šo komandu:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Ievadiet savu lietotāja PIN kodu

    Izpildot OpenVPN klientu, ir jāievada Nitrokey PIN kods:

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

    Brīdinājums

    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)
    

    Dažos ziņotajos gadījumos terminālī netiek pieprasīts ievadīt PIN kodu. Viens no risinājumiem būtu izmantot šo komandu, lai pieteiktos ar PIN kodu:

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

    Alternatīvi varat pārkompilēt OpenVPN klientu ar atspējotu systemd atbalstu, un tas pieprasīs PIN kodu, kā paredzēts.

    Vēl viena iespēja būtu pieteikties OpenVPN instancei, izmantojot Viscosity klientu, kas nodrošina labāku lietotāja pieredzi, jo īpaši attiecībā uz PIN ievadīšanu.