Uatoken в linux

Материал из Xgu.ru

Перейти к: навигация, поиск

Содержание

[править] UaToken в Linux



В данной статье описан пример настройки аутентификации пользователей, подключающихся к vpn-серверу, с использованием сертификатов. Сертификат пользователя, его закрытый ключ, должны находиться всегда на usb-устройстве uatoken. В качестве такого устройства может использоваться только устройство с маркировкой uatoken S.

В качестве сервера выступает копьютер под управлением ОС Debian GNU/Linux c OpenVPN-сервисом.

В качестве клиента выступает копьютер под управлением ОС Debian GNU/Linux c OpenVPN-клиентом.

Согласно документу Инструкция «Rutoken для Linux» для работы устройства необходимо наличие OpenCT и OpenSC

OpenCT - это реализация драйверов для определенных смарт-карт ридеров. Выступает как драйвер в ifdhandler формате, как CT-API драйвер или как маленькое программное обеспечение, так что приложения используют его с минимальными усилиями. Кроме того OpenCT имеет примитивный механизм для экспорта ридера на удаленный хост поверх tcp/ip.

Пример взаимодействия:

+----------------------------------------+
|        Application, e.g. mozilla       |
+------------------pkcs11----------------+
|       PKCS11 library, e.g. OpenSC      |
+----------------------------------------+
|                 OpenCT                 |
+----------------------------------------+
|               Linux Kernel             |
+----------------------------------------+

(источник http://www.opensc-project.org/openct/wiki/OverView)

OpenSC - это набор библиотек и утилит для доступа к смарт-карте. Причем фокусировка внимания делается на карты с поддержкой криптографических операций и использование их для шифрования данных, аутентификации и цифровой подписи. ( Более подробно - http://www.opensc-project.org/opensc/wiki/OverView).

Для установки openct и opensc необходимо получить архив исходных текстов с сайта производителя:

wget -c http://uatoken.kiev.ua/dsv/src-opensc-openct.zip

--2009-03-19 23:35:10--  http://uatoken.kiev.ua/dsv/src-opensc-openct.zip
Распознаётся uatoken.kiev.ua... 62.149.9.30
Устанавливается соединение с uatoken.kiev.ua|62.149.9.30|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 2115586 (2,0M) [application/zip]
Сохраняется в каталог: `src-opensc-openct.zip'.
100%[==========================================================>] 2 115 586    516K/s   в 4,1s
2009-03-19 23:35:14 (510 KB/s) - `src-opensc-openct.zip' сохранён [2115586/2115586]

И затем распаковать архив:

sudo mkdir uatoken-opensc-openct
mv src-opensc-openct.zip uatoken-opensc-openct
cd uatoken-opensc-openct
sudo unzip src-opensc-openct.zip

Archive:  src-opensc-openct.zip
  inflating: CHECKSUMS.md5
  inflating: openct-0.6.14.uatoken-0.1.3.tar.gz
  inflating: opensc-0.11.4.uatoken-0.3.3.0.tar.gz

Проверка целостности полученных архивов:

md5sum -c CHECKSUMS.md5
openct-0.6.14.uatoken-0.1.3.tar.gz: Успех
opensc-0.11.4.uatoken-0.3.3.0.tar.gz: Успех

[править] Установка OpenCT

Распаковка архивов исходных текстов:

sudo tar xzf openct-0.6.14.uatoken-0.1.3.tar.gz
ls
CHECKSUMS.md5                openct-0.6.14.uatoken-0.1.3.tar.gz    src-opensc-openct.zip
openct-0.6.14.uatoken-0.1.3  opensc-0.11.4.uatoken-0.3.3.0.tar.gz
ls openct-0.6.14.uatoken-0.1.3/
aclocal     config.guess  configure     doc         LGPL-2.1   Makefile.am  NEWS     TODO
aclocal.m4  config.h.in   configure.ac  etc         ltmain.sh  Makefile.in  solaris
bootstrap   config.sub    depcomp       install-sh  macos      missing      src

Для установки пакетов, необходимых для сборки openct, необходимо выполнить команду:

sudo apt-get build-dep openct

Процесс сборки:

cd openct-0.6.14.uatoken-0.1.3
sudo sh ./configure
checking for fort... no
checking for ifort... no
checking for ifc... no
checking for efc... no
checking for pgf95... no
checking for lf95... no
checking for ftn... no
checking whether we are using the GNU Fortran 77 compiler... no
checking whether  accepts -g... no
checking the maximum length of command line arguments... 32768
...
Compiler flags:      -Wall -g -O2
Preprocessor flags:  -I${top_builddir}/src/include -I${top_srcdir}/src/include
Linker flags:
Libraries:           -lpthread
PC/SC support:       yes
Libusb used:         yes
Without libusb coldplugging will not work.
To use usb devices, your hotplugging needs to be
configured and you need to plug in any device
after the system has started (i.e. the init script ran)
time sudo make -j 2

make  all-recursive
make[1]: Entering directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3'
Making all in .
make[2]: Entering directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3'
make[2]: Цель `all-am' не требует выполнения команд.
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3'
Making all in aclocal
make[2]: Entering directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/aclocal'
make[2]: Цель `all' не требует выполнения команд.
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/aclocal'
...
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -Wall -g -O2 -MT status.lo -MD -MP -MF .deps/status.Tpo -c status.c -o status.o >/dev/null 2>&1
make[3]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src/ct'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3'
make: *** [all] Ошибка 2
real    0m4.938s
user    0m5.048s
sys     0m1.160s

При возникновении ошибки, как показано выше, необходимо выполнить следующие действия:

  • find . -name socket.c
    

./src/ct/socket.c

  • sudo vim src/ct/socket.c

и добавить строку №6

#define _GNU_SOURCE

и повторить операцию сборки:

time sudo make -j 2

 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT pcmcia-block.lo -MD -MP -MF .deps/pcmcia-block.Tpo -c pcmcia-block.c  -fPIC -DPIC -o .libs/pcmcia-block.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT pcmcia.lo -MD -MP -MF .deps/pcmcia.Tpo -c pcmcia.c -o pcmcia.o >/dev/null 2>&1
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT pcmcia-block.lo -MD -MP -MF .deps/pcmcia-block.Tpo -c pcmcia-block.c -o pcmcia-block.o >/dev/null 2>&1
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include  -I/usr/include/PCSC     -I../../src/include -I../../src/include   -Wall -g -O2  -MT process.lo -MD -MP -MF ".deps/process.Tpo" -c -o process.lo process.c; \
        then mv -f ".deps/process.Tpo" ".deps/process.Plo"; else rm -f ".deps/process.Tpo"; exit 1; fi
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include  -I/usr/include/PCSC     -I../../src/include -I../../src/include   -Wall -g -O2  -MT protocol.lo -MD -MP -MF ".deps/protocol.Tpo" -c -o protocol.lo protocol.c; \
        then mv -f ".deps/protocol.Tpo" ".deps/protocol.Plo"; else rm -f ".deps/protocol.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT process.lo -MD -MP -MF .deps/process.Tpo -c process.c  -fPIC -DPIC -o .libs/process.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT protocol.lo -MD -MP -MF .deps/protocol.Tpo -c protocol.c  -fPIC -DPIC -o .libs/protocol.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT process.lo -MD -MP -MF .deps/process.Tpo -c process.c -o process.o >/dev/null 2>&1
...
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-bsd.lo -MD -MP -MF .deps/sys-bsd.Tpo -c sys-bsd.c  -fPIC -DPIC -o .libs/sys-bsd.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-solaris.lo -MD -MP -MF .deps/sys-solaris.Tpo -c sys-solaris.c  -fPIC -DPIC -o .libs/sys-solaris.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-bsd.lo -MD -MP -MF .deps/sys-bsd.Tpo -c sys-bsd.c -o sys-bsd.o >/dev/null 2>&1
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-solaris.lo -MD -MP -MF .deps/sys-solaris.Tpo -c sys-solaris.c -o sys-solaris.o >/dev/null 2>&1
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include  -I/usr/include/PCSC     -I../../src/include -I../../src/include   -Wall -g -O2  -MT sys-linux.lo -MD -MP -MF ".deps/sys-linux.Tpo" -c -o sys-linux.lo sys-linux.c; \
        then mv -f ".deps/sys-linux.Tpo" ".deps/sys-linux.Plo"; else rm -f ".deps/sys-linux.Tpo"; exit 1; fi
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include  -I/usr/include/PCSC     -I../../src/include -I../../src/include   -Wall -g -O2  -MT sys-null.lo -MD -MP -MF ".deps/sys-null.Tpo" -c -o sys-null.lo sys-null.c; \
        then mv -f ".deps/sys-null.Tpo" ".deps/sys-null.Plo"; else rm -f ".deps/sys-null.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-linux.lo -MD -MP -MF .deps/sys-linux.Tpo -c sys-linux.c  -fPIC -DPIC -o .libs/sys-linux.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src/include -I/usr/include/PCSC -I../../src/include -I../../src/include -Wall -g -O2 -MT sys-null.lo -MD -MP -MF .deps/sys-null.Tpo -c sys-null.c  -fPIC -DPIC -o .libs/sys-null.o

Если сборка завершилась без ошибок, необходимо установить собранное программное обеспечение:

sudo make install

 /usr/bin/install -c -m 644 'logging.h' '/usr/local/include/openct/logging.h'
 /usr/bin/install -c -m 644 'openct.h' '/usr/local/include/openct/openct.h'
 /usr/bin/install -c -m 644 'path.h' '/usr/local/include/openct/path.h'
 /usr/bin/install -c -m 644 'protocol.h' '/usr/local/include/openct/protocol.h'
 /usr/bin/install -c -m 644 'server.h' '/usr/local/include/openct/server.h'
 /usr/bin/install -c -m 644 'socket.h' '/usr/local/include/openct/socket.h'
 /usr/bin/install -c -m 644 'tlv.h' '/usr/local/include/openct/tlv.h'
test -z "/usr/local/include/openct" || mkdir -p -- "/usr/local/include/openct"
 /usr/bin/install -c -m 644 'types.h' '/usr/local/include/openct/types.h'
make[4]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src/include/openct'
...
make[3]: Цель `install-data-am' не требует выполнения команд.
make[3]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src/pcsc'
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src/pcsc'
make[2]: Entering directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'
make[3]: Entering directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'
make[3]: Цель `install-exec-am' не требует выполнения команд.
make[3]: Цель `install-data-am' не требует выполнения команд.
make[3]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'
make[1]: Leaving directory `/usr/src/uatoken-opensc-openct/openct-0.6.14.uatoken-0.1.3/src'

Теперь небходимо проверить работу установленного ПО:

sudo openct-control status

Если устройство не определилось - его необходимо подключить вручную:

sudo openct-control attach uatoken usb /dev/bus/usb/001/003

Для подключения устройства в примере выше было указано устройство /dev/bus/usb/001/003, это устройство может иметь другое имя, определить его можно командой:

lsusb

Bus 005 Device 002: ID 0c45:62c0 Microdia Pavilion Webcam
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 0a89:0012  <<=== ВОТ ЭТА СТРОКА!!! <<===
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

И после этого вновь проверка:

sudo openct-control status

No.   Name                         Info
===================================================
  0   uaToken driver               slot0: card present

Отключение устройства осуществляется командой:

sudo openct-control shutdown

1 process killed.

[править] Установка OpenSC

Теперь можно приступать к сборке OpenSC

Распаковка архива исходных текстов:

sudo tar xzf opensc-0.11.4.uatoken-0.3.3.0.tar.gz

cd opensc-0.11.4.uatoken-0.3.3.0/

ls

aclocal     compile       config.sub    COPYING  etc         Makefile.am   man      README   win32
aclocal.m4  config.guess  configure     depcomp  install-sh  Makefile.in   missing  solaris
bootstrap   config.h.in   configure.in  doc      ltmain.sh   Makefile.mak  NEWS     src

Установка необходимо для сборки ПО:

sudo apt-get build-dep opensc

Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
НОВЫЕ пакеты, которые будут установлены:
  libassuan-dev libopenct1 libopenct1-dev libpth-dev libpth20 libssl-dev libxt-dev
обновлено 0, установлено 7 новых пакетов, для удаления отмечено 0 пакетов, и 307 пакетов не обновлено.
Необходимо скачать 2983kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 8298kB.
Хотите продолжить [Д/н]?
Получено:1 http://debian.org.ua unstable/main libxt-dev 1:1.0.5-3 [480kB]
...
Обрабатываются триггеры для doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
Настраивается пакет libxt-dev (1:1.0.5-3) ...
Настраивается пакет libpth20 (2.0.7-12) ...
Настраивается пакет libpth-dev (2.0.7-12) ...
Настраивается пакет libassuan-dev (1.0.5-1) ...
Настраивается пакет libopenct1 (0.6.15-1) ...
Настраивается пакет libopenct1-dev (0.6.15-1) ...
Настраивается пакет libssl-dev (0.9.8g-15) ...

Конфигурирование параметров сборки:

sudo sh ./configure

Сборка:

time sudo make -j 2

        then mv -f ".deps/sec.Tpo" ".deps/sec.Plo"; else rm -f ".deps/sec.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT sec.lo -MD -MP -MF .deps/sec.Tpo -c sec.c  -fPIC -DPIC -o .libs/sec.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT asn1.lo -MD -MP -MF .deps/asn1.Tpo -c asn1.c -o asn1.o >/dev/null 2>&1
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT sec.lo -MD -MP -MF .deps/sec.Tpo -c sec.c -o sec.o >/dev/null 2>&1
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include   -I/usr/local/include   -I/usr/include/PCSC    -I../../src/common  -I../../src/include   -Wall -fno-strict-aliasing -g -O2  -MT card.lo -MD -MP -MF ".deps/card.Tpo" -c -o card.lo card.c; \
        then mv -f ".deps/card.Tpo" ".deps/card.Plo"; else rm -f ".deps/card.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card.lo -MD -MP -MF .deps/card.Tpo -c card.c  -fPIC -DPIC -o .libs/card.o
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include   -I/usr/local/include   -I/usr/include/PCSC    -I../../src/common  -I../../src/include   -Wall -fno-strict-aliasing -g -O2  -MT iso7816.lo -MD -MP -MF ".deps/iso7816.Tpo" -c -o iso7816.lo iso7816.c; \
        then mv -f ".deps/iso7816.Tpo" ".deps/iso7816.Plo"; else rm -f ".deps/iso7816.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT iso7816.lo -MD -MP -MF .deps/iso7816.Tpo -c iso7816.c  -fPIC -DPIC -o .libs/iso7816.o
...
        then mv -f ".deps/card-jcop.Tpo" ".deps/card-jcop.Plo"; else rm -f ".deps/card-jcop.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card-openpgp.lo -MD -MP -MF .deps/card-openpgp.Tpo -c card-openpgp.c  -fPIC -DPIC -o .libs/card-openpgp.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card-openpgp.lo -MD -MP -MF .deps/card-openpgp.Tpo -c card-openpgp.c -o card-openpgp.o >/dev/null 2>&1
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card-jcop.lo -MD -MP -MF .deps/card-jcop.Tpo -c card-jcop.c  -fPIC -DPIC -o .libs/card-jcop.o
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include   -I/usr/local/include   -I/usr/include/PCSC    -I../../src/common  -I../../src/include   -Wall -fno-strict-aliasing -g -O2  -MT card-oberthur.lo -MD -MP -MF ".deps/card-oberthur.Tpo" -c -o card-oberthur.lo card-oberthur.c; \
        then mv -f ".deps/card-oberthur.Tpo" ".deps/card-oberthur.Plo"; else rm -f ".deps/card-oberthur.Tpo"; exit 1; fi
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card-oberthur.lo -MD -MP -MF .deps/card-oberthur.Tpo -c card-oberthur.c  -fPIC -DPIC -o .libs/card-oberthur.o
 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I/usr/local/include -I/usr/include/PCSC -I../../src/common -I../../src/include -Wall -fno-strict-aliasing -g -O2 -MT card-jcop.lo -MD -MP -MF .deps/card-jcop.Tpo -c card-jcop.c -o card-jcop.o >/dev/null 2>&1
if /bin/sh ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include   -I/usr/local/include   -I/usr/include/PCSC    -I../../src/common  -I../../src/include   -Wall -fno-strict-aliasing -g -O2  -MT card-belpic.lo -MD -MP -MF ".deps/card-belpic.Tpo" -c -o card-belpic.lo card-belpic.c; \
        then mv -f ".deps/card-belpic.Tpo" ".deps/card-belpic.Plo"; else rm -f ".deps/card-belpic.Tpo"; exit 1; fi

Установка собранного ПО:

sudo make install

 /bin/sh ../../libtool --mode=install /usr/bin/install -c  'onepin-opensc-pkcs11.la' '/usr/local/lib/onepin-opensc-pkcs11.la'
libtool: install: warning: relinking `onepin-opensc-pkcs11.la'
(cd /usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/src/pkcs11; /bin/sh ../../libtool  --tag=CC --mode=relink gcc -Wall -fno-strict-aliasing -g -O2 -o onepin-opensc-pkcs11.la -rpath /usr/local/lib -module -avoid-version pkcs11-global.lo pkcs11-session.lo pkcs11-object.lo misc.lo slot.lo mechanism.lo openssl.lo secretkey.lo framework-pkcs15.lo framework-pkcs15init.lo debug.lo hack-enab
gcc -shared  .libs/pkcs11-global.o .libs/pkcs11-session.o .libs/pkcs11-object.o .libs/misc.o .libs/slot.o .libs/mechanism.o .libs/openssl.o .libs/secretkey.o .libs/framework-pkcs15.o .libs/framework-pkcs15init.o .libs/debug.o .libs/hack-enabled.o  -L/usr/local/lib -lopensc -lssl -lcrypto -lpkcs15init -lpthread -lz  -Wl,-soname -Wl,onepin-opensc-pkcs11.so -o .libs/onepin-opensc-pkcs11.so
/usr/bin/install -c .libs/onepin-opensc-pkcs11.soT /usr/local/lib/onepin-opensc-pkcs11.so
/usr/bin/install -c .libs/onepin-opensc-pkcs11.lai /usr/local/lib/onepin-opensc-pkcs11.la
/usr/bin/install -c .libs/onepin-opensc-pkcs11.a /usr/local/lib/onepin-opensc-pkcs11.a
chmod 644 /usr/local/lib/onepin-opensc-pkcs11.a
ranlib /usr/local/lib/onepin-opensc-pkcs11.a
...
make[3]: Leaving directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/src'
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/src'
make[1]: Leaving directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/src'
Making install in win32
make[1]: Entering directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/win32'
make[2]: Entering directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/win32'
make[2]: Цель `install-exec-am' не требует выполнения команд.
make[2]: Цель `install-data-am' не требует выполнения команд.
make[2]: Leaving directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/win32'
make[1]: Leaving directory `/usr/src/uatoken-opensc-openct/opensc-0.11.4.uatoken-0.3.3.0/win32'

Проверка:

sudo opensc-tool -l

Readers known about:
Nr.    Driver     Name
0      openct     uaToken driver
1      openct     OpenCT reader (detached)
2      openct     OpenCT reader (detached)
3      openct     OpenCT reader (detached)
4      openct     OpenCT reader (detached)

Форматирование устройства:

clint:~$ pkcs15-init -v -E -p uatoken 
Connecting to card in reader uaToken driver...
Using card driver uaToken driver.
About to erase card.

Проверка:

sudo opensc-explorer

OpenSC Explorer version 0.11.4
OpenSC [3F00]> ls
FileID  Type  Size
[0000]    DF     0
OpenSC [3F00]> cd 0000
OpenSC [3F00/0000]> ls
FileID  Type  Size
[0000]    DF     0
[0001]    DF     0
OpenSC [3F00/0000]> cd 0001
...
OpenSC [3F00/0000/0000/0001]> cd ..
OpenSC [3F00/0000/0000]> cd 0002
OpenSC [3F00/0000/0000/0002]> ls
FileID  Type  Size
 0002    wEF    54
[1001]    DF     0
[1003]    DF     0
OpenSC [3F00/0000/0000/0002]> cd ..
OpenSC [3F00/0000/0000]> cd ..
OpenSC [3F00/0000]> quit

[править] Создание ключей и сертификатов для аутентификации пользователя

  • Закрытый ключ CA
dd if=/dev/urandom of=.rnd count=64
openssl dsaparam -rand .rnd -out CA_dsaparam 1024
openssl gendsa -out CA_dsa_privat_key.pem CA_dsaparam -des3
  • Сертификат CA
openssl req -new -x509 -key CA_dsa_privat_key.pem -out CA_cert.pem -days 365
  • Закрытые ключи клиента и сервера
openssl genrsa -out megaClient_private_key.pem -rand .rnd -des3 1024
openssl genrsa -out megaServer_private_key.pem -rand .rnd -des3 1024
  • Запросы на подпись
openssl req -new -key megaServer_private_key.pem -rand .rnd -out megaServer_request_cert.pem
openssl req -new -key megaClient_private_key.pem -rand .rnd -out megaClient_request_cert.pem
  • Подпись
openssl x509 -req -in megaServer_request_cert.pem -CA CA_cert.pem -CAkey CA_dsa_privat_key.pem -CAcreateserial -days 365 -out megaServer_cert.pem

[править] Запись сертификата на usb-брелок

  • Запись приватного ключа
pkcs15-init --store-private-key megaClient_private_key.pem --auth-id 01 --id 1 --label user_private_key
Please enter passphrase to unlock secret key: 
PIN [User PIN] required.
Please enter PIN [User PIN]: 
  • Проверка записи приватного ключа
pkcs15-tool --list-keys
Private RSA Key [user_private_key]
        Com. Flags  : 3
        Usage       : [0x4], sign
        Access Flags: [0x1D], sensitive, alwaysSensitive, neverExtract, local
        ModLength   : 1024
        Key ref     : 0
        Native      : yes
        Path        : 3f00ff0000000000
        Auth ID     : 01
        ID          : 01

  • Запись и проверка записи сертификата
pkcs15-init --store-certificate megaClient_cert.pem --auth-id 01 --id 1 --label user_certificate
PIN [User PIN] required.
Please enter PIN [User PIN]: 
pkcs15-tool --list-certificates
X.509 Certificate [user_certificate]
        Flags    : 2
        Authority: no
        Path     : 3f00ff0000000101
        ID       : 01

Или

pkcs15-tool --read-certificate 01 >> /tmp/test
openssl x509 -in /tmp/test -noout -text
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            a0:8c:2b:3e:bf:b4:ca:18
        Signature Algorithm: dsaWithSHA1
        Issuer: C=UA, ST=Kievskaya, L=Kiev, O=Techexpert
        Validity
            Not Before: Mar  9 01:21:08 2009 GMT
            Not After : Mar  9 01:21:08 2010 GMT
        Subject: C=UA, ST=Kievskaya, L=Kiev, O=Techexpert, OU=EC, CN=Techexpert/emailAddress=sergey.cherepenin@gmail.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:ad:f4:46:93:b7:2a:c6:29:f5:bc:f8:aa:a7:b0:
                    49:5d:7b:86:f6:d5:2e:5e:df:38:58:16:c3:70:b5:
                    3a:df:78:61:ef:7d:bd:ed:b5:c8:db:33:5c:38:b0:
                    d2:5f:77:29:42:8f:c9:3d:3f:13:89:5f:fc:50:b6:
                    92:3a:42:4b:db:bb:2c:cd:40:6e:33:a7:d9:d2:82:
                    a1:63:20:5e:1b:fd:56:7d:2e:e6:e1:2f:c4:ea:7e:
                    6d:f8:b3:cc:11:e8:a4:ad:52:4e:b6:f8:3a:77:bd:
                    4a:4a:6a:08:bb:a9:42:19:75:68:26:d0:5d:ca:10:
                    6a:f5:2e:2d:ff:3a:0c:da:af
                Exponent: 65537 (0x10001)
    Signature Algorithm: dsaWithSHA1
        30:2c:02:14:3a:2e:82:c0:d3:d9:fb:3c:85:be:e0:a4:12:8d:
        30:0f:cf:24:40:4a:02:14:17:4a:73:2a:ed:15:7a:52:f0:17:
        13:dd:d2:3e:4f:ea:57:55:e7:6f

[править] Установка OpenVPN

Данная команда должна быть выполнена как на сервере, так и на клиенте.

Особых требований к установке openvpn нет:

sudo apt-get install openvpn

Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  sane-utils libsane libmono-corlib1.0-cil libsane-extras libieee1284-3 libdns43 ttf-liberation
  libmono-system1.0-cil libmono-i18n1.0-cil libgtkhtml2-0 libisc44 libmono-cairo1.0-cil
  libavahi-core5
Для их удаления используйте 'apt-get autoremove'.
Будут установлены следующие дополнительные пакеты:
  libpkcs11-helper1 openssl-blacklist openvpn-blacklist
...
Выбор ранее не выбранного пакета openvpn-blacklist.
Распаковывается пакет openvpn-blacklist (из файла .../openvpn-blacklist_0.3_all.deb)...
Выбор ранее не выбранного пакета openvpn.
Распаковывается пакет openvpn (из файла .../openvpn_2.1~rc11-1_i386.deb)...
Обрабатываются триггеры для man-db ...
Настраивается пакет openssl-blacklist (0.4.2) ...
Настраивается пакет libpkcs11-helper1 (1.07-1) ...
Настраивается пакет openvpn-blacklist (0.3) ...
Настраивается пакет openvpn (2.1~rc11-1) ...
 * Restarting virtual private network daemon.                

[править] Тестирование соединения

[править] Настройка клиентской части

Проверка возможности использовать сохраненный сертификат

sudo openvpn --show-pkcs11-ids /usr/lib/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:             /C=UA/ST=Kievskaya/L=Kiev/O=Techexpert/OU=EC/CN=Techexpert/emailAddress=sergey.cherepenin@gmail.com
       Serial:         A08C2B3EBFB4CA18
       Serialized id:  021400/PKCS\x20\x2315\x20SCard/26337850/uaToken\x20card\x20\x28User\x20PIN\x29/01


Конфигурационный файл клиента

cat megaClient.conf 
dev tap
#link-mtu 1574
remote 192.168.7.254
float
port 777
ifconfig 172.17.0.99 255.255.255.0
tls-client
tun-mtu 1532
ca /etc/openvpn/CA_cert.pem
pkcs11-providers /usr/local/lib/opensc-pkcs11.so
pkcs11-id '021400/PKCS\x20\x2315\x20SCard/26337850/uaToken\x20card\x20\x28User\x20PIN\x29/01'
comp-lzo

[править] Настройка VPN-Сервера

Конфигурационный файл сервера:

clint:~$ cat /etc/openvpn/mega-server2.conf 
dev tap
ifconfig 172.17.0.1  255.255.255.0
port 777
tls-server
dh    /etc/openvpn/dh1024.pem
ca    /home/clint/CA_cert.pem
cert  /home/clint/megaServer_cert.pem
key /home/clint/megaServer_private_key.pem
comp-lzo
push "ping 10"
push "ping-restart 60"
keepalive 10 120

[править] Тестирование соединения

sudo openvpn --config megaClient.conf 

Fri Mar 20 01:39:58 2009 OpenVPN 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Sep 18 2008
Fri Mar 20 01:39:58 2009 PKCS#11: Adding PKCS#11 provider '/usr/local/lib/opensc-pkcs11.so'
Fri Mar 20 01:40:02 2009 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Fri Mar 20 01:40:02 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
[opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
Fri Mar 20 01:40:02 2009 LZO compression initialized
Fri Mar 20 01:40:02 2009 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1532)
Fri Mar 20 01:40:02 2009 TUN/TAP device tap0 opened
Fri Mar 20 01:40:02 2009 /sbin/ifconfig tap0 172.17.0.99 netmask 255.255.255.0 mtu 1532 broadcast 172.17.0.255
[opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
...

Enter uaToken card (User PIN) token Password:

Fri Mar 20 01:40:07 2009 [Techexpert] Peer Connection Initiated with 192.168.77.88:777
Fri Mar 20 01:40:08 2009 Initialization Sequence Completed
^Z
[1]+  Stopped                 sudo openvpn --config megaClient

bg

[1]+ sudo openvpn --config megaClient &
ping 172.17.0.1

PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=2.03 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=1.07 ms
^C
--- 172.17.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1005ms
rtt min/avg/max/mdev = 1.076/1.554/2.032/0.478 ms

$ping 172.17.0.99

PING 172.17.0.99 (172.17.0.99) 56(84) bytes of data.
64 bytes from 172.17.0.99: icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from 172.17.0.99: icmp_seq=2 ttl=64 time=0.035 ms
^C
--- 172.17.0.99 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.035/0.071/0.107/0.036 ms

fg

sudo openvpn --config megaClient
^CFri Mar 20 01:40:45 2009 event_wait : Interrupted system call (code=4)
Fri Mar 20 01:40:45 2009 /sbin/ifconfig tap0 0.0.0.0
[opensc-pkcs11] pkcs11-global.c:176:C_Initialize: C_Initialize(): Cryptoki already initialized
Fri Mar 20 01:40:45 2009 SIGINT[hard,] received, process exiting
Источник — «http://xgu.ru/wiki/Uatoken_%D0%B2_linux»