Темой блога является материал рабочих заметок, полученный при подключение USB считывателя и смарткарты в окружающей среде операционной системы ALT Linux.

Предисловие.

Предположим, есть организация, в которой используется смешанная среда рабочих станций под управлением операционной системы Windows и linux. В организации развёрнут удостоверяющий центр сертификации, который, из последних сил, выдаёт сертификат открытого и закрытого ключ для записи на токен носитель, токен выполнен в виде смарт карт, Rutoken или Esmart. Наша задача подключить считыватель, подключить смарт карту(ы), проверить чтение информации хранившийся на ней, иметь возможность менять информацию доступную для корректировки. В дальнейшем предполагается добавить интеграцию с КриптоПро и возможность входа/логина с помощью смарт карты или как принято называть, двух факторной авторизации.

Подготовка.

 устанавливаем пакеты и библиотеки

# apt-get update
# apt-get install pcsc-lite pcsc-lite-ccid pcsc-tools opensc

 установливаем драйвер для считывателя Athena

# apt-get install pcsc-lite-asedriveiiie-usb

 устанавливаем библиотеку rtPKCS11ECP, для RSA и ГОСТ-алгоритмов модели Рутокен

# apt-get install librtpkcs11ecp

 проверяем наличие требуемых пакетов

# rpm -q pcsc-lite-ccid libpcsclite pcsc-tools opensc
pcsc-lite-ccid-1.4.28-alt0.M80P.1
libpcsclite-1.8.22-alt0.M80P.1
pcsc-tools-1.4.27-alt0.M80P.1
opensc-0.19.0-alt2.M80P.

 проверяем наличие библиотек для rutoken

# ldconfig -p|grep librtpkcs11ecp.so
librtpkcs11ecp.so (libc6,x86-64) => /usr/lib64/librtpkcs11ecp.so

 устанавливаем драйвер Рутокен

# apt-get install pcsc-lite-rutokens

 или скачиваем актуальную версию для "ручной" установки...

Загрузки]# apt-get install ifd-rutokens*.x86_64

 устанавливаем драйвер для ESMART карты, проверяем наличие требуемых библиотек

# apt-get install isbc-pkcs11
...
# ldconfig -p|grep libisbc*
libisbc_pkcs11_main.so (libc6,x86-64) => /usr/lib64/libisbc_pkcs11_main.so
libisbc_esmart_token_mod.so (libc6,x86-64) => /usr/lib64/libisbc_esmart_token_mod.so
# ldconfig -p|grep libesmart*
libesmart_token_mskey_mod.so (libc6,x86-64) => /usr/lib64/libesmart_token_mskey_mod.so
libesmart_token_gost_mod.so (libc6,x86-64) => /usr/lib64/libesmart_token_gost_mod.so
# ldconfig -p|grep libEsmart*
libEsmartToken_Javalib.so (libc6,x86-64) => /usr/lib64/libEsmartToken_Javalib.s

 запускаем demon pcscd

# systemctl start pcscd
# systemctl enable pcscd

 Проверка и управление токенами

 проверяем "видимость" считывателя при подключение к ПК

# lsusb
...
Bus 002 Device 003: ID 0dc3:0802 Athena Smartcard Solutions, Inc. ASEDrive IIIe
...

 проверяем установку драйвера считывателя Athena

# usb-devices 
Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0dc3 ProdID=0802 Rev=03.27
S: Manufacturer=Athena Smartcard Solutions
S: Product=ASEDrive IIIe
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=60mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbfs*

 проверяем работу смарткарты Rutoken

# pcsc_scan
PC/SC device scanner
V 1.4.27 (c) 2001-2011, Ludovic Rousseau <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>
Compiled with PC/SC lite version: 1.8.18
Using reader plug'n play mechanism
Scanning present readers...
0: AseIIIeUSB 00 00
...
ATR: 3B 9C 96 00 52 75 74 6F 6B 65 6E 45 43 50 73 63
+ TS = 3B --> Direct Convention
+ T0 = 9C, Y(1): 1001, K: 12 (historical bytes)
TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
TD(1) = 00 --> Y(i+1) = 0000, Protocol T = 0
-----
+ Historical bytes: 52 75 74 6F 6B 65 6E 45 43 50 73 63
Category indicator byte: 52 (proprietary format) Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 9C 96 00 52 75 74 6F 6B 65 6E 45 43 50 73 63
RuToken Light SC

# ctr^C

 комплексная проверка работы считывателя и смарткарты Rutoken

# pkcs11-tool -L --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Available slots:
Slot 0 (0x0): AseIIIeUSB 00 00
token label : test
token manufacturer : Aktiv Co.
token model : Rutoken ECP SC
token flags : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed
hardware version : 54.2
firmware version : 18.0
serial num : 37866b44
pin min/max : 6/32
Slot 1 (0x1):
(empty)
Slot 2 (0x2):
(empty)
...

 смотрим информацию на токене Rutoken

# pkcs11-tool -Ol --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Using slot 0 with a present token (0x0)
Logging in to "test".
WARNING: user PIN to be changed
Please enter User PIN:
Private Key Object; RSA
label: le-!0412!0445!043e!0434!0441!043e-52423_E
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
Usage: decrypt, sign, derive
Public Key Object; RSA 2048 bits
label: le-!0412!0445!043e!0434!0441!043e-52423_E
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
Usage: encrypt, verify, derive
Certificate Object; type = X.509 cert
label: le-!0412!0445!043e!0434!0441!043e-52423_E
subject: DN: DC=ru, DC=trest, DC=bany, DC=taziki, OU=\xD0\xA6\xD0\xB5\xD0\xBD\xD1\x82\xD1\x80\xD0\xB0\xD0\xBB\xD1\x8C\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x82\xD0\xB0\xD0\xBC\xD0\xBE\xD0\xB6\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x83\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xB8\xD0\xB5, OU=\xD0\xA6\xD0\xA2\xD0\xA3, OU=user, OU=baza, CN=bany
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d35323432335f45
...

 пробуем сменить PIN код на токене Rutoken

# pkcs11-tool --change-pin --module /usr/lib64/pkcs11/librtpkcs11ecp.so 
Using slot 0 with a present token (0x0)
Please enter the current PIN:
...

 инициализация токена Rutoken. Внимание:вся предыдущая информация стирается

# pkcs11-tool --init-token --label EsmartToken --module /usr/lib64/pkcs11/librtpkcs11ecp.so 

 проверяем работу считывателя и смарткарты Esmart

# pkcs11-tool -L --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Available slots:
Slot 0 (0x1): AseIIIeUSB 00 00
token label : ESMART Token
token manufacturer : ISBC
token model : ESMART Token
token flags : login required, rng, SO PIN locked, token initialized, PIN initialized
hardware version : 0.0
firmware version : 2.4
serial num : C07DC072A10B
pin min/max : 4/8

смотрим информацию на токене Esmart

# pkcs11-tool -OL --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Available slots:
Slot 0 (0x1): AseIIIeUSB 00 00
token label : ESMART Token
token manufacturer : ISBC
token model : ESMART Token
token flags : login required, rng, SO PIN locked, token initialized, PIN initialized
hardware version : 0.0
firmware version : 2.4
serial num : C07DC072A10B
pin min/max : 4/8
Using slot 0 with a present token (0x1)
Public Key Object; RSA 2048 bits
label: le-!0412!0445!043e!0434!0441!043e-21067
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d3231303637
Usage: encrypt, verify
...
Certificate Object; type = X.509 cert
label: le-!0412!0445!043e!0434!0441!043e-21067
subject: DN: DC=ru, DC=trest, DC=bany, DC=taziki, OU=\xD0\xA6\xD0\xB5\xD0\xBD\xD1\x82\xD1\x80\xD0\xB0\xD0\xBB\xD1\x8C\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x82\xD0\xB0\xD0\xBC\xD0\xBE\xD0\xB6\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE\xD0\xB5 \xD1\x83\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xB8\xD0\xB5, OU=\xD0\xA6\xD0\xA2\xD0\xA3, OU=vasy, OU=bany, CN=vasytaziki
ID: 6c652d2130343132213034343521303433652130343334213034343121303433652d3231303637

 пробуем сменить PIN код на токене Esmart

# pkcs11-tool -Ol --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Logging in to "ESMART Token".
Please enter User PIN:
....
Сменить PIN код на токене (смарткарте) Esmart
# pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the current PIN:
...

 инициализация токена Esmart. Внимание:вся предыдущая информация стирается

# pkcs11-tool --init-token --label EsmartToken --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so