от RealEnder(9-04-2010)

рейтинг (24)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

в. 1.2, Април 2010

Целта на настоящото ръководство е да опише стъпките, необходими за инсталиране и конфигуриране на електронен подпис под Linux операционни системи, както и използването на OpenSSL за подписване на файлове.

При разработването на ръководството е използвано Ubuntu 9.10 Karmic Koala 64bit, но стъпките са приложими и аналогични и за останалите дистрибуции. За примера е използван електронен подпис на StampIt върху смарткарта Siemens CardOS V4.3B през CCID съвместим USB четец ACS ACR 38U-CCID. Използват се изцяло софтуерни библиотеки и приложения с отворен код.


1. Базови пакети
Вероятно вече имате инсталирани повечето от необходимите базови пакети. Изпълнете следната команда, за да подсигурите наличието им:

alex@volatile:~$ sudo apt-get install openct opensc libccid mozilla-opensc libengine-pkcs11-openssl pcsc-tools


След успешна инсталация можете да използвате следната команда за да проверите състоянието при включен четец със сертификат за електронен подпис:

alex@volatile:~$ pcsc_scan

PC/SC device scanner

V 1.4.15 (c) 2001-2009, Ludovic Rousseau

Compiled with PC/SC lite version: 1.4.102

Scanning present readers...

0: ACS ACR 38U-CCID 00 00


Thu Mar 18 15:29:43 2010

Reader 0: ACS ACR 38U-CCID 00 00

Card state: Card inserted, Shared Mode,


...


Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):

3B F2 18 00 02 C1 0A 31 FE 58 C8 08 74

Siemens CardOS V4.3B


2. Конфигуриране на Firefox/Thunderbird/OpenOffice
Първо инсталирайте базовите (root) сертификати на Вашия Доставчик на удостоверителни услуги. Необходимо е да се инсталира цялата верига (Root CA, Intermediate CA и т.н.) В случая със StampIt това са StampIt Domestic Root CA и StampIt Domestic CA NGL, които можете да свалите от страницата на доставчика. Инсталацията става през менюто Edit -> Preferences -> Advanced -> Encryption , където натискате бутона View Certificates, избирате Authorities и след това Import. Когато изберете даденият базов сертификат, отбележете и трите кутийки, отнасящи се до целите за използване на сертификатите: Trust this CA to identify web pages, Trust this CA to identify email users и Trust this CA to identify software developers.
За достъп до електронният подпис ще използвате PKCS#11 интерфейс. За да го конфигурирате изберете Edit -> Preferences -> Advanced -> Encryption , където за удобство изберете Select one automatically и натиснете бутонът Security Devices. От там натиснете Load и укажете пътят към PKCS#11 библиотеката. За OpenSC под Ubuntu 9.10 библиотеката се намира тук: /usr/lib/onepin-opensc-pkcs11.so . За дистрибуциите, които не са обновили версията на OpenSC, използвайте базовата библиотека /usr/lib/opensc-pkcs11.so
Ако сте инсталирали друга PKCS#11 библиотека се консултирайте с ръководството на потребителя на избраният от Вас доставчик.
За да се подвключи коректно устройството може да се наложи да извадите и свържете отново четецът, както и да рестартирате Firefox/Thunderbird.
OpenOffice работи с конфигурираните Security devices от профила на Firefox и при коректна инсталация там също ще можете да подписвате цифрово документи през менюто File -> Digital signatures -> Add , от където избирате сертификата си.


3. Конфигуриране на драйверите
Ако използвате /usr/lib/onepin-opensc-pkcs11.so няма нужда от настройките в тази точка.
Ако използвате смарткарта с един сертификат (общият случай), и имате проблеми с няколкократно визуализиране на диалога за PIN, можете да коригирате следните параметри във файла /etc/opensc/opensc.conf , секция app opensc-pkcs11 :

max_virtual_slots=1;
slots_per_card=1;
num_slots=1;


4. Подписване на файл с OpenSSL със сертификат на смарткарта в detached PKCS#7 структура
Преди да генерирате подпис е необходимо да имате на разположение следите файлове в PEM формат: публичната част (в примера Alex_Stanev.pem) и междинния базов сертификат от веригата (в примера StampIT_Domestic_CA_NGL_base64.crt)
Освен това е необходимо и да извлечете и идентификатора сертификата на смарткартата по следният начин:

alex@volatile:~$ pkcs15-tool --list-certificates

Using reader with a card: ACS ACR 38U-CCID 00 00

X.509 Certificate [X.509V3 Certificate 0]

Flags : 2

Authority: no

Path : 3f00501543044303

ID : ac89c641d155029139df57d70c71a706


X.509 Certificate [X.509V3 CA Certificate 0]

Flags : 2

Authority: no

Path : 3f00501543044302

ID : 4fa93c2efb44e05b6e1c89f0fecb6a10

alex@volatile:~$ pkcs11-tool --list-slots

Available slots:

Slot 0 (empty)

Slot 1 (empty)

Slot 2 ACS ACR 38U-CCID 00 00

token label: CardOS V4.3B PKCS15 profile (PIN

token manuf: Siemens AG (C)

token model: PKCS#15

token flags: login required, PIN initialized, token initialized

serial num : 3030383037383834

Slot 3 (empty)

Slot 4 (empty)

Slot 5 (empty)

Slot 6 (empty)

Slot 7 (empty)

Slot 8 (empty)

Slot 9 (empty)

Slot 10 (empty)

Slot 11 (empty)

Slot 12 (empty)

Slot 13 (empty)

Slot 14 (empty)

Slot 15 (empty)


Подписването се извършва като първо се инициализира OpenSSL PKCS#11 engine и след това се подават необходимите файлове и параметри. В примера по-долу трябва да заместите оцветените полета с Вашите стойности:

alex@volatile:~$ openssl

OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/onepin-opensc-pkcs11.so

(dynamic) Dynamic engine loading support

[Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so

[Success]: ID:pkcs11

[Success]: LIST_ADD:1

[Success]: LOAD

[Success]: MODULE_PATH:/usr/lib/onepin-opensc-pkcs11.so

Loaded: (pkcs11) pkcs11 engine

OpenSSL> smime -pk7out -outform der -binary -sign -signer Alex_Stanev.pem -engine pkcs11 -keyform engine -in data.txt -out data.p7s -inkey 2:ac89c641d155029139df57d70c71a706 -certfile StampIT_Domestic_CA_NGL_base64.crt

engine "pkcs11" set.

PKCS#11 token PIN:

OpenSSL>


Горният пример генерира PKCS#7 detached сигнатура в DER формат на файла data.txt в data.p7s , с включен междинен базов сертификат.

Ръководството в PDF формат можете да свалите от тук: https://inetdec.nra.bg/docs/DigSig_linux_howto.pdf



<< Електронен подпис на Банксервиз под Ubuntu 9.10 и 10.04 | FreeBSD 8.0 Обединение на няколко мрежови интерфейса в един >>