Альфабанковского клиента с etoken под линуксом запустил

Вношу посильный вклад в светлое дело OSS. С моей точки зрения, проблема в переходе на линукс для простого пользователя - исключительно в жесткой завязке финансового софта на винды. У меня это банк-клиенты и сдача налоговой отчетности плюс бухгалтерия. Сегодня сделал великое дело - остатки банковского софта запустил под линуксом. Осталось разобраться с бухгалтерией и отчетностью, но я в этом направлении работаю.

Так как в альфабанке отказались комментировать работу своей платформы под линуксом, пришлось разбираться самому. Взял жабовскую консоль и немножко поковырял там гвоздиком. В итоге все запустилось под Ubuntu 8.04. Единственная проблема, которая может вообще быть - с etoken-овскими проприетарными драйверами.

Данное руководство подойдет для всех систем на основе ibank и систем, которые используют IAIK для “расширенной” связки между JAVA и PKCS11.

Итак, порядок действий.

1. Ставим драйверы etoken

Проблемы если и будут, то только с ними. Если драйверы заработают - все остальное будет в порядке. Претензии - в Aladdin.

Берем на сайте aladdin.ru любую версию, которая больше нравится 😃 . Возможные проблемы: на самых последних сборках убунты (9.04) драйверы отказались работать. Когда выйдут версии под новое ядро - никому не известно. При желании, выкрутиться можно как-то так.

В аладдине проблему подтвердили, но ничем не обрадовали. Поэтому на тестовой виртуальной машине для чистоты эксперимента использовал Ubuntu 8.04 LTS

(!!!) Перед тем как двигаться дальше, убедитесь, что у вас полностью работает поддержка eToken от аладдина. Если PKI Client не показывает содержимого ключа - продолжать нет смысла.

Теперь настраиваем то, чего не хватило альфабанку

Так как цифровые подписи там реализованы при участии Java, то любопытные могут открыть java-консоль, включить лог ошибок, и все посмотреть. После каждого шага можно пытаться залогиниться в “центр сертификации”, и наблюдать за новыми ошибками 😃 .

2. Ставим Java

(!) Обратите внимание, что софт wrapper-а PKCS11, который используется в альфабанке, заточен под Java от Sun, поэтому ставить IceTea и прочие альтернативы НЕ НАДО. Наверное, можно попробовать пересобрать исходники под другую жабу, но я этого не пробовал.

Java ставится стандартным сособом, из репозиториев, комментировать здесь нечего.

3. Ставим wrapper для IAIK (первая часть, pkcs11wrapper)

Любопытные могут прочитать тут, хотя файлы там старые (не поддерживают проброс нескольких функций, которые использует альфабанк). Свежую версию я скачал на сайте разработчиков jce.iaik.tugraz.at/download/ . Так как лицензия довольно свободна, то прилагаю архив, чтобы вам не возиться с регистрациями. И на случай, если кто-то захочет все запускать на других платформах или портировать на новые (например, летом выйдут очень интересные нетбуки на ARM).

На убунте я скопировал .so-библиотеку в каталог /usr/lib , чтобы при обновлении java ничего не переставлять.

После этого в консоли пропали ошибки, что врапер не найден, и появилась ошибка, что не удается инициализировать модуль eTpkcs11.

4. Создаем symlink на модуль pkcs11 для eToken.

Так как девелоперы драйверов и платформы иногда плохо дружат с головой, то название модулей eToken различается под Windows и Линукс. Лечится просто.

  • идем в каталог /usr/lib
  • создаем там ссылку “eTpkcs11” на файл “libeTPkcs11.so” (это симлинк, в том же каталоге)

(!!!) Обратите внимание, что буквы Р в разном регистре. Быдлокодинг, блин. Девелоперам за такое - луч ненависти и кровавого поноса.

Теперь веб-клиент начинает понимать пин-код, и показывает сертификаты. Но при попытке залогиниться или авторизоваться, в джава-консоли выдается ошибка, что не найден какой-то метод в классе IAIK.

5. Ставим остатки IAIK (часть 2, java)

Берем jar-файл из архива, и копируем туда, где java его будет нормально видеть. На убунте у меня получился такой путь:

/usr/lib/jvm/java-6-sun/jre/lib/ext

По идее этого должно быть достаточно, но почему-то у меня в консоли полезли ошибки вида “Access Denied”.

Как временное решение - создал в домашней папке файл .java.policy и написал там

grant {
permission java.security.AllPermission;
};

Вообще такие политики создавать категорически нельзя. Но я совершенно не разбираюсь в линуксовой жабе, поэтому пока сделал так и пошел искать более опытных товарищей. Естественно, можно перекрутить все конфигурационные файлы, но мне больше нравится, когда работают пакеты, поставленные из репозитория, без измнений. Как только кто-нибудь умный скажет мне более правильный способ - сразу поменяю.

И вообще, надо иметь в виду, что я не великий знаток линукса. В моем распоряжении был только здравый смысл, гугл, молоток и гвозди. Ну и плюс отсутствие техподдержки со стороны альфабанка, где говорили что под линуксом все вообще не работает. Ведь ежу понятно, что веб+java должны работать на любых платформах. Вопрос только в правильной настройке. Тем же эстонцам, на которых давал ссылку, почему-то было не впадлу написать документацию и под линукс и под macos. А у нас какой-то “макдональдс” - на любой нестандартный вопрос посылают лесом. Хотя банк не самый дешевый.

Все!

Теоретически etoken работает со свободными драйверами OpenCT/OpenSC, и проприетарщину можно было бы выкинуть, но есть 2 проблемы:

  1. У них другой формат хранения данных. Точнее, это драйверы aladdin не соответствуют спецификации PKCS15 (хранение сертификатов). На страничке разработчиков OpenCT написано, что Aladdin появился на рынке до того, как возник стандарт PKCS15, поэтому к проблеме надо относиться с пониманием. Правильный метод - записать сертификат в ключ средствами OpenCT/OpenSC.

  2. Альфабанк говорит “на etoken и не е@#т”. Получить сертификат в чистом виде, чтобы самостоятельно записать в ключ, у них нельзя. Они еще для полного счастья делают жесткую привязку серийного номера ключа к логину. Тоже песец как “удобно”.

Поэтому в данном конкретном случае остается только уродоваться с проприетарными драйверами.

Пояснения

Что такое IAIK. Это библиотека для доступа к PKCS11 (всякая шифровальная муть) из Java-апплетов. Поддержка PKCS11, которая встроена в Java - довольно базовая. Поэтому разработчики веб-приложений часто используют IAIK. Подробности можно почитать на сайте разработчиков. По совершенно непонятным причинам эту библиотеку в linux-репозитории еще никто не выложил. Но лицензия именно на враппер PKCS11 там довольно свободна, хоть и не GPL.

Откуда взялась вся эта уличная магия. Смотрелся лог ошибок в консоли JAVA и тексты ошибок забивались в гугл. Плюс ловкость рук и немного терпения, эдак на 10 часов личного времени. И вообще, не стоит бояться лишний раз посмотреть лог ошибок. Иногда решение бывает элементарным.

Куда обращаться, если не работает

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

------------------------
Написал тикет в Альфабанк. Попросил нарезать из этого поста неофициальный FAQ для клиентов. Я конечно понимаю, что суппорт у них не занимается линуксом, но надеюсь что здравый смысл еще не заблудился в дебрях монополизма. В конце концов, неофициальный FAQ - это намного лучше, чем посылание лесом со словами “ставьте XP если хотите работать с нашим банком”.

iaikPkcs11Wrapper1.2.17.zip

  • 9421
Comments
boroda_de

Обратите внимание, что буквы Р в разном регистре.

За такое расстреливать нужно. Из рогатки.

Vitaly

Угу. Подвешивать вниз головой на ближайшем фонарном столбе. Причем не за ноги, а за кое-что другое.

Лелик говорит, у него на столе лежит метровый обрезок толстенного обрезиненного силового кабеля, который удобно ложится в руку, и которым можно лупить программистов по голове и по пальцам.

Matros_G

Прочитал всё. Из прочитанного понял только то, что мои сегодняшние пляски с бубном (безуспешные!) в попытках поставить Макось на писюк — крестики-нолики против шашек рендзю.

lelik

Прямого софта не бывает в принципе, равно как и пряморуких программеров. Все - более или менее стройная система костылей и подпорок.

Matros_G
lelik;bt18363

Прямого софта не бывает в принципе

А как же Тетрис?

SGordon

Не знаю, про которую версию тетриса вы пишите, у пажитнова наверно все было не так плохо, не проверял … Но мой еще как глючил -))

по-поводу политики безопасности java (пример файла .java.policy под Mac OS X):

grant {
permission java.lang.RuntimePermission “loadLibrary.pkcs11wrapper”;
permission java.io.FilePermission “/Library/Java/Extensions/x86_64/libpkcs11wrapper.jnilib”, “read”;
permission java.io.FilePermission “/Library/Java/Extensions/libpkcs11wrapper.jnilib”, “read”;
permission java.io.FilePermission “/Library/Java/Extensions/iaikPkcs11Wrapper.jar”, “read”;
};

Vitaly

Спасибо. Честно говоря, я пришел к выводу, что проще использовать платформу БИФИТ и не париться. 😃 . Чего и другим желаю.

Приветствую. А, в итоге, какие файлы из iaikPkcs11Wrapper1.2.17.zip пошли в дело ? Только iaikPkcs11Wrapper.jar и libpkcs11wrapper.so соответствующей архитектуры ? Что-то не получается завести, причём я явно где-то рядом топчусь - по индикации ключа виден обмен, не генерируется только вот первый сертификат, причём просто без вывода сообщения об ошибках.

Что касается БИФИТ - это именно с тем же Альфабанком ?

Vitaly

Уже не помню. Наверное. Ошибки должны быть в консоли java.

БИФИТ - www.bifit.ru/ru/company/clients/index.html

В списках по ссылке Альфабанка не видно… Надо полагать, что банк выбран другой ?

Понятно, спасибо.

Дополню, чтобы в одном месте было. При попытке расторгнуть договор, в Альфабанке сказали “подождите, мы постараемся что-нибудь сделать” (прогресс, что ли…). В итоге выяснилось, что настроил я всё, просто не работает генерация ключей. Принесли нотебук, на нём сделали. С готовыми ключами работает. Посмотрю, поправят проблему, или как…

Ещё нашлась проблема с rpm-кой от Aladdin. Не знаю, как там было с deb, а в pkiclient-5.00.28-0.i386.rpm присутствуют копии системных библиотек QT4: /usr/lib/eToken/libQt*,
а в /etc/ld.so.conf.d помещается файлик с соответствующим путём.

В результате, например, в Altlinux, накрываются все приложения, которые слинкованы с библиотеками qt4. В Aladdin-е проблему условно приняли: сказали, что дистрибутив не поддерживается, но, может, что-нибудь сделают. Если что [Ticket#2010093010000149]. Дел там - слинковать etProps статически…

Для себя я убрал лишнее из ld.so.conf.d, переименовал etProps в etProps.bin и сделал скрипт etProps:

==
#!/bin/bash

export LD_LIBRARY_PATH=/usr/lib/eToken:$LD_LIBRARY_PATH
exec /usr/bin/etProps.bin &
==