OpenVPN-konfigurointi Easy-RSA:n avulla

Muista

Tämä opas on keskeneräinen, ja sitä päivitetään säännöllisesti. Ota tämä tila huomioon.

Tässä oppaassa näytetään, miten OpenVPN-asiakkaat määritetään kirjautumaan sisään Nitrokey Pro 2 tai Nitrokey Storage 2 avulla. Ohjelmistoavainten hallintaan käytämme Easy-RSA -apuohjelmaa, joka on kehittynyt OpenVPN:n rinnalla.

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

Käytämme Easy-RSA:ta, koska se näyttää tarjoavan jonkin verran joustavuutta ja mahdollistaa avainten hallinnan ulkoisten PKI:iden kautta. Käytämme sitä palvelimella allekirjoituspyynnön tekemiseen ja toistamme saman prosessin asiakkaalla. Varmenteen allekirjoituspyynnöt allekirjoittaa Nitorkey HSM:ssä oleva varmentaja, ja ne lähetetään uudelleen palvelimelle ja asiakkaalle.

Edellytykset

Seuraavassa dokumentaatiossa tarvitsemme 3 eri konetta seuraavasti:

  • OpenVPN-palvelin (v. 2.5) Debian 10:llä (EC2-virtuaalikone - AWS).

  • OpenVPN-asiakasohjelma (v. 2.4.9) Fedora 30:ssä (paikallinen kone).

  • Varmenteiden myöntäjään pääsee käsiksi Fedora 30:llä varustetusta erillisestä koneesta (paikallinen kone).

Jotta voimme olla vuorovaikutuksessa laitteiden kanssa, tarvitsemme OpenSC 0.20 asennettuna asiakas- ja CA-koneeseen (paikalliset koneet). Voit seurata ohjeita sen asentamiseksi tämän linkin (*Unix) kautta.

Voit ladata riippuvuudet Fedora-koneisiin voimme tämän ohjeen:

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

Debian Linuxille uudemmat OpenSC-paketit ovat saatavilla täältä.

Käytämme fyysisten avainten hallintaan seuraavia Nitrokeys-menetelmiä:

Muistutuksena, että voit rakentaa varmenteiden myöntäjän Nitrokey HSM 2:een noudattamalla dokumentaatiossa olevia ohjeita.

Vaihtoehtoisesti voit perustaa oman CA:n erilliselle koneelle tai käyttää OpenVPN-opasohjelmaa, joka perustuu myös Easy-RSA. Kaksi viimeistä vaihtoehtoa luottavat ohjelmistoratkaisuihin avainten hallinnassa.


Palvelimen puolella

1. Asenna OpenVPN

  1. Ensin meidän on otettava IP-toimintojen välitys käyttöön muokkaamalla /etc/sysctl.conf-tiedostoa.

    $ editor /etc/sysctl.conf
    
  2. Poista kommentti tai muokkaa vastaavasti seuraavaa riviä

    net.ipv4.ip_forward=1
    
  3. Sulje se tallennuksen jälkeen ja anna tämä komento

    $ sysctl -p
    

    Kun IP:n välitys on tehty, meidän on ladattava OpenvPN:n uusin versio Debian 10 -palvelimellemme ` näiden ohjeiden <https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos>`__ mukaisesti:

  4. Vaihda pääkäyttäjäksi ja lataa GPG-avain, jolla paketti on allekirjoitettu.

    $ sudo -s
    # wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
    
  5. Lisää asianmukaisten OpenVPN-pakettien URL-osoitteet tiedostoon sources.list.

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

    Latasimme OpenVPN 2.5:n, koska ”salasanakysely” vaatii vähintään OpenVPN version 2.4.8 kirjautumista varten.

  6. Seuraavaksi lataamme OpenVPN:n

    $ sudo apt install openvpn
    

    Jos haluat tarkistaa version, se on mahdollista kutsumalla --version ja tulostamalla seuraavat:

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

PKI:n rakentamiseksi lataamme Easy-RSA:n uusimman version palvelin- ja asiakaskoneisiin. Uusimman version hankkimiseksi siirry virallisen EasyRSA GitHub -projektin Releases-sivulle, kopioi latauslinkki tiedostoon, jonka pääte on .tgz, ja liitä se seuraavaan komentoon:

  1. Lataa uusin versio

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

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

3. Luo PKI OpenVPN-palvelimelle

Ennen kuin voit luoda OpenVPN-palvelimen yksityisen avaimen ja varmenteen, sinun on luotava paikallinen Public Key Infrastructure -hakemisto OpenVPN-palvelimelle. Käytät tätä hakemistoa palvelimen ja asiakkaiden varmennepyyntöjen hallintaan sen sijaan, että tekisit ne suoraan CA-palvelimelle.

Jotta voit rakentaa PKI-hakemiston OpenVPN-palvelimellesi, sinun on täytettävä tiedosto nimeltä vars joillakin oletusarvoilla.

  1. Luo tiedosto vars.

    $ touch ~/easyrsa/vars
    $ cd easyrsa/
    $ editor vars
    
  2. Kun tiedosto on avattu, liitä seuraavat kaksi riviä tiedostoon

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    Nämä ovat ainoat kaksi riviä, joita tarvitset tässä vars-tiedostossa OpenVPN-palvelimellasi, koska sitä ei käytetä varmenteiden myöntäjänä. Ne varmistavat, että yksityiset avaimesi ja varmennepyyntösi on konfiguroitu käyttämään Elliptic Curve Cryptography (ECC) -tekniikkaa avainten ja turvallisten allekirjoitusten luomiseen asiakkaillesi ja OpenVPN-palvelimelle.

    Mitä tulee kryptografisten algoritmien valintaan, noudatan tämän oppikirjan mallia, ja voit muokata niitä omien tarpeidesi mukaan.

  3. PKI:n alustaminen

    Kun olet täyttänyt tiedoston vars, voit jatkaa PKI-hakemiston luomista. Suorita easyrsa-skripti init-pki-optiolla:

    $ ./easyrsa init-pki
    

    Kun olet alustanut PKI:n OpenVPN-palvelimella, voit siirtyä seuraavaan vaiheeseen eli OpenVPN-palvelimen varmennepyynnön ja yksityisen avaimen luomiseen.

4. Luo server.req ja server.key.

Nyt kun OpenVPN-palvelimellesi on asennettu kaikki ennakkoedellytykset, seuraava vaihe on luoda avainpari, joka koostuu yksityisestä avaimesta (joka on pidettävä salassa) ja Certificate Signing Request (.csr) OpenVPN-palvelimellesi.

Yleisesti ottaen järjestelmissä, joissa luodaan avain ja pyyntö, nämä tiedostot jätetään salaamattomiksi käyttämällä nopass-argumenttia, koska palvelimet on yleensä käynnistettävä ilman salasanan syöttöä. Tämä tuottaa salakirjoittamattoman avaimen, joten muista suojata sen käyttö- ja tiedosto-oikeudet huolellisesti.

Vihje

OpenVPN:n konfigurointiohjeita:

  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. Palvelinvarmenteessa on oltava seuraavat ominaisuudet:

  • keyUsage:  digitalSignature, keyEncipherment`

  • ``extendedKeyUsage: serverAuth``extendedKeyUsage: serverAuthextendedKeyUsage: serverAuth`

  1. Luo palvelimen allekirjoituspyyntö

    Siirry OpenVPN-palvelimen ~/easyrsa-hakemistoon ei-root-käyttäjänä ja kirjoita seuraavat komennot:

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

    Tämä luo palvelimelle yksityisen avaimen ja varmennepyyntötiedoston nimeltä server.req.

    Kun sinulla on allekirjoitettu varmenne, siirrät sen takaisin OpenVPN-palvelimelle.

  2. Kopioi avain OpenVPN-palvelimen hakemistoon.

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

Kun olet suorittanut nämä vaiheet, olet onnistuneesti luonut yksityisen avaimen OpenVPN-palvelimelle. Olet myös luonut OpenVPN-palvelimen varmenteen allekirjoituspyynnön.

Vihje

Varmenteen allekirjoituspyyntöjen tiedostopäätteet

CA:n ja HSM:n opetusohjelmassa käytetty tiedostopääte viittaa .csr-tiedoston luomiseen, mutta Easy-RSA luo varmenteen allekirjoituspyynnöt, joiden tiedostopääte on .req.

Käytämme molempia laajennuksia vaihdellen ja varmistamme samalla, että siirretään oikeat tiedostot varmennepalveluun, ja luomme lopullisen varmenteen, jolla on .crt -laajennus.

Tämän oppaan seuraavassa osassa allekirjoitamme .req-tiedoston HSM 2 -laitteeseen asennetun CA:n kanssa. Tätä tarkoitusta varten käytän erillistä konetta pyyntöjen allekirjoittamiseen.

5. Allekirjoitus ja haku server.crt`

Seuraavat ohjeet edellyttävät server.req (tai server.csr) tiedoston siirtämistä CA-järjestelmään.

Siirto itsessään ei ole tietoturva-altis, mutta on viisasta tarkistaa, että vastaanotettu tiedosto vastaa lähettäjän kopiota, jos siirto on epäluotettava.

Näiden vaiheiden läpikäymisessä luotan laajalti näihin ohjeisiin allekirjoittaakseni varmenteen allekirjoituspyynnöt, kun olemme luoneet ne Easy-RSA:lla.

  1. Allekirjoita server.req tiedosto

    HSM:n käyttöön tarkoitetulla paikallisella koneella käytämme Opensc 0.20:n tarjoamia työkaluja allekirjoittaaksemme .req-tiedoston ja lähetämme sen takaisin OpenVPN-palvelimelle. Oletamme, että olemme siirtäneet tiedoston palvelinkoneelta CA-koneelle.

    Aloitamme ensin liittämällä HSM Nitrokey -avaimen ja syöttämällä tämän ohjeen käytettävissä olevien avainten luetteloimiseksi.

    1. Kysy käytettävissä olevien laitteiden luetteloa

      $ p11tool --list-all
      

      (Vaadittu vaihe) Jos allekirjoitat varmenteen ensimmäistä kertaa varmentajan kanssa, saatat haluta hakea varmentajan yksityisen avaimen URI:n HSM:stä ja sisällyttää sen asetustiedostoon.

      Muista

      Avaimen URI:n on oltava tässä muodossa:

      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. Luo openvpn/-hakemisto alle certificate-authority/.

      $ mkdir/opt/certificate-authority/
      $ cd /opt/certificate-authority/
      
    3. Allekirjoita 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. Hae server.crt tiedosto palvelinkoneelle.

    1. Siirrä allekirjoitetut varmenteet palvelimelle

      Kopioi CA-koneelta tiedostot server.crt ja chain.crt OpenVPN-palvelimelle. Tässä esimerkissä käytämme komentoa scp seuraavasti:

      $ scp openvpn/{server.crt,chain.crt} admin@your_openvpnserver_ip:/tmp
      
    2. Aseta varmenteet palvelimen hakemistoon

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

      Varoitus

      CA-varmenne ja chain.crt

      Edellä esitetyssä tapauksessa varmentaja palauttaa allekirjoitetun sever-varmenteen ja sisältää varmentajan varmenteen CA.crt, joka on chain.crt-tiedosto. Tämä voidaan tehdä turvattoman kanavan kautta, mutta asiakasta kehotetaan kuitenkin varmistamaan, onko vastaanotettu chain.crt kelvollinen, jos siirto on epäluotettava.

      Tiedosto chain.crt on mahdollista nimetä uudelleen CA.crt-tiedostoksi kohdekoneella, käytämme kuitenkin chain.crt seuraavissa ohjeissa.

6. Määritä OpenVPN-palvelin

TLS:ää käyttävä yhteys vaatii useita varmenteita ja avaimia todennusta varten. Nyt kun olemme myöntäneet ja allekirjoittaneet ne, voimme sijoittaa ne oikeisiin hakemistoihin. Jako varmenteista ja avaimista, joiden on sijaittava juurihakemistossa, on seuraava:

OpenVPN server

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

OpenVPN-palvelimellasi voit nyt luoda konfiguraatiotiedoston server.conf suosikkitekstieditorillasi. Tiedosto voidaan konfiguroida tarpeidesi mukaan, ja samalla varmistamme, että palvelinvarmenteen ja avaimen osiot muutetaan niiden nimien mukaan, jotka valitsit allekirjoittamillesi tiedostoille:

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

Tässä on asetustiedosto, jota voimme käyttää näiden ohjeiden testaamiseen:

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

Voimme testata, toimiiko kokoonpano oikein, käyttämällä tätä komentoa:

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

7. Käynnistä OpenVPN-palvelu palvelimella

Ota OpenVPN-palvelu käyttöön lisäämällä se systemctl:ään ja käynnistä se näillä komennoilla:

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

Voit tarkistaa, onko OpenVPN-palvelu aktiivinen, käyttämällä tätä komentoa:

$ sudo systemctl status openvpn@server

OpenVPN:n pitäisi olla käynnissä tässä vaiheessa.


Asiakaspuolen konfigurointi

1. Asenna OpenVPN ja Easy-RSA

  1. Asenna ohjelmisto

    Voimme käyttää suoraan dnf install asentaaksemme OpenVPN 2.4.9 ja Easy-RSA 3.0.7.

    $ sudo dnf install openvpn easy-rsa
    
  2. Sitten luodaan ei-root-hakemisto Easy RSA:lle nimellä Easy-RSA`.

    $ mkdir ~/easyrsa
    
  3. Ja linkitä se juuri asentamaamme Easy RSA -pakettiin.

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

2. Luo PKI OpenVPN-asiakkaalle.

Samalla tavalla kuin loimme PKI:n OpenVPN-palvelimelle, luomme PKI:n Easy-RSA:n avulla asiakkaan puolelle.

3. Luo client.req ja client.key.

Samalla tavalla kuin annoimme avainparin palvelimelle, luomme asiakkaalle avainparin, joka koostuu tiedostosta client.req ja tiedostosta client.key. Jälkimmäinen on pidettävä salassa asiakaskoneella.

4. Allekirjoita client.req ja anna client.crt tiedosto.

Siirtääksemme tiedoston client.req CA-koneelle, käytämme samaa menetelmää kuin tiedoston server.req kohdalla.

Kun varmenne on siirretty, allekirjoitamme varmenteen allekirjoituspyyntötiedoston CA-koneella tällä komennolla

$ 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. Tuo client.crt Nitrokey-koneeseen CA-koneesta.

Kun client.crt-tiedosto on luotu, liitämme Nitrokey Pro 2 -laitteen CA-koneeseen ja tuomme .crt-tiedoston Pro 2 -laitteeseen tällä komennolla:

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

Voit nähdä, onko avain tallennettu Nitrokey-avaimeen tehokkaasti käyttämällä tätä komentoa:

$ pkcs15-tool -c

Tai vaihtoehtoisesti

$ pkcs11-tool --list-objects

Lisää komentoja löydät OpenSC wikistä.

6. Hae chain.crt-tiedosto CA-koneelta.

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. Määritä asiakasohjelma toimimaan vuorovaikutuksessa Nitrokeyn kanssa.

Takaisin asiakaskoneessa kytkemme Nitrokey Pron ja käytämme sitä VPN-yhteyden muodostamiseen palvelimeen. Yleisesti ottaen TLS:ää käyttävä yhteys vaatii useita varmenteita ja avaimia todennusta varten:

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

Tätä opasta varten voimme käyttää seuraavaa client.conf-tiedostoa ja lisätä siihen tarvittavat asetukset:

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ääritä oikea kohde

    Kukin PKCS#11-palveluntarjoaja voi tukea useita laitteita. Voit tarkastella käytettävissä olevien kohteiden luetteloa seuraavalla komennolla:

    $ 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
    

    Jokaisella varmenne/yksityinen avain -parilla on yksilöllinen Serialized id merkkijono. Pyydetyn varmenteen sarjallistettu id-merkkijono on määritettävä asetustiedostossa. Tämä voidaan tehdä lisäämällä pkcs11-id -vaihtoehto käyttämällä yksinkertaisia lainausmerkkejä.

    pkcs11-id 'pkcs11:model=pkcs11:model=PKCS%NNNN%20emulated;token=User%20PIN%20%28OpenPGP%20card%29;manufacturer=ZeitControl;serial=000NNNNNN;id=%03'
    
  2. Lisää haettu sarjallistettu tunnus konfiguraatiotiedostoon.

    Avaa server.conf-tiedosto suosikkitekstieditorillasi ja lisää siihen seuraavat rivit, mutta huolehdi siitä, että lisäät omat 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- tunnistautumiseen liittyviä lisäasetuksia varten voit myös lisätä muutaman rivin avainten hallintaa varten, vaikka se onkin vapaaehtoista.

    Muista

    Klikkaa nähdäksesi koodin

    # 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
    

    Valinnainen vaihe

    Jos haluat testata kokoonpanoa Nitrokey-koodin kanssa ja ilman sitä, voit lisätä rivejä samaan client.conf ja kommentoida/poistaa kommentit tarpeidesi mukaan:

    Muista

    Klikkaa nähdäksesi koodin

    # non_nitrokey login
    
    # cert client.crt
    # key client.key
    # tls-auth ta.key 1
    
  3. OpenVPN-asiakkaan määrittäminen

    Lopullisen konfiguraatiotiedoston client.conf pitäisi näyttää tältä:

    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ättelyn muodostamiseksi sinun on määritettävä OpenVPN:n sisältämä 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

    Tällä muutoksella et saa virheitä, kuten on raportoitu täällä, täällä ja täällä.

  5. Tunnetut ongelmat

    OpenVPN-kirjautumiseen OpenSC:n kanssa liittyy joitakin tunnettuja ongelmia. Tutustu näihin ongelmiin täällä.

8. Käynnistä OpenVPN-asiakasohjelma

  1. Käynnistä OpenVPN-palvelu asiakkaalla

    Ota OpenVPN-palvelu käyttöön ja käynnistä se näillä komennoilla:

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

    Voit tarkistaa, onko OpenVPN-palvelu aktiivinen, käyttämällä tätä komentoa:

    $ sudo systemctl status openvpn-server@server.service
    
  2. Syötä käyttäjän PIN-koodi

    Kun OpenVPN-asiakasohjelma suoritetaan, Nitrokeyn PIN-koodi on syötettävä:

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

    Varoitus

    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)
    

    Joissakin tapauksissa se ei pyydä PIN-koodia päätelaitteessa. Yksi kiertotapa olisi käyttää tätä komentoa kirjautumiseen PIN-koodilla:

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

    Vaihtoehtoisesti voit kokoonpanna OpenVPN-asiakasohjelman uudelleen, kun systemd-tuki on poistettu käytöstä, ja se kysyy PIN-koodia odotetusti.

    Toinen vaihtoehto olisi kirjautua OpenVPN-instanssiin Viscosity-asiakasohjelmalla, joka tarjoaa paremman käyttökokemuksen erityisesti PIN-koodin syöttämisessä.