Ubuntu 16.04 64bit – OpenVPN and SafeNet iKey 5100 token

My company allows remote connection to some computers by OpenVPN, but you have to use SafeNet iKey 5100 token. There is small tutorial how can you install and configure OpenVPN with iKey 5100 token and how to modify windows *.ovpn files to be a Linux compatible.

ikey5100

Important note: OpenVPN contains bug and it doesn’t work with systemd and pkcs11 token. This is our case, Ubuntu 16.04 use systemd and SafeNet has pkcs11 API. This bug should be fixed in OpenVPN 2.5. You can find more informatinon at: https://community.openvpn.net/openvpn/ticket/538

Celý článek

[lang_en]How to connect to OpenVPN by ikey 3000 token from Linux[lang_en][lang_cs]Jak se připojit do OpenVPN sítě pomocí ikey 3000 tokenu z Linuxu[lang_cs]

[lang_en]A lot of organisations have access to their network through OpenVPN and token authentication. There is guide how to connect to VPN network with OpenVPN and ikey 3000 token combination.

Content:

  1. Installation
  2. Configuration
  3. Connection


Installation

Top

Debian Leny, Ubuntu 8.10, 9.04

  1. Run command in concole:
    sudo apt-get install openvpn openct opensc

Ubuntu 9.10

  1. Download packages opensc and libopensc2
  2. Run console, go to the folder where are downloaded packages and install them by command:
    i386: sudo dpkg -i opensc_0.11.8-1ubuntu1_i386.deb libopensc2_0.11.8-1ubuntu1_i386.deb
    x86_64: sudo dpkg -i opensc_0.11.8-1ubuntu1_amd64.deb libopensc2_0.11.8-1ubuntu1_amd64.deb
  3. Then install other required software form repositories by command:
    sudo apt-get install openvpn openct
    Note: You cannot upgrade libopensc2 and opensc package form now !!!

OpenSUSE 11, 11.1

  1. You have to download and install new RPM files to you openSUSE because version of opensc distributed in OpenSUSE 11.1 has bug. If you try read the certificates from your token and you have installed version of opensc from OpenSUSE 11.1 repository this opensc version give the CRK_COMMAND_FAILED.
    Download and save these files:

  2. Install required packages from YAST.
    Run console and run command
    sudo /sbin/yast -i gcc gcc-c++ make lzo-devel openct libopenssl-devel pkcs11-helper-devel
  3. Uninstall opensc dilivered by OpenSUSE installation by command:
    sudo rpm -e opensc libopensc2 openssh openssh-askpass
  4. Go to the directory where you have downloaded files and install them by command:
    sudo rpm -ivh libopensc2-0.11.4-37.1.i586.rpm libltdl-3-1.5.26-23.1.i586.rpm opensc-0.11.4-37.1.i586.rpm
  5. Download latest version of OpenVPN-2.1 form project page http://www.openvpn.net (I use OpenVPN 2.1 rc15)
  6. Go to the directory where you have downloaded OpenVPN tar.gz file and unpack the file by command:
    tar xvzf openvpn-2.1_rc15.tar.gz
  7. Go to direcotry where is unpacked OpenVPN files (e.g. cd openvpn-2.1_rc15/
  8. Install OpenVPN by these commands (step by step):
    ./configure
    make
    sudo make install


Configuration

Top

We have all required software installed in the system and we can start configure OpenVPN connection.

  1. Create „openvpn“ folder in „/etc“ if doesn’t exist
    Run console and run command
    sudo mkdir /etc/openvpn
  2. I recieved from my company OpenVPN administrator these files:
    • VPN.ovpn – configuration file for Windows OpenVPN
    • gvpn_ca.cer – CA certificate
    • ta.key – key file

    You should have similar files too.
    Copy these files to „/etc/openvpn“ folder

  3. Now conect ikey 3000 token to your computer
  4. Restart openct daemon by command:
    sudo /etc/init.d/openct restart
  5. We check now if ikey 3000 is working.
    Run command:
    sudo pkcs15-tool -c
    You should see report like this one:
    X.509 Certificate [Vladislav Korecky GVPN's VPN VPN CA ID]
    Flags : 2
    Authority: no
    Path : 3f0050154300
    ID : 61323133623665662d396631392d346530302d623734642d656436386436656462313537
  6. OK, we can configure OpenVPN configuration file now (I had only Windows OpenVPN configuration file)
    Open your configuration file in your favorite editor.
    I run command:
    sudo gedit /etc/openvpn/VPN.ovpn
    My OpenVPN configuration file for Windows look like this one:
    client
    dev tun
    proto udp
    remote 111.111.111.1 1111
    resolv-retry infinite
    persist-key
    persist-tun
    redirect-gateway
    tls-remote ovpn.server.com
    redirect-gateway
    ca "C:\\Program Files\\OpenVPN\\config\\gvpn_ca.cer"
    cryptoapicert "SUBJ:John Smith GVPN"
    tls-auth ta.key 1
    comp-lzo
    verb 4

    I modified these attributes because security restrictions:
    remote
    tls-remote
    cryptoapicert
  7. We will modify this file to OpenVPN Linux version:
    Delete these lines in the config file:
    ca "C:\\Program Files\\OpenVPN\\config\\gvpn_ca.cer"
    cryptoapicert "SUBJ:John Smith GVPN"

    On their place put these lines:
    pkcs11-providers /usr/lib/opensc-pkcs11.so
    pkcs11-id ''
  8. Keep file opened and run another console.
    In the console run command:
    sudo /usr/local/sbin/openvpn --show-pkcs11-ids /usr/lib/opensc-pkcs11.so
    You should see report like this:
    [opensc-pkcs11] iso7816.c:99:iso7816_check_sw: File not found
    [opensc-pkcs11] card-starcos.c:312:starcos_select_fid: returning with: File not found
    [opensc-pkcs11] card.c:554:sc_select_file: returning with: File not found
    [opensc-pkcs11] pkcs15-pubkey.c:404:sc_pkcs15_read_pubkey: Failed to read public key file.
    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: /C=CZ/L=Jihlava/O=VPN spol. s r. o./OU=Centrala/CN=Vladislav Korecky GVPN
    Serial: 46341E5D000000000132
    Serialized id: A\x2EE\x2ET\x2E\x20Europe\x20B\x2EV\x2E/PKCS\x20\x2315\x20SCard/9790623500140921/Vladislav\x20Korecky/61323133623665662D396631392D346530302D623734642D656436386436656462313537

  9. In section „Certificate“ you can see line started sith „Serialized id:“. Copy this value to the configuration file to the line started „pkcs11-id“.
    Your configuration file should be the similar as my:
    client
    dev tun
    proto udp
    remote 111.111.111.1 1111
    resolv-retry infinite
    persist-key
    persist-tun
    redirect-gateway
    tls-remote ovpn.server.com
    redirect-gateway
    pkcs11-providers /usr/lib/opensc-pkcs11.so
    pkcs11-id 'A\x2EE\x2ET\x2E\x20Europe\x20B\x2EV\x2E/PKCS\x20\x2315\x20SCard/9790623500140921/Vladislav\x20Korecky/61323133623665662D396631392D346530302D623734642D656436386436656462313537'
    tls-auth /etc/openvpn/ta.key 1
    comp-lzo
    verb 4
  10. Save configuration file to „/etc/openvpn/“ folder
  11. That’s all. You can try connect to your OpenVPN network now.


Connection

Top
  1. Connvet your ikey 3000 token to the computer and restart openct daemon by command:
    sudo /etc/ini.d/openct restart
  2. Connect to your OpenVPN network by command: (modify file names)
    sudo /usr/local/sbin/openvpn --config /etc/openvpn/VPN.ovpn --ca /etc/openvpn/gvpn_ca.cer
  3. Computer will ask you on password.
    These lines should see like:
    ...
    Tue Apr 28 13:50:10 2009 us=681368 VERIFY OK: depth=1, /emailAddress=caadmi@VPN.cz/C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=VPN_VPN_CA
    Tue Apr 28 13:50:10 2009 us=682849 VERIFY X509NAME OK: /C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=ovpn.VPN.cz
    Tue Apr 28 13:50:10 2009 us=682944 VERIFY OK: depth=0, /C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=ovpn.VPN.cz
    Enter Vladislav Korecky token Password:
  4. When you see these lines:
    ...
    [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
    Tue Apr 28 13:50:46 2009 us=914449 /sbin/route add -net 10.20.8.1 netmask 255.255.255.255 gw 10.20.10.174
    [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
    Tue Apr 28 13:50:46 2009 us=916233 Initialization Sequence Completed

    You are connected …

[/lang_en]

[lang_cs]Mnoho organizací používá k přístupu do své lokální sítě OpenVPN a tokenu ikey 3000. Tento návod vám pomůže právě s tímto druhem připojení.

Obsah:

  1. Instalace
  2. Konfigurace
  3. Připojení


Instalace

Top

Debian Leny, Ubuntu 8.10, 9.04

  1. Spusťte příkaz v kosnoli:
    sudo apt-get install openvpn openct opensc

Ubuntu 9.10

  1. Stáhněte si balíčky opensc and libopensc2
  2. Spusťte konsoli, běžte do adresáře kde máte stažené balíčky a nainstalujte je příkazem:
    i386: sudo dpkg -i opensc_0.11.8-1ubuntu1_i386.deb libopensc2_0.11.8-1ubuntu1_i386.deb
    x86_64: sudo dpkg -i opensc_0.11.8-1ubuntu1_amd64.deb libopensc2_0.11.8-1ubuntu1_amd64.deb
  3. Poté nainstalujte i zbývající software příkazem:
    sudo apt-get install openvpn openct
    Poznámka: Od teď již nemůžete aktualizovat balíčky libopensc2 a opensc !!!

OpenSUSE 11, 11.1

  1. Nejdříve si musíte stáhnout nové RPM balíčky některých souborů, protože v openct v OpenSUSE 11.1 obsahuje chybu. Když se pokusíte získat certifikát z vašeho tokenu s originálním openct knihovna vyhodí výjimku CRK_COMMAND_FAILED.
    Stáhněte so tyto soubory:

  2. Nainstalujte potřebné balíčky pomocí YAST.
    Spusťte konsoli a zadejte příkaz
    sudo /sbin/yast -i gcc gcc-c++ make lzo-devel openct libopenssl-devel pkcs11-helper-devel
  3. Odinstalujte opensc dodaný s OpenSUSE 11.1:
    sudo rpm -e opensc libopensc2 openssh openssh-askpass
  4. Běžte do složky kde máte stažené RPM souboty (první krok v tomto návodu) a nainstalujte je příkazem:
    sudo rpm -ivh libopensc2-0.11.4-37.1.i586.rpm libltdl-3-1.5.26-23.1.i586.rpm opensc-0.11.4-37.1.i586.rpm
  5. Stáhněte si ze stránek project http://www.openvpn.net poslední verzi OpenVPN 2.1 (Já používám OpenVPN 2.1 rc15)
  6. Bežte do složky kde se nachází stažený tar.gz soubor a rozbalte jej:
    tar xvzf openvpn-2.1_rc15.tar.gz
  7. Přesuňte se do složky s rozpakovaným OpenVpn (např: cd openvpn-2.1_rc15/
  8. Nainstalujte OpenVPN pomocí těchto příkazů (ve stejném pořadí, krok po kroku):
    ./configure
    make
    sudo make install


Konfigurace

Top

Veškerý potřebný software bychom měli mít nainstalovaný, takže se můžeme pustit do konfigurace OpenVPN.

  1. Vytvořte složku „openvpn“ v „/etc“ (pokud neexistuje)
    Spusťte konsoli a zadejte příkaz
    sudo mkdir /etc/openvpn
  2. Obdržel jsem tyto soubory:
    • VPN.ovpn – konfigurační soubot pro Windows
    • gvpn_ca.cer – CA certifikát
    • ta.key – key soubor

    Podobné soubory by jste měli mít i vy.
    Zkopírujte je do složky „/etc/openvpn“

  3. Nyní připojte váš token do počítače
  4. Restartujte openct démona pomocí přikazu:
    sudo /etc/init.d/openct restart
  5. Nyní zkontrolujeme jestli ikey 3000 klíčenka pracuje správně.
    Spusťte příkaz:
    sudo pkcs15-tool -c
    Měli by jste vidět podobný výpis:
    X.509 Certificate [Vladislav Korecky GVPN's VPN VPN CA ID]
    Flags : 2
    Authority: no
    Path : 3f0050154300
    ID : 61323133623665662d396631392d346530302d623734642d656436386436656462313537
  6. Nyní se můžeme pustit do samotné konfigurace
    Otevřete konfigurační soubo ve vašem oblíbeném editoru.
    Já jsem spustil gedit tímto příkazem:
    sudo gedit /etc/openvpn/VPN.ovpn
    Můj konfigurační soubor OpenVPN pro Windows vypadal takto:
    client
    dev tun
    proto udp
    remote 111.111.111.1 1111
    resolv-retry infinite
    persist-key
    persist-tun
    redirect-gateway
    tls-remote ovpn.server.com
    redirect-gateway
    ca "C:\\Program Files\\OpenVPN\\config\\gvpn_ca.cer"
    cryptoapicert "SUBJ:John Smith GVPN"
    tls-auth ta.key 1
    comp-lzo
    verb 4

    Následující atributy byly pozměněny kvůli bezpečnosti:
    remote
    tls-remote
    cryptoapicert
  7. Tento soubor modifikujeme pro Linux verzi OpenVPN:
    Smažte tyto řádky z konfiguračního souboru:
    ca "C:\\Program Files\\OpenVPN\\config\\gvpn_ca.cer"
    cryptoapicert "SUBJ:John Smith GVPN"

    Na jejich místo vložte:
    pkcs11-providers /usr/lib/opensc-pkcs11.so
    pkcs11-id ''
  8. Soubor ponechte otevřený a spusťte si novou konsoli.
    V novém okně spusťte příkaz:
    sudo /usr/local/sbin/openvpn --show-pkcs11-ids /usr/lib/opensc-pkcs11.so
    Měli by jste vidět následujíc report:
    [opensc-pkcs11] iso7816.c:99:iso7816_check_sw: File not found
    [opensc-pkcs11] card-starcos.c:312:starcos_select_fid: returning with: File not found
    [opensc-pkcs11] card.c:554:sc_select_file: returning with: File not found
    [opensc-pkcs11] pkcs15-pubkey.c:404:sc_pkcs15_read_pubkey: Failed to read public key file.
    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: /C=CZ/L=Jihlava/O=VPN spol. s r. o./OU=Centrala/CN=Vladislav Korecky GVPN
    Serial: 46341E5D000000000132
    Serialized id: A\x2EE\x2ET\x2E\x20Europe\x20B\x2EV\x2E/PKCS\x20\x2315\x20SCard/9790623500140921/Vladislav\x20Korecky/61323133623665662D396631392D346530302D623734642D656436386436656462313537

  9. V sekci „Certificate“ můžete vidět řádek začínající „Serialized id:“. Zkopírujte tuto hodnotu do konfiguračního souboru do řádku „pkcs11-id“.
    Nyní by měl náš konfigurační soubor vypadat takto:
    client
    dev tun
    proto udp
    remote 111.111.111.1 1111
    resolv-retry infinite
    persist-key
    persist-tun
    redirect-gateway
    tls-remote ovpn.server.com
    redirect-gateway
    pkcs11-providers /usr/lib/opensc-pkcs11.so
    pkcs11-id 'A\x2EE\x2ET\x2E\x20Europe\x20B\x2EV\x2E/PKCS\x20\x2315\x20SCard/9790623500140921/Vladislav\x20Korecky/61323133623665662D396631392D346530302D623734642D656436386436656462313537'
    tls-auth /etc/openvpn/ta.key 1
    comp-lzo
    verb 4
  10. Uložte jej do adresáře „/etc/openvpn/“
  11. To je vše. Nyní se můžete připojit do OpenVPN sítě.


Připojení

Top
  1. Připojte ikey 3000 token do počítače a restartujte openct démona:
    sudo /etc/ini.d/openct restart
  2. Nyní se můžete připojit do VPN sítě příkazem: (změňte si jména souborů)
    sudo /usr/local/sbin/openvpn --config /etc/openvpn/VPN.ovpn --ca /etc/openvpn/gvpn_ca.cer
  3. Počítač se vás zeptá na heslo k tokenu.
    ...
    Tue Apr 28 13:50:10 2009 us=681368 VERIFY OK: depth=1, /emailAddress=caadmi@VPN.cz/C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=VPN_VPN_CA
    Tue Apr 28 13:50:10 2009 us=682849 VERIFY X509NAME OK: /C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=ovpn.VPN.cz
    Tue Apr 28 13:50:10 2009 us=682944 VERIFY OK: depth=0, /C=CZ/L=Jihlava/O=VPN_spol._s_r._o./OU=Centrala/CN=ovpn.VPN.cz
    Enter Vladislav Korecky token Password:
  4. Po zadání hesla by mělo připojování pokračovat. Pokud váš výpis končí stejným řádkem jako můj, měli by jste být připojeni:
    ...
    [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
    Tue Apr 28 13:50:46 2009 us=914449 /sbin/route add -net 10.20.8.1 netmask 255.255.255.255 gw 10.20.10.174
    [opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
    Tue Apr 28 13:50:46 2009 us=916233 Initialization Sequence Completed

[/lang_cs]