Цифров подпис от InfoNotary под Ubuntu и подаване в НАП

Ръководството е тествано с UBUNTU 10.10, картов четец ACS ACR38U и смарт карта Charismatics/Siemens. Възможно е при наличие на повече от един сертификат на картата, да не можете да виждате правилния сертификат. Обикновено два сертификата се записват когато подновявате сертификата за втора година. Затова е по-добре да се купува нов и стария винаги да се трие.

Инсталираме необходимите пакети
sudo apt-get install libacr38u libacr38ucontrol0 libpcsclite1 pcscd libpcsclite-dev opensc libccid libengine-pkcs11-openssl pcsc-tools mozilla-opensc openct

Ако вашия картов четец е различен, тези два пакета може да не ги инсталирате: libacr38u libacr38ucontrol0. Потърсете драйвери за вашия четец, а ако няма е възможно да работи и без драйвери.

Отваряме следния файл
sudo gedit /etc/opensc/opensc.conf
Заменяме реда
reader_drivers = openct, pcsc, ctapi;
със
reader_drivers = pcsc;

Вече може да направите тестове дали всичко работи (втората команда се спира с CTRL+C)

sudo /etc/init.d/pcscd stop
sudo /usr/sbin/pcscd -fd
sudo /etc/init.d/pcscd start

pcsc_scan

opensc-tool -l

Други полезни команди
pkcs11-tool
pkcs15-tool

Например, за да промените пина на картата
pkcs15-tool --change-pin

Ако сте въвели 3 пъти погрешен пин, може да деблокирате картата с
pkcs15-tool -u

Инсталирайте цифровия подпис във Firefox
Advanced -> Encryption -> Security Devices -> Load -> /usr/lib/onepin-opensc-pkcs11.so
В нов таб на Firefox напишете about:config, в полето за търсене сложете security.ssl.renego_unrestricted_hosts, редактирайте записа и добавете inetdec.nra.bg (ако има други неща вече в полето, добавете записа на НАП накрая със запетайка).

Би трябвало да можете да влизате вече в електронния портал на НАП.

За да можете да подписвате файлове с цифров подпис и да ги подавате в НАП, изпълнете следните стъпки също:
sudo aptitude install libpcsclite-dev
cd /usr/lib/; sudo ln -s /lib/libpcsclite.so.1.0.0 libpcsclite.so.0

Свалете си debian пакета на scardmanager от InfoNotary

Инсталирайте гo (евентуално променете името ако е излязла по-нова версия)
sudo gdebi infonotary-scardmanager_2.1.0-1_i386.deb

Направете си директория с име work
mkdir -p ~/work

Стартирайте приложението с командата scardmanager, кликнете на сертификата за да се активира менюто за export и експортирайте публичния си ключ в директорията work. Файлът да е с име smartcard. Файлът ще получи разрширение .cer тъй като е в DER формат. Конвертирайте го в PEM форумат
cd ~/work
openssl x509 -in smartcard.cer -inform der -outform pem -out smartcard.pem

В work запишете и четирите удостоверения на на InfoNotary (в момента на писането на статията, файловете се казват cqs-ca.cer, in-csp-root.cer, pqs-ca.cer, qs-ca.cer). Конвертирайте ги и тях
openssl x509 -in cqs-ca.cer -inform der -outform pem -out cqs-ca.crt
openssl x509 -in in-csp-root.cer -inform der -outform pem -out in-csp-root.crt
openssl x509 -in pqs-ca.cer -inform der -outform pem -out pqs-ca.crt
openssl x509 -in qs-ca.cer -inform der -outform pem -out qs-ca.crt

Обединяваме 4-те сертификата в един общ файл
cat cqs-ca.crt in-csp-root.crt infonotary.crt pqs-ca.crt qs-ca.crt > infonotary.crt

Поставете файла, който ще подписвате в work. В нашия случай той е примерно empl2000.txt. Ако файла е генериран под linux, или е пътувал по мейла, вероятно за новите редове във файла се ползва linux format lf и трябва да го конвертирате в windows формат cr lf за да го приемат в НАП. Това може да стане като инсталирате tofrodos
sudo aptitude install tofrodos

След това конвертирайте файла с командата
todos empl2000.txt

Създайте файл ~/work/smartcard.conf и вътре сложете
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/onepin-opensc-pkcs11.so
init = 0

Вземете ID номера на цифровия подпис:
pkcs15-tool --list-certificates

Using reader with a card: Pertosmart Card Reader 00 00
X.509 Certificate [7E7F720B-56DC-46A3-A801-FE51BE70E7BB]
Flags : 2
Authority: no
Path : 3f00501543044501
ID : 38469d51ac1cd8777ff35873909dc833fadfef3d

Вземете и слота където подписа се намира на картата
pkcs11-tool --list-slots

Available slots:
Slot 0 Pertosmart Card Reader 00 00
token label: NETINVEST OOD (PIN)
token manuf: Siemens AG (C)
token model: PKCS#15
token flags: login required, PIN initialized, token initialized
serial num :
Slot 1 Pertosmart Card Reader 00 00
token label: NETINVEST OOD (Secondary Authent
token manuf: Siemens AG (C)
token model: PKCS#15
token flags: login required, PIN initialized, token initialized
serial num :
Slot 2 (empty)
Slot 3 (empty)
Slot 4 (empty)

Слота и ID-то се попълват в командата за подписване на файл. Слагат се към inkey параметъра във формат slot:ID
OpenSSL изисква да се даде пълния път до всеки файл, заменете p с вашето потребителско име. При подписване на файл, смарт картата не трябва да се ползва от друга програма. Примерно не трябва да сте логнати от Firefox в нея.

export OPENSSL_CONF=/home/p/work/smartcard.conf; openssl smime -pk7out -outform der -binary -sign -signer /home/p/work/smartcard.pem -engine pkcs11 -keyform engine -in /home/p/empl2000.txt -out /home/p/empl2000.txt.p7s -inkey 0:38469d51ac1cd8777ff35873909dc833fadfef3d -certfile /home/p/work/infonotary.crt