LINUX.ORG.RU

Смарткарта в OpenBSD

 ,


1

3

Пытаюсь настроить работу Rutoken-Lite в OpenBSD.
Вводные: OpenBSD 7.7
по программам:

1 pcsc-lite-2.3.1
2 pcsc-tools-1.7.3
3 opensc-0.26.1
4 ccid-1.6.2

Устройство определяется так:

fan# dmesg | grep Rut
ugen0 at uhub4 port 3 "Aktiv Rutoken lite" rev 2.00/1.00 addr 4

Рутокен имеет VendorID - 0a89
Но у меня почему-то строка пустая:

fan# lsusb
Bus 000 Device 004: ID 0a89:0025

Не знаю влияет это как-то или нет?

Вывод usbdevs:

fan# usbdevs -v                                                                                                               
Controller /dev/usb0:
addr 04: 0a89:0025 Aktiv, Rutoken lite
	 full speed, power 100 mA, config 1, rev 1.00
	 driver: ugen0

Права на usb0:

fan# ls -l | grep usb0
crw-rw----  1 root  wheel      61,   0 May 12  2025 usb0

В группе wheel состаю:

fan$ id
uid=1000(fan) gid=1000(fan) groups=1000(fan), 0(wheel), 5(operator), 118(_shutdown), 553(_saned)

Запускаю pcscd:

fan# rcctl start pcscd                                                         
pcscd
(ok)
fan#

Проверяю поддержку устройства:

fan# opensc-explorer                                                           
OpenSC Explorer version 0.26.1
No smart card readers found.

Соответственно сканирование уходит в бесконечность:

fan# pcsc_scan  
PC/SC device scanner
V 1.7.3 (c) 2001-2024, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
Waiting for the first reader... |

И дальше ничего не происходит.
С таким же набором программ в Slackware 15.0 сканирование работает.



Последнее исправление: RodoSlav (всего исправлений: 3)

Насколько я помню, pcsc работает поверх libusb того же автора. Возможно, дело в версии этой библиотеки.

dmaj
()

С таким же набором программ в Slackware 15.0 сканирование работает

В слаке и вайфай работает искаропки. В опенке же «сосурити фёстингом» занимаются в основном. Помню, одмины разных подкроватных лолхостов с бсдями надували щоки шта их-то бсди требуют кококих-то невпупенных «экзотерических» ЗНАНИЙ(ТМ) Вот и наслаждайсо.

slackwarrior ★★★★★
()
Ответ на: комментарий от dmaj

Версия libusb текущая для моей сборки:

fan# pkg_info -Q libusb
libusb1-1.0.27 (installed)

Обнаружил, что Рутокен имеет VendorID - 0a89
Но у меня почему-то строка пустая:

fan# lsusb
Bus 000 Device 004: ID 0a89:0025

Интересно, это влияет на работу pcsc_scan?

RodoSlav
() автор топика
Последнее исправление: RodoSlav (всего исправлений: 1)

выхлоп stace давай, без него телепаты настроиться на прием не могут.

ах да, еще надо собрать opensc и тузлу с флажком -g

ckotctvo
()
Последнее исправление: ckotctvo (всего исправлений: 1)

А с каких пор Rutoken-Lite стал смарткартой?

Для начала надо взять правильную модель Rutoken ECP 3, желательно 3120 Touch.

sanyo1234
()
Ответ на: комментарий от ckotctvo

strace в OpenBSD вроде не подвозили :)

fan# kdump

выдаёт следующее:

98572 pcsc_scan RET   write 7
 98572 pcsc_scan CALL  nanosleep(0x63ce460ac60,0)
 98572 pcsc_scan STRU  struct timespec { 0.100000000 }
 98572 pcsc_scan RET   nanosleep 0
 98572 pcsc_scan CALL  write(1,0x63d97d68000,0x7)
 98572 pcsc_scan GIO   fd 1 wrote 7 bytes
       "\^[[3D | "
 98572 pcsc_scan RET   write 7
 98572 pcsc_scan CALL  nanosleep(0x63ce460ac60,0)
 98572 pcsc_scan STRU  struct timespec { 0.100000000 }
 98572 pcsc_scan PSIG  SIGINT caught handler=0x63ade151710 mask=0<>
 98572 pcsc_scan RET   nanosleep -1 errno 4 Interrupted system call
 98572 pcsc_scan CALL  sigreturn(0x63ce460a780)
 98572 pcsc_scan RET   sigreturn JUSTRETURN
 98572 pcsc_scan CALL  kbind(0x63ce460ab98,24,0x3546dcf54c5a070)
 98572 pcsc_scan RET   kbind 0
 98572 pcsc_scan CALL  socket(AF_UNIX,0x8001<SOCK_STREAM|SOCK_CLOEXEC>,0)
 98572 pcsc_scan RET   socket 4
 98572 pcsc_scan CALL  connect(4,0x63ce460ab80,27)
 98572 pcsc_scan STRU  struct sockaddr { AF_UNIX, "/var/run/pcscd/pcscd.comm" }
 98572 pcsc_scan NAMI  "/var/run/pcscd/pcscd.comm"
 98572 pcsc_scan RET   connect 0
 98572 pcsc_scan CALL  fcntl(4,F_GETFL)
 98572 pcsc_scan RET   fcntl 2
 98572 pcsc_scan CALL  fcntl(4,F_SETFL,0x6<O_RDWR|O_NONBLOCK>)
 98572 pcsc_scan RET   fcntl 0
 98572 pcsc_scan CALL  poll(0x63ce460ab98,1,INFTIM)
 98572 pcsc_scan STRU  struct pollfd { fd=4, events=0x4<POLLOUT>, revents=0x4<POLLOUT> }
 98572 pcsc_scan RET   poll 1
 98572 pcsc_scan CALL  sendto(4,0x63ce460abe8,0x8,0x400<MSG_NOSIGNAL>,0,0)
 98572 pcsc_scan GIO   fd 4 wrote 8 bytes
RodoSlav
() автор топика
Последнее исправление: RodoSlav (всего исправлений: 1)
Ответ на: комментарий от RodoSlav
  1. А он дружит хотя бы с OpenSC для начала?

  2. Какой смысл даже пытаться с таким недо рутокеном? Безопасности от него нет никакой.

sanyo1234
()

...дальше ничего не происходит...

И не произойдёт. Это опёнок, детка!

sparkie ★★★★★
()
Ответ на: комментарий от sanyo1234

Дружит.
В Slackware 15.0 проверил.
В моём случае речь не о безопасности, а возможности электронной подписи с последующей сдачей отчётности в ФНС.

RodoSlav
() автор топика
Ответ на: комментарий от Atlant
fan# usbdevs -v                                                                                                               
Controller /dev/usb0:
addr 04: 0a89:0025 Aktiv, Rutoken lite
	 full speed, power 100 mA, config 1, rev 1.00
	 driver: ugen0

Права на usb0:

fan# ls -l | grep usb0
crw-rw----  1 root  wheel      61,   0 May 12  2025 usb0

В группе wheel состаю:

fan$ id
uid=1000(fan) gid=1000(fan) groups=1000(fan), 0(wheel), 5(operator), 118(_shutdown), 553(_saned)
RodoSlav
() автор топика
Ответ на: комментарий от sanyo1234

Хотя извиняюсь, облом:

fan# opensc-explorer                                                           
OpenSC Explorer version 0.26.1
No smart card readers found.

Что делать?
При этом версия Opensc в Slackware: 0.23.0
В OpenBSD: 0.26.1

RodoSlav
() автор топика
Ответ на: комментарий от Atlant

захожу под пользователем.
Потом делаю su.

RodoSlav
() автор топика
Ответ на: комментарий от RodoSlav

с учетом того что у тебя lite, а согласно руководствам в нем нет шифрования. то тебе так и так надо начинать с установки криптоппро, а в криптопро своя поддержка порой токенов была(вроде только с 5 версии начали разрешать через стандарт PKCS#11).

Если бы у тебя был рутокен ЭЦП 3.0 (или 2.0 который сейчас не разрешается как криптопровайдер использовать) - то вероятно отработало. По крайней мере под linux - этот вариант работает, при условии генерации ключевой информации на токене через PKCS#11.

Atlant ★★★★★
()
Ответ на: комментарий от sanyo1234

Rutoken ECP 2

так я о том же. Рутокен ЭЦП отрабатывает стандарт PKCS#11.

Atlant ★★★★★
()
Ответ на: комментарий от Atlant

Думаю, что КриптоПро здесь не причём, т.к. у меня в Slackware так же нет КриптоПро, но при этом pcsc_scan работает.
А в VirtualBox установлен Debian 10, вот там да полный фарш.
И ФНС всё принимает и переваривает на ура.

RodoSlav
() автор топика
Последнее исправление: RodoSlav (всего исправлений: 2)
Ответ на: комментарий от RodoSlav

Из интересного в дампе ядра после запуска Opensc-explorer:

53586 opensc-explorer CALL  setsockopt(8,6<tcp>,1,0x7c08a9aaa9f4,4)
53586 opensc-explorer RET   setsockopt -1 errno 42 Protocol not available

53586 opensc-explorer CALL  open(0xe1271640d80,0<O_RDONLY>)
53586 opensc-explorer NAMI  "/usr/local/lib/charset.alias"
53586 opensc-explorer RET   open -1 errno 2 No such file or directory

53586 opensc-explorer CALL  connect(8,0x7c08a9aab030,106)
53586 opensc-explorer STRU  struct sockaddr { AF_UNIX, "/tmp/dbus-nQQzkVqSQK" }
53586 opensc-explorer NAMI  "/tmp/dbus-nQQzkVqSQK"
53586 opensc-explorer RET   connect 0

53586 opensc-explorer CALL  read(9,0xe123a5a0997,0x1)
53586 opensc-explorer RET   read -1 errno 35 Resource temporarily unavailable

53586 opensc-explorer CALL  kbind(0x7c08a9aab3d8,24,0xd8423f1d79211b53)
53586 opensc-explorer RET   sendmsg -1 errno 32 Broken pipe
RodoSlav
() автор топика
Ответ на: комментарий от RodoSlav

setsockopt(8,6,1,0x7c08a9aaa9f4,4)
setsockopt -1 errno 42 Protocol not available

А что не так с протоколом интересно?

RodoSlav
() автор топика

Запустил pcscd в отладочном режиме:

fan# pcscd -afd 
00000000 ../pcsc-lite-2.3.1/src/debuglog.c:396:DebugLogSetLevel() debug level=debug
00000815 ../pcsc-lite-2.3.1/src/configfile.l:366:DBGetReaderList() Parsing conf file: /etc/ccid
00000019 ../pcsc-lite-2.3.1/src/pcscdaemon.c:669:main() pcsc-lite 2.3.1 daemon ready.
00000454 ../pcsc-lite-2.3.1/src/pcscdaemon.c:752:main() Using drivers directory: /usr/local/lib/pcsc/drivers
00005269 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:485:HPEstablishUSBNotifications() Driver ifd-ccid.bundle does not support IFD_GENERATE_HOTPLUG. Using active polling instead.
00000009 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:494:HPEstablishUSBNotifications() Polling forced every 1 second(s)
06308625 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:627:HPAddHotPluggable() Adding USB device: 0:8:0
00000120 ../pcsc-lite-2.3.1/src/readerfactory.c:1104:RFInitializeReader() Attempting startup of Aktiv Rutoken lite 00 00 using /usr/local/lib/pcsc/drivers/ifd-ccid.bundle/Contents/OpenBSD/libccid.so
00005995 ../pcsc-lite-2.3.1/src/readerfactory.c:977:RFBindFunctions() Loading IFD Handler 3.0
00000319 ../ccid-1.6.2/src/ifdhandler.c:2130:init_driver() Driver version: 1.6.2
00001437 ../ccid-1.6.2/src/ifdhandler.c:2152:init_driver() LogLevel: 0x0003
00000009 ../ccid-1.6.2/src/ifdhandler.c:2163:init_driver() DriverOptions: 0x0000
00000606 ../ccid-1.6.2/src/ifdhandler.c:93:CreateChannelByNameOrChannel() Lun: 0, device: usb:0a89/0025:libusb-1.0:0:8:0
00000157 ../ccid-1.6.2/src/ccid_usb.c:331:OpenUSBByName() Using: /usr/local/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
00000992 ../ccid-1.6.2/src/ccid_usb.c:349:OpenUSBByName() ifdManufacturerString: Ludovic Rousseau (ludovic.rousseau@free.fr)
00000005 ../ccid-1.6.2/src/ccid_usb.c:350:OpenUSBByName() ifdProductString: Generic CCID driver
00000004 ../ccid-1.6.2/src/ccid_usb.c:351:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
00000854 ../ccid-1.6.2/src/ccid_usb.c:748:OpenUSBByName() Found Vendor/Product: 0A89/0025 (Aktiv Rutoken lite)
00000005 ../ccid-1.6.2/src/ccid_usb.c:750:OpenUSBByName() Using USB bus/device: 0/8
00000009 ../ccid-1.6.2/src/ccid_usb.c:814:OpenUSBByName() bNumDataRatesSupported is 0
04996404 ../ccid-1.6.2/src/ccid_usb.c:963:WriteUSB() write failed (0/8): LIBUSB_ERROR_TIMEOUT
04999902 ../ccid-1.6.2/src/ccid_usb.c:963:WriteUSB() write failed (0/8): LIBUSB_ERROR_TIMEOUT
05000001 ../ccid-1.6.2/src/ccid_usb.c:963:WriteUSB() write failed (0/8): LIBUSB_ERROR_TIMEOUT
00000009 ../ccid-1.6.2/src/ifdhandler.c:181:CreateChannelByNameOrChannel() failed
00000783 ../ccid-1.6.2/src/ccid_usb.c:208:close_libusb_if_needed() libusb_exit
00000108 ../pcsc-lite-2.3.1/src/readerfactory.c:1145:RFInitializeReader() Open Port 0x200000 Failed (usb:0a89/0025:libusb-1.0:0:8:0)
00000004 ../pcsc-lite-2.3.1/src/readerfactory.c:371:RFAddReader() Aktiv Rutoken lite init failed.
00000006 ../pcsc-lite-2.3.1/src/readerfactory.c:627:RFRemoveReader() UnrefReader() count was: 1
00000003 ../pcsc-lite-2.3.1/src/readerfactory.c:1158:RFUnInitializeReader() Attempting shutdown of Aktiv Rutoken lite 00 00.
00000003 ../pcsc-lite-2.3.1/src/readerfactory.c:1014:RFUnloadReader() Unloading reader driver.
00000097 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:749:HPAddHotPluggable() Failed adding USB device: Aktiv Rutoken lite
^[
^C99999999 ../pcsc-lite-2.3.1/src/pcscdaemon.c:190:signal_thread() Received signal: 2
00000011 ../pcsc-lite-2.3.1/src/pcscdaemon.c:224:signal_thread() Preparing for suicide
00416588 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:815:HPReCheckSerialReaders()
00591597 ../pcsc-lite-2.3.1/src/hotplug_libusb.c:543:HPEstablishUSBNotifications() Hotplug stopped
01008418 ../pcsc-lite-2.3.1/src/winscard_svc.c:158:ContextsDeinitialize() remaining threads: 0
00000033 ../pcsc-lite-2.3.1/src/readerfactory.c:1388:RFCleanupReaders() entering cleaning function
00000065 ../pcsc-lite-2.3.1/src/pcscdaemon.c:807:at_exit() cleaning /var/run/pcscd

есть какие-нибудь мысли?

RodoSlav
() автор топика
Ответ на: комментарий от RodoSlav

Немного проанализировал ccid_usb.c.
Перед write failed есть код:

#ifdef ENABLE_ZLP
	if (usbDevice[reader_index].ccid.zlp)
	{ /* Zero Length Packet */
		int dummy_length;

		/* try to read a ZLP so transfer length = 0
		 * timeout of 10 ms */
		(void)libusb_bulk_transfer(usbDevice[reader_index].dev_handle,
			usbDevice[reader_index].bulk_in, NULL, 0, &dummy_length, 10);
	}
#endif

т.е. 10 мс не хватает для опроса устройства?
Нужно сделать больше?
Или проблема в другом?

RodoSlav
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.