Хранилище сертификатов в офисном пакете LibreOffice

в 17:30, , рубрики: libreoffice, linux, nss, open source, pkcs10, pkcs11, token, x509 v3, информационная безопасность, Программирование, электронное правительство

image LibreOffice — мощный офисный пакет. LibreOffice бесплатен и имеет открытый исходный код.
Офисный пакет содержит в себе текстовый и табличный процессор, программу для подготовки и просмотра презентаций, векторный графический редактор, систему управления базами данных и редактор формул:

image
Более того проводимая политика импортозамещения, когда на столах чиновников вместо MS Windows все чаще появляются отечественные форки Linux, способствует широкому распространению пакета LibreOffice и в органах государственного управления.
LibreOffice интенсивно развивается и с момента своего появления вобрал в себя множество дополнительных возможностей. Одной из таких возможностей является электронная подпись (цифровая подпись в терминологии LibreOffice) документа. Для формирования электронной подписи (Файл->Цифровые подписи->Цифровые подписи …->Подписать документ) используются личные сертификаты:

image

Глядя на картинку у неискушенного пользователя (а тем более у чиновника) возникает глубокое чувство непонимания: что за файл собирается открываться, что за пароль должен вводиться!
Сразу отметить, что это не очень удачный перевод разработчиков LibreOffice. Речь идет не о файле, а о токене/смарткарте PKCS#11, и не о пароле, а о пользовательском PIN-коде для токена. Должно быть что-то следующего вида:

image

Тут мы подошли к главному вопросу: где и как хранятся сертификаты, которые LibreOffice использует для формирования электронной подписи документов?
В качестве хранилища сертификатов LibreOffice использует, как правило, хранилища сертификатов, создаваемых и поддерживаемых продуктами Mozilla (Firefox, Thunderbird, SeaMonkey). По умолчанию это хранилище сертификатов почтового клиента Thunderbird (Сервис->Параметры…->Безопасность->Сертификат…):

image

Хранилища сертификатов для продуктов Mozilla создаются средствами пакета NSS (Network Security Services). С помощью утилит командной строки можно создать и свое хранилище сертификатов, например:

bash-4.3$ cd /home/a513/tmp 
bash-4.3$ mkdir db_for_libre 
bash-4.3$ modutil -create -dbdir /home/a513/tmp/db_for_libre 
WARNING: Performing this operation while the browser is running could cause 
corruption of your security databases. If the browser is currently running, 
you should exit browser before continuing this operation. Type  
'q <enter>' to abort, or <enter> to continue:  
bash-4.3$ ls -l db_for_libre 
итого 60 
-rw------- 1 a513 a513 65536 авг 31 16:49 cert8.db 
-rw------- 1 a513 a513 16384 авг 31 16:49 key3.db 
-rw------- 1 a513 a513 16384 авг 31 16:49 secmod.db 
bash-4.3$

Созданное хранилище сертификатов в каталоге /home/a513/tmp/db_for_libre содержит три базы данных, а именно cert8.db, key3.db и secmod.db. Для их создания используется старая версия базы данных Berkeley (обычно она описывается в документах NSS как« DBM ») в отличии от хранилища сертификатов, скажем, в google-chrome, для создания и поддержки которого также используется пакет NSS, но для поддержки баз данных (cert9.db, key4.db и pkcs11.txt) в хранилище используется механизм SQLite3. Для работы и с тем и другим хранилищем используются одни и те же утилиты NSS, просто в параметре –d (каталог хранилища) перед путем к хранилищу, если вы собираетесь работать с новым форматом (SQLite3) хранилища, достаточно указать префикс: -d sql:<путь к хранилищу>.
Более того, также просто из хранилища сертификатов старого формата (cert8.db, key3.db и secmod.db) создается и хранилище в новом формате (cert9.db, key4.db и pkcs11.txt). Для этого достаточно выполнить утилиту работы с сертификатами certutil в режиме просмотра ключей (-K) или сертификатов (-L) с параметром –X:

bash-4.3$ ls -l /home/a513/tmp/db_for_libre/ 
итого 60 
-rw------- 1 a513 a513 65536 авг 31 17:56 cert8.db 
-rw------- 1 a513 a513 16384 авг 31 17:56 key3.db 
-rw------- 1 a513 a513 16384 авг 31 16:49 secmod.db 
bash-4.3$ certutil -L -d sql:/home/a513/tmp/db_for_libre -X  
Certificate Nickname             Trust Attributes   SSL,S/MIME, JAR/XPI 
bash-4.3$ ls -l /home/a513/tmp/db_for_libre/                
итого 120 
-rw------- 1 a513 a513 65536 авг 31 17:56 cert8.db 
-rw------- 1 a513 a513 28672 авг 31 17:56 cert9.db 
-rw------- 1 a513 a513 16384 авг 31 17:56 key3.db 
-rw------- 1 a513 a513 28672 авг 31 17:56 key4.db 
-rw------- 1 a513 a513   440 авг 31 17:56 pkcs11.txt 
-rw------- 1 a513 a513 16384 авг 31 16:49 secmod.db 
bash-4.3$

Как видим теперь в хранилище есть базы данных как в старом, так и новом форматах.
К сожалению, обратное преобразование мне неизвестно и поэтому новые хранилище сертификатов, например, google-chrome (~/.pki) в LibreOffice недоступны.
Пакет NSS поддерживает работу с токенами/смарткартами PKCS#11, на которых, как правило, и хранят свои личные сертификаты с закрытыми ключами пользователи. Отметим, что личные сертификаты, сегодня получают в удостоверяющих центрах .
И так, мы остановились на том, что у нас был запрошен PIN-код к токену. Подключить токены/смарткарты PKCS#11 можно как через Firefox, Thunderbir, Seamonkey, так и утилитой modutil. Например, для подключения облачного токена достаточно выполнить команду:

$modutil –add LS11CLOUD2016 –libfile libls11cloud.so –dbdir /home/a513/tmp/db_for_libre 
$

Именно к этому токену LibreOffice и запросил пароль:

image

После ввода пароля будет доступен список личных сертификатов, которые можно использовать для формирования подписи. Здесь также можно просмотреть содержимое сертификатов:

image

Как только будет выбран сертификат, произойдет формирование электронной подписи:

image

Теперь, когда документ будет заново открыт для работы с ним, то по наличию корректной подписи можно быть уверенным, что документ никем не правился. В противном случае доверия к документу нет.
В заключение еще несколько слов о работе с хранилищем сертификатов. Если пользователь решил создавать свое хранилище отличное от продуктов Mozilla и для этого использовать утилиты командной строки NSS, то удобно воспользоваться графической оболочкой GUINSS, которую можно скачать здесь, к ним.
Данная утилита позволяет подключать токены/смарткарты, импортировать корневые сертификаты и сертификаты из защищенного контейнераPKCS#12. Позволяет также создавать запросы (CSR) на сертификаты в формате PKCS#10:

image

Сформированный запрос на сертификат может быть отправлен в УЦ (ССЫЛКА — )для получения сертификата:

image

Созданное хранилище может найти применение и за рамками LibreOffice.

Автор: Орлов Владимир Николаевич

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js