в. 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