LINUX-BG   Адрес : http://www.linux-bg.org
Електронен подпис за работа под Linux и OpenSSL
От: RealEnder
Публикувана на: 9-04-2010
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=422986481

в. 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 Обединение на няколко мрежови интерфейса в един >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.18 usr + 0.02 sys = 0.20 CPU)