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