Как я настраивал новые утилиты по работе с электронной подписью в Linux / Блог компании «Актив» / Хабр

Как я настраивал новые утилиты по работе с электронной подписью в Linux / Блог компании «Актив» / Хабр Сертификаты

Astra linux орёл 2.12 криптопро 4.0.9963 госзакупки и площадки

Орёл 2.12 wiki
astralinux доступ к госзакупкам
Работа с КриптоПро CSP
Инструкция по настройке и работе с Крипто-Про для государственных порталов
Установка и настройка КриптоПро CSP в Porteus Linux
Вход с помощью электронной подписи на портал Госуслуг на Linux.

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install samba ssh
$ sudo systemctl  enable ssh
$ sudo systemctl  start ssh

Два варианта либо ставим xrdp

$ sudo apt install xrdp

либо

================================== 

Установка дополнений VirtualBox $ sudo apt install gcc make perl linux-headers-generic linux-headers-`uname -r`
Подключить образ диска Дополнений гостевой ОС
$ sudo mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
$ sudo bash /mnt/VBoxLinuxAdditions.run

$ sudo reboot

Проверка:
$ sudo modinfo vboxguest
filename:       /lib/modules/4.15.3-1-generic/kernel/ubuntu/vbox/vboxguest/vboxguest.ko
version:        5.2.8_KernelUbuntu r120774
license:        GPL
description:    Oracle VM VirtualBox Guest Additions for Linux Module
author:         Oracle Corporation
srcversion:     F2E5886E3B0544500D404A1
alias:          pci:v000080EEd0000CAFEsv00000000sd00000000bc*sc*i*
depends:       
retpoline:      Y
intree:         Y
name:           vboxguest
vermagic:       4.15.3-1-generic SMP mod_unload
signat:         PKCS#7
signer:        
sig_key:       
sig_hashalgo:   md4

==================================  

$ cat /etc/astra_version
CE 2.12.8 (orel)

Загружаем  КриптоПро 4.0.9963

Устанавливаем КриптоПро 4.0.9963
$ tar -zxf linux-amd64_deb.tgz
$ cd linux-amd64_deb
$ sudo ./install_gui.sh

Ставим все галки, лицензию позднее.

Ставим
лицензию на Крипто-Про при наличии

$ sudo /opt/cprocsp/sbin/amd64/cpconfig -license -set *****-*****-*****-*****-*****

Если при установке не ввели лицензию, установится demo лицензия
$ /opt/cprocsp/sbin/amd64/cpconfig -license -view
License validity:
4040E-G0037-EK8R3-C6K4U-*****
Expires: 3 month(s) 2 day(s)
License type: Server.

Проверяем версию:
$ /opt/cprocsp/bin/amd64/csptest -keyset -verifycontext
CSP (Type:80) v4.0.9019 KC2 Release Ver:4.0.9963 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 9196739
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2021 KC2 CSP
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,020 sec
[ErrorCode: 0x00000000]

==================================================================================
Сертификат сайта госзакупок, кривой:

Не должно быть тут русских букв???

Реакция:

Отключаем реакцию на кривой сертификат госзакупок

Предварительная проверка:

$ sudo  /opt/cprocsp/bin/amd64/csptestf -tlsc -server zakupki.gov.ru -nosave
HSECPKG_ATTR_PACKAGE_INFO not supported.
Error 0x800b010f (CERT_E_CN_NO_MATCH) returned by CertVerifyCertificateChainPolicy!
An error occurred in running the program.
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/csptest/WebClient.c:769:Error authenticating server credentials!
Error number 0x800b010f (2148204815).
CN-имя сертификата не совпадает с полученным значением.
Total: SYS: 0,060 sec USR: 0,060 sec UTC: 0,350 sec
[ErrorCode: 0x800b010f] 
Отключение:
$ sudo  /opt/cprocsp/sbin/amd64/cpconfig -ini ‘configparameters’ -add bool Rfc6125_NotStrict_ServerName_Check true

Проверка отключения:
$ sudo  /opt/cprocsp/bin/amd64/csptestf -tlsc -server zakupki.gov.ru -nosave
SECPKG_ATTR_PACKAGE_INFO not supported.
DEContext expired: OK if file is completely downloaded
Reply status: HTTP/1.1 200 OK
1 connections, 589 bytes in 1.735 seconds;
Total: SYS: 0,300 sec USR: 0,180 sec UTC: 1,780 sec
[ErrorCode: 0x00000000]

Какой результат будет?

==================================================================================

$ export PATH=”$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr ‘n’ ‘:’)$PATH”

$ sudo apt install alien
$ cd ~/
Скачать плагин  в /home/user (автоматическая загрузка версии плагина, соответствующей Вашей ОС)

$ tar -zxf cades_linux_amd64.tar.gz
$  cd ~/cades_linux_amd64

Установить плагин:
$ sudo alien -dc cprocsp-pki-2.0.0-amd64-cades.rpm
$ sudo alien -dc cprocsp-pki-2.0.0-amd64-plugin.rpm
$ sudo dpkg -i cprocsp-pki-cades_2.0.0-2_amd64.deb cprocsp-pki-plugin_2.0.0-2_amd64.deb

Сертификаты которые ставит Crypto-Pro:

$ sudo /opt/cprocsp/bin/amd64/certmgr -list -store mRoot
Certmgr 1.1 (c) “Crypto-Pro”,  2007-2021.
program for managing certificates, CRLs and stores

=============================================================================
1——-
Issuer              : E=dit@minsvyaz.ru, C=RU, S=77 г. Москва, L=Москва,
STREET=”125375 г. Москва, ул. Тверская, д. 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Головной удостоверяющий центр
Subject             : E=dit@minsvyaz.ru, C=RU, S=77 г. Москва, L=Москва,
STREET=”125375 г. Москва, ул. Тверская, д. 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Головной удостоверяющий центр
Serial              : 0x34681E40CB41EF33A9A0B7C876929A29
SHA1 Hash           : 8cae88bbfd404a7a53630864f9033606e1dc45e2
SubjKeyID           : 8b983b891851e8ef9c0278b8eac8d420b255c95d
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 20/07/2021  12:31:14 UTC
Not valid after     : 17/07/2027  12:31:14 UTC
PrivateKey Link     : No
2——-
Issuer              : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва,
STREET=”улица Тверская, дом 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Subject             : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва,
STREET=”улица Тверская, дом 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Serial              : 0x4E6D478B26F27D657F768E025CE3D393
SHA1 Hash           : 4bc6dc14d97010c41a26e058ad851f81c842415a
SubjKeyID           : c254f1b46bd44cb7e06d36b42390f1fec33c9b06
Signature Algorithm : ГОСТ Р 34.11-2021/34.10-2021 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2021 (512 bits)
Not valid before    : 06/07/2021  12:18:06 UTC
Not valid after     : 01/07/2036  12:18:06 UTC
PrivateKey Link     : No
3——-
Issuer              : OGRN=1037700085444, INN=007717107991, C=RU,
S=Moscow, L=Moscow, O=”LLC “”Crypto-Pro”””, CN=CryptoPro GOST Root CA
Subject             : OGRN=1037700085444, INN=007717107991, C=RU,
S=Moscow, L=Moscow, O=”LLC “”Crypto-Pro”””, CN=CryptoPro GOST Root CA
Serial              : 0x4056ED0099A9D6AF49C9FF98B9C70E70
SHA1 Hash           : 34e21fc04d3576b0ada81fd081955e2778291cc5
SubjKeyID           : c2364dcc24260a439625305b67579b2ac9439cd5
Signature Algorithm : ГОСТ Р 34.11-2021/34.10-2021 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2021 (512 bits)
Not valid before    : 15/11/2021  14:14:09 UTC
Not valid after     : 15/11/2033  14:14:09 UTC
PrivateKey Link     : No
=============================================================================

[ErrorCode: 0x00000000]

Установка личного сертификата выданного казначейством:

Копируем контейнер в
$ cd /var/opt/cprocsp/keys/user

$ /opt/cprocsp/bin/amd64/csptest -keyset -enum -verifycontext -fqcn
CSP (Type:80) v4.0.9017 KC2 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 40317331
\.HDIMAGEPRIZMA1
OK.
Total: SYS: 0,000 sec USR: 0,010 sec UTC: 0,140 sec
[ErrorCode: 0x00000000]

или

$ /opt/cprocsp/bin/amd64/csptest -keyset -enum -verifycontext -fqcn
CSP (Type:80) v4.0.9019 KC2 Release Ver:4.0.9963 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 10339523
\.HDIMAGEtest
OK.
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,100 sec
[ErrorCode: 0x00000000]

Установить скопированный контейнер:

$ /opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont ‘\.HDIMAGEPRIZMA1’

или

$ /opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont ‘\.HDIMAGEtest’

Просмотор личных сертификатов:

$ /opt/cprocsp/bin/amd64/certmgr -list -store uMy

Установить расширение firefox на страничке с проверкой плагина:

Проверка плагина

Дожаться сообщения:
Как я настраивал новые утилиты по работе с электронной подписью в Linux / Блог компании «Актив» / Хабр

Проверить подпись.

Сертификат головного удостверящего центра центра уже установлен в mRoot

Просмотр:
$ sudo /opt/cprocsp/bin/amd64/certmgr -list -store mRoot

Если случайно удалили:
Скачаем и установим в mRoot
Если нужно удалить:
#$ sudo /opt/cprocsp/bin/amd64/certmgr -delete -all -store mRoot
Сертификаты zakupki.gov.ru
Качаем:
Сертификат Минкомсвязи России (Головного удостверяющего центра) ГОСТ Р 34.102021-2021
Сертификат Удостоверяющего центра Федерального казначейства ГОСТ Р 34.102021-2021

или wget

$ cd ~

Этот сертификат уже стоит, ставить не нужно:
#$ wget http://www.roskazna.ru/upload/iblock/7e3/guts_2021.cer
#$ sudo /opt/cprocsp/bin/amd64/certmgr -inst -cert -file guts_2021.cer -store mRoot

$ wget http://www.roskazna.ru/upload/iblock/acb/fk_2021.cer
$ sudo /opt/cprocsp/bin/amd64/certmgr -inst -cert -file fk_2021.cer -store mRoot

Просмотр:
$ sudo /opt/cprocsp/bin/amd64/certmgr -list -store mRoot

~$ sudo /opt/cprocsp/bin/amd64/certmgr -list -store mRoot
Certmgr 1.1 (c) “Crypto-Pro”,  2007-2021.
program for managing certificates, CRLs and stores

=============================================================================
1——-
Issuer              : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва,
STREET=”улица Тверская, дом 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Subject             : E=uc_fk@roskazna.ru, S=г. Москва,
INN=007710568760, OGRN=1047797019830, STREET=”Большой Златоустинский
переулок, д. 6, строение 1″, L=Москва, C=RU, O=Федеральное казначейство,
CN=Федеральное казначейство
Serial              : 0x00B5F132D300000000015A
SHA1 Hash           : ab0e24e9a206877ab7dc4625dfcceb9c18b0cb0d
SubjKeyID           : c0d6d60a7d6b7ec98e39bcda89faaf942c585a8d
Signature Algorithm : ГОСТ Р 34.11-2021/34.10-2021 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2021 (512 bits)
Not valid before    : 19/11/2021  15:56:01 UTC
Not valid after     : 19/11/2033  15:56:01 UTC
PrivateKey Link     : No
CA cert URL         : http://reestr-pki.ru/cdp/guc_gost12.crt
CDP                 : http://reestr-pki.ru/cdp/guc_gost12.crl
CDP                 : http://company.rt.ru/cdp/guc_gost12.crl
CDP                 : http://rostelecom.ru/cdp/guc_gost12.crl
2——-
Issuer              : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва,
STREET=”улица Тверская, дом 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Subject             : E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва,
STREET=”улица Тверская, дом 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Serial              : 0x4E6D478B26F27D657F768E025CE3D393
SHA1 Hash           : 4bc6dc14d97010c41a26e058ad851f81c842415a
SubjKeyID           : c254f1b46bd44cb7e06d36b42390f1fec33c9b06
Signature Algorithm : ГОСТ Р 34.11-2021/34.10-2021 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2021 (512 bits)
Not valid before    : 06/07/2021  12:18:06 UTC
Not valid after     : 01/07/2036  12:18:06 UTC
PrivateKey Link     : No
3——-
Issuer              : E=dit@minsvyaz.ru, C=RU, S=77 г. Москва, L=Москва,
STREET=”125375 г. Москва, ул. Тверская, д. 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Головной удостоверяющий центр
Subject             : E=dit@minsvyaz.ru, C=RU, S=77 г. Москва, L=Москва,
STREET=”125375 г. Москва, ул. Тверская, д. 7″, O=Минкомсвязь России,
OGRN=1047702026701, INN=007710474375, CN=Головной удостоверяющий центр
Serial              : 0x34681E40CB41EF33A9A0B7C876929A29
SHA1 Hash           : 8cae88bbfd404a7a53630864f9033606e1dc45e2
SubjKeyID           : 8b983b891851e8ef9c0278b8eac8d420b255c95d
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 20/07/2021  12:31:14 UTC
Not valid after     : 17/07/2027  12:31:14 UTC
PrivateKey Link     : No
4——-
Issuer              : OGRN=1037700085444, INN=007717107991, C=RU,
S=Moscow, L=Moscow, O=”LLC “”Crypto-Pro”””, CN=CryptoPro GOST Root CA
Subject             : OGRN=1037700085444, INN=007717107991, C=RU,
S=Moscow, L=Moscow, O=”LLC “”Crypto-Pro”””, CN=CryptoPro GOST Root CA
Serial              : 0x4056ED0099A9D6AF49C9FF98B9C70E70
SHA1 Hash           : 34e21fc04d3576b0ada81fd081955e2778291cc5
SubjKeyID           : c2364dcc24260a439625305b67579b2ac9439cd5
Signature Algorithm : ГОСТ Р 34.11-2021/34.10-2021 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2021 (512 bits)
Not valid before    : 15/11/2021  14:14:09 UTC
Not valid after     : 15/11/2033  14:14:09 UTC
PrivateKey Link     : No
=============================================================================

Про сертификаты:  Свидетельство. Воспоминания Дмитрия Шостаковича, записанные и отредактированные Соломоном Волковым

[ErrorCode: 0x00000000]

В принципе установивки контейнера с личным сертификтом может быть достаточно.
Проверить можно:
Проверка цепочек
$ /opt/cprocsp/bin/amd64/certmgr -list -store uMy
Смотрим: 
CN=’Фёдорова Галина Борисовна’
#$ /opt/cprocsp/bin/amd64/cryptcp -sign -dn mail@vt.com -errchain /tmp/test /tmp/test.sgn
$ /opt/cprocsp/bin/amd64/cryptcp -copycert -dn  mail@vt.com -df ~/t.cer
$ CP_PRINT_CHAIN_DETAIL=1 /opt/cprocsp/bin/amd64/cryptcp -copycert -dn CN=’Фёдорова Галина Борисовна’ -df ~/t.cer
…..
…..
…..
Цепочки сертификатов проверены.
Копирование сертификатов завершено.
[ErrorCode: 0x00000000]
Если  в CN много кавычек, можно смотреть по e-mail из сертификата
CN=”ООО “”РОМАШКА”””

$ CP_PRINT_CHAIN_DETAIL=1 /opt/cprocsp/bin/amd64/cryptcp -copycert -dn  mail@vt.com -df ~/t.cer
…..
…..
…..
Цепочки сертификатов проверены.
Копирование сертификатов завершено.
[ErrorCode: 0x00000000]

 
Отмеченное до крестиков можем не делать:

Установка головного сертификата удостверяющего центра (из сертификата Калуга-Астрал):

В личном сертификате есть:
CA cert URL         : http://www.dp.keydisk.ru/root/833/astral-833-2021n.cer

$ mkdir  ~/CAs
$ wget -P ~/CAs $(/opt/cprocsp/bin/amd64/certmgr -list -store uMy | awk ‘/CA cert URL/ { print $5 }’)
for cert in $(ls -1 ~/CAs/*.cer); do sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file $cert; done

или
можно посмотреть в личном сертификате
$ /opt/cprocsp/bin/amd64/certmgr -list -store uMy

CA cert URL         : http://www.dp.keydisk.ru/root/833/astral-833-2021n.cer
….
Скачать
$ wget http://www.dp.keydisk.ru/root/833/astral-833-2021n.cer
Установить.
$ sudo /opt/cprocsp/bin/amd64/certmgr -inst -cert -file astral-833-2021n.cer -store mRoot

Проверка цепочек
$ /opt/cprocsp/bin/amd64/certmgr -list -store uMy
Смотрим: 
CN=’Фёдорова Галина Борисовна’
$ /opt/cprocsp/bin/amd64/cryptcp -copycert -dn  mail@vt.com -df ~/t.cer
$ CP_PRINT_CHAIN_DETAIL=1 /opt/cprocsp/bin/amd64/cryptcp -copycert -dn CN=’Фёдорова Галина Борисовна’ -df ~/t.cer
…..
…..
…..
Certificate chains are checked.
Certificate’s been copied.
[ReturnCode: 0]

или

Цепочки сертификатов проверены.
Копирование сертификатов завершено.
[ErrorCode: 0x00000000]

Firefox

Поскольку Firefox принадлежит Mozilla, то этот веб браузер, конечно, также использует Mozilla Network Security Services (NSS).

Стандартными расположениями папок с базами данных NSS являются:

  • ~/.pki/nssdb (на уровне пользователей)
  • /etc/pki/nssdb (на общесистемном уровне, может отсутствовать)

Firefox НЕ использует ни одно из этих стандартных расположений, база данных хранится в профиле пользователя, который имеет общий вид ~/.mozilla/firefox/СЛУЧАЙНЫЕ-БУКВЫ-ЦИФРЫ.default/cert9.db, например, ~/.mozilla/firefox/3k0r4loh.default/cert9.db.


Посмотреть корневые сертификаты CA которые использует Firefox в Linux можно следующей командой:

certutil -L -d ~/.mozilla/firefox/*.default/

У Firefox-esr это папка:

certutil -L -d ~/.mozilla/firefox/*.default-esr/

Также вы можете просмотреть корневые CA сертификаты в настройках браузера:

Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:

Google chrome / chromium


Как уже было сказано, при работе на Linux, Google Chrome использует библиотеку Mozilla Network Security Services (NSS) для выполнения верификации сертификатов.

Корневые CA сертификаты, которые добавил пользователь, хранятся в файле ~/.pki/nssdb/cert9.db, их можно просмотреть командой:

certutil -L -d ~/.pki/nssdb

Поскольку Chrome не может удалить сертификаты из хранилища NSS, то если вы отключите некоторые из них в настройках веб браузера (Privacy and security → Manage certificates → Authorities), то в том же файле, где хранятся добавленные пользователем корневые CA сертификаты, будут сохранены изменения о полномочиях отключённого сертификата:

Используемые в Google Chrome / Chromium корневые CA сертификаты в Linux можно посмотреть следующим причудливым способом:

1. Найдите расположение файла libnssckbi.so (как было сказано в предыдущем разделе, в нём NSS хранит доверенные корневые сертификаты):

locate libnssckbi.so


Примеры расположений этого файла:

  • /usr/lib/libnssckbi.so
  • /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

2. Теперь выполните команду вида:

ln -s /ПУТЬ/ДО/libnssckbi.so ~/.pki/nssdb

Например:

ln -s /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so ~/.pki/nssdb

2. Затем запустите команду:

certutil -L -d sql:$HOME/.pki/nssdb/ -h 'Builtin Object Token'


Вы увидите доверенные корневые сертификаты, которые использует Google Chrome в Linux.

Также вы можете просмотреть корневые CA сертификаты в настройках браузера:

Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации, на английском это Privacy and security → Manage certificates → Authorities.

Mozilla network security services (nss)

Network Security Services (NSS) это набор библиотек, разработанных для поддержки кросс-платформенной разработки защищенных клиентских и серверных приложений. Приложения построенные с использование NSS могут использовать SSL v2 и v3, TLS, PKCS#5, PKCS#7, PKCS#11, PKCS#12, S/MIME, сертификаты X.509 v3 и другие стандарты обеспечения безопасности.


В отличие от OpenSSL, NSS использует файлы базы данных в качестве хранилища сертификатов.

NSS начинается с жёстко закодированного списка доверенных сертификатов CA внутри файла libnssckbi.so. Этот список можно просмотреть из любого приложения, использующего NSS, способного отображать (и манипулировать) хранилищем доверенных сертификатов, например, Chrome-совместимые или Firefox-совместимые браузеры.

Некоторые приложения, использующие библиотеку NSS, используют хранилище сертификатов, отличное от рекомендованного. Собственный Firefox от Mozilla является ярким примером этого.


В вашем дистрибутиве скорее всего уже установлен пакет NSS, в некоторых дистрибутивах он называется libnss3 (Debian и производные) в некоторых — nss (Arch Linux, Gentoo и производные).

Если вы хотите просматривать и изменять хранилища сертификатов NSS, то понадобиться утилита certutil. В Arch Linux эта утилита входит в пакет nss и, следовательно, предустановлена в Arch Linux. А в Debian и производные установка делается так:

sudo apt install libnss3-tools

Rosa crypto tool

Как следует из названия, это утилита для работы с электронной подписью и шифрованием для дистрибутива ROSA Linux. В данный момент утилита доступна в репозиториях Rosa Linux и Alt Linux.

Эта утилита разрабатывается одним человеком – Михаилом Вознесенским. У нее простой, но удобный интерфейс. На данный момент утилита находится в активной разработке – с ноября 2021 года мне удалось протестировать три версии. Последняя версия, доступная на момент написание статьи — 0.2.2.

Что внутри? Утилита написана на Python с использованием PyQt4 для графического интерфейса.

Установить ее можно, использовав «Управление программами» в Rosa Linux.

Вставляем токен и запускаем утилиту.

Видим, что токен определился успешно и был найден наш сертификат.

Интерфейс программы настолько прост, что описывать и показывать в статье все его функции не имеет смысла. Попробуем только подписать файл.

Выбираем файл и жмем “Подписать файл”. Получаем вот такое предупреждение.

Нажимаем «OK» и получаем информацию о том, что файл был подписан успешно.

Основное достоинство этой утилиты в том, что она совершенно бесплатная, в отличии нашего следующего продукта.

По сравнению с использованием «КриптоПро CSP» из консоли:

На порядок проще использовать;— Отсутствуют различные параметры подписи.

Исходный код программы доступен в публичном репозитории на ABF:abf.io/uxteam/rosa-crypto-tool-develСистема контроля версий, которую использует «НТЦ ИТ РОСА», интегрирована в сборочную среду и базируется на Git. Можно вполне использовать любой клиент git.

Про сертификаты:  Возможные ошибки при работе с ЭЦП – Инструкции и полезные статьи

Надеюсь, разработчики других отечественных дистрибутивов Linux, таких как Astra Linux, GosLinux и другие добавят в свои дистрибутивы пакеты с rosa-crypto-tool.

Thunderbird

Чтобы просмотреть, каким CA доверяет Thunderbird:

certutil -L -d ~/.thunderbird/*.default/

Чтобы найти все файлы cert9.db выполните команду:

find ~/ -name "cert9.db"

Trusted esign


Второй продукт, про который мы поговорим, это Trusted eSign от компании “Цифровые технологии”. Она известна на российском рынке ИБ как разработчик средства по работе с подписью и шифрованием для ОС Windows – «КриптоАРМ».

Главное, не путать этот продукт с Trusted.eSign – web-сервисом по работе с подписью этой же компании.

Добавление сертификатов в базу данных nss

Некоторые приложения используют базу данных NSS, и у вас может быть необходимость добавить доверенные CA в неё.

Последующие изменения повлияют только на приложения, использующие базу данных NSS и учитывающие файл /etc/pki/nssdb.

1. Сначала создайте структуру каталогов для системных файлов базы данных NSS:

sudo mkdir -p /etc/pki/nssdb

Затем создайте новый набор файлов базы данных. Пароль нужен для того, чтобы базу данных могли редактировать только люди, которые его знают. Если все пользователи в системе (и с доступом к резервным копиям) заслуживают доверия, этот пароль можно оставить пустым.

sudo certutil -d sql:/etc/pki/nssdb -N

2. Убедитесь, что файлы базы данных доступны для чтения всем:

sudo chmod go r /etc/pki/nssdb/*

3. Теперь, когда доступны файлы базы данных NSS, добавьте сертификат в хранилище следующим образом:

sudo certutil -d sql:/etc/pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"

Например:

sudo certutil -d sql:/etc/pki/nssdb -A -i ./HackWareCA.crt -n "HackWare CA" -t "C,,"

Биты доверия, используемые в приведённом выше примере, помечают сертификат как надёжный для подписи сертификатов, используемых для связи SSL/TLS. Имя (указывается после опции -n), используемое в команде, можно выбрать любое, но убедитесь, что его легко отличить от других сертификатов в магазине.

Для проверки:

certutil -L -d /etc/pki/nssdb

Аналогичные инструкции можно использовать для включения сертификата только в базу данных NSS конкретного пользователя:

certutil -d sql:$HOME/.pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"

Удаление из файлов базы данных NSS

Чтобы удалить сертификат из любой базы данных NSS, используйте команду certutil следующим образом. В этом примере используется общесистемное расположение базы данных NSS, но его можно легко изменить на пользовательское ~/.pki/nssdb местоположение.

sudo certutil -d sql:/etc/pki/nssdb -D -n "certificateName"

Как добавить корневой сертификат в доверенные в linux в веб браузеры

Chrome, Chromium, Firefox и созданные на их основе веб браузеры доверяют корневым сертификатам, установленным на уровне системы. То есть вам достаточно добавить в доверенные CA сертификат как это показано в предыдущем разделе.

Причём эти браузеры хотя и используют NSS, они игнорируют общесистемные сертификаты NSS, которые можно добавить в файл /etc/pki/nssdb!


Тем не менее приложения, которые используют NSS (такие как Firefox, Thunderbird, Chromium, Chrome) хранят свои списки доверенных сертификатов в файлах cert9.db. Чтобы добавить свой сертификат в каждый из этих файлов можно использовать скрипт.

Сохранить следующий код в файл CAtoCert9.sh:

#!/bin/bash

certfile="root.cert.pem"
certname="My Root CA"

for certDB in $(find ~/ -name "cert9.db")
do
	certdir=$(dirname ${certDB});
	certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
done

В этом файле измените значение certfile на имя файла вашего сертификата и значение certname на имя вашего сертификата, сохраните и закройте файл.

Затем запустите его следующим образом:

bash ./CAtoCert9.sh


В результате в домашней папке пользователя будут найдены все файлы cert9.db и в каждый из них будет добавлен указанный CA сертификат.

Вы можете добавить CA сертификаты в графическом интерфейсе каждого браузера.

  • В настройках Chrome: Конфиденциальность и безопасность → Безопасность → Настроить сертификаты → Центры сертификации
  • В настройках Chromium: Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации

Нажмите кнопку «Импорт»:


Выберите файл с сертификатом.

Укажите, какие полномочия вы даёте этому сертификату:

  • В настройках Firefox: Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:

Нажмите кнопку «Импортировать»:


Выберите файл с сертификатом.

Укажите, какие полномочия вы даёте этому сертификату:

Как добавить корневой сертификат в доверенные в linux на уровне системы

Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:

Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.


Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:

sudo gcr-viewer /ПУТЬ/ДО/СЕРТИФИКАТА.crt

Например:

sudo gcr-viewer ./HackWareCA.crt

Данный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.

Суть метода очень проста:

  1. Добавить свой корневой CA сертификат в папку, предназначенную для таких сертификатов.
  2. Запустить программу для обновления общесистемного списка сертификатов.


Пути и команды в разных дистрибутивах Linux чуть различаются.

Просмотреть Subject всех корневых CA сертификатов можно уже знакомой командой:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

Для демонстрации я добавлю сертификат с Common Name, включающим «HackWare», тогда для проверки, имеется ли сертификат с таким именем среди корневых CA, я могу использовать команду:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWare

Для добавления своего корневого CA в доверенные в Debian, Kali Linux, Linux Mint, Ubuntu и их производных:

1. Проверьте, существует ли директория /usr/local/share/ca-certificates:

ls -l /usr/local/share/ca-certificates


Если её ещё нет, то создайте:

sudo mkdir /usr/local/share/ca-certificates

Сертификат должен быть в формате PEM (обычно так и есть) и иметь расширение .crt — если расширение вашего сертификата .pem, то достаточно просто поменять на .crt.

2. Скопируйте ваш сертификат командой вида:

sudo cp СЕРТИФИКАТ.crt /usr/local/share/ca-certificates/

Например:

sudo cp ./HackWareCA.crt /usr/local/share/ca-certificates/

3. Запустите следующую команду для обновления общесистемного списка:

sudo update-ca-certificates


Пример вывода:

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:HackWareCA.pem
done.
done.

Проверим наличие нашего CA сертификата среди доверенных:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWare

Сертификат успешно найден:

Чтобы его удалить:

sudo rm /usr/local/share/ca-certificates/СЕРТИФИКАТ.crt
sudo update-ca-certificates


Для добавления своего корневого CA в доверенные в Arch Linux, BlackArch и их производных:

1. Выполните команду вида:

sudo cp ./СЕРТИФИКАТ.crt /etc/ca-certificates/trust-source/anchors/

Например:

sudo cp ./HackWareCA.crt /etc/ca-certificates/trust-source/anchors/

2. Обновите общесистемный список доверенных CA:

sudo update-ca-trust


Чтобы удалить этот сертификат:

sudo rm /etc/ca-certificates/trust-source/anchors/СЕРТИФИКАТ.crt
sudo update-ca-trust

Настройка «криптопро» csp

Несмотря на то, что есть несколько неплохих статей по настройке «КриптоПро CSP» под Linux (например,

или

), я опишу здесь свой вариант. Основная причина в том, что большинство инструкций написаны для «Крипто Про CSP» версии 3.x. А современная версия «КриптоПро CSP» 4.0 не является 100% совместимой с 3.x. Дополнительная причина – всегда приятно иметь полную инструкцию по настройке в одном месте, а не переключаться с одного окна на другое.

Приступаем к настройке.

Настройка работы с рутокен эцп 2.0

Сделаем небольшое отступление. Для работы с электронной подписью и шифрованием нам не обойтись без ключевых пар и сертификатов. Надежное хранение закрытых ключей – один из основных факторов безопасности. А более надежных средств хранения, чем токен или смарт-карта, человечество пока не придумало.

Про сертификаты:  Установка и настройка Zabbix с нуля

Для работы с токенами в ОС Linux есть масса различных средств и драйверов. Для описания всех этих средств понадобится отдельная статья. Поэтому я не буду подробно описывать, как это работает, и почему нам нужны именно эти пакеты.

Устанавливаем пакеты для работы с Рутокен ЭЦП 2.0:

apt-get install libpcsclite1 pcscd libccid


Нам также необходимо установить пакеты КриптоПро CSP для поддержки работы с токенами:

dpkg -i ./cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb ./cprocsp-rdr-rutoken-64_4.0.0-4_amd64.deb ./cprocsp-rdr-pcsc-64_4.0.0-4_amd64.deb ./lsb-cprocsp-pkcs11-64_4.0.0-4_amd64.deb

Общесистемные корневые ca сертификаты

Консолидированный файл, включающий в себя все корневые сертификаты CA операционной системы, находится в файле /etc/ssl/certs/ca-certificates.crt. Этот файл может быть символической ссылкой на фактическое расположение сертификатов в файлах /etc/ssl/cert.pem или /etc/ca-certificates/extracted/tls-ca-bundle.pem.

Корневые CA сертификаты в виде отдельных файлов расположены в директории /etc/ssl/certs, в этой директории могут быть ссылки на фактическое расположение сертификатов, например, в /etc/ca-certificates/extracted/cadir/.

Для просмотра Subject всех корневых CA сертификатов в системе:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt


Эти сертификаты используются утилитоми curl, wget и другими. Веб-браузеры Chromium и Firefox используют свои собственные хранилища корневых CA сертификатов.

Чтобы узнать, где веб браузеры хранять корневые CA сертификаты в Linux, нам нужно познакомиться с NSS.

Подпись средствами «криптопро csp»

В составе «КриптоПро CSP» есть утилита csptestf, позволяющая выполнять различные криптографические операции. Как я уже писал выше, у этой утилиты есть 2 недостатка:

  • Отсутствие хорошей документации;
  • Отсутствие графического интерфейса.

Подписать можно с помощью команды:

csptestf –sfsign –sign –in <имя файла> -out <имя файла> -my ‘Trusted eSign Test’ –detached –alg GOST94_256


Здесь,

my — параметр, в котором надо указать часть Common Name сертификата для подписи;

detached — позволяет создать открепленную подпись;

alg GOST94_256 — задает алгоритм хэширования, который будет использоваться при создании подписи.

Более подробную информацию о возможных параметрах вы можете получить, выполнив команду:

csptestf –sfsign

Такой интерфейс отлично подходит для подготовленного пользователя или для автоматизации операций в скриптах.

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

Получаем тестовый сертификат

Перед тем как перейти непосредственно к работе с подписью, надо сгенерировать ключевую пару и создать сертификат электронной подписи. Если у вас уже есть Рутокен с контейнером «КриптоПро», то эту часть можно смело пропустить.

Проверка содержимого csr

После создания CSR используйте его, чтобы подписать собственный сертификат и/или отправить его в общедоступный центр сертификации и попросить его подписать сертификат. Оба подхода описаны в следующих разделах. Но прежде чем сделать это, неплохо бы ещё раз проверить правильность CSR. Это делается так:

Просмотр содержимого ключей и сертификатов

Мы можем подробно изучить содержимое всех созданных в OpenSSL файлов, а также при необходимости конвертировать их в другие форматы.

В следующих командах используются тестовые файлы со следующими именами:

Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.


Все эти файлы являются текстовыми:

cat rootCA.key

Там мы увидим примерно следующее:

-----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDJBKkr6XzzAcXD
eyDQdvB0SWE2Fl3nqlX/c2RgqMgScXtgidEzOu9ms3Krju5UKLokkQJrZFPMtiIL
MuPJFdYjVyfkfnqlZiouBVgJ60s8NQBBI8KnyyAoJCIFdASoW4Kv5C5LT8pX9eRa
/huJaRJL5XsFUGnTOLvW2ZLN52iAux9CoZlmH6ZF4nuQpblwN0MHULAhze52VNFT
…………………………………………………..
…………………………………………………..
…………………………………………………..
…………………………………………………..
…………………………………………………..
…………………………………………………..
-----END PRIVATE KEY-----

Резюме

Подведем итог. В конце 2021 – начале 2021 года наметился неплохой прогресс в средствах по работе с электронной подписью под Linux. Информационная безопасность начинает поворачиваться к пользователю лицом, и с каждым годом требуется все меньше действий для такого простого действия, как подписать или зашифровать файл с использованием отечественных алгоритмов.

Хочется дополнительно отметить такое развитие отечественных продуктов, учитывая современный тренд на замену Windows на Linux в государственных и муниципальных организациях. В рамках этого тренда становится актуальным использование средств криптографической защиты информации под Linux.

Такое развитие не может не радовать, особенно когда это происходит под Linux.

Создание корневого приватного ключа

Внимание: этот ключ используется для подписи запросов сертификатов, любой, кто получил этот ключ, может подписывать сертификаты от вашего имени, поэтому храните его в безопасном месте:

Генерация приватного ключа RSA используя параметры по умолчанию (ключ будет сохранён в файл с именем rootCA.key):

openssl genpkey -algorithm RSA -out rootCA.key

Опция -out указывает на имя файла для сохранения, без этой опции файл будет выведен в стандартный вывод (на экран). Имя выходного файла не должно совпадать с именем входного файла.


Для безопасности ключа его следует защитить паролем. Генерация приватного ключа RSA используя 128-битное AES шифрование (-aes-128-cbc) и парольную фразу “hello” (-pass pass:hello):

openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pass pass:hello

Конечно, опцию -pass pass:hello можно не указывать, тогда вам будет предложено ввести пароль во время генерации ключа.

Список поддерживаемых симметричных алгоритмов шифрования приватного ключа можно узнать в документации (раздел SUPPORTED CIPHERS):

man enc


Если для генерируемого ключа не указано количество бит, то по умолчанию используется 2048, вы можете указать другое количество бит с помощью команды вида (будет создан 4096-битный ключ):

openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pkeyopt rsa_keygen_bits:4096

Создание самоподписанного корневого сертификата

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

Здесь мы использовали наш корневой ключ для создания корневого сертификата (файл rootCA.crt), который должен распространяться на всех компьютерах, которые нам доверяют. А приватный ключ (файл rootCA.key) должен быть секретным, поскольку он будет использоваться для подписи сертификатов серверов.

Создание сертификатов (делается для каждого домена) включает в себя несколько этапов. Эту процедуру необходимо выполнить для каждого домена/сервера, которым требуется доверенный сертификат от нашего ЦС.

Создание файла с запросом на подпись сертификата (csr)

Получив закрытый ключ, вы можете приступить к созданию запроса на подпись сертификата — Certificate Signing Request (CSR). Это официальный запрос к CA о подписании сертификата, который содержит открытый ключ объекта, запрашивающего сертификат, и некоторую информацию об объекте.

Создание CSR обычно представляет собой интерактивный процесс, в ходе которого вы будете предоставлять элементы отличительного имени сертификата (вводить информацию о стране, городе, организации, email и т.д.). Внимательно прочитайте инструкции, предоставленные инструментом openssl; если вы хотите, чтобы поле было пустым, вы должны ввести одну точку (.) в строке, а не просто нажать «Enter».

Если вы сделаете последнее, OpenSSL заполнит соответствующее поле CSR значением по умолчанию. (Такое поведение не имеет никакого смысла при использовании с конфигурацией OpenSSL по умолчанию, что и делают практически все. Это имеет смысл, когда вы осознаете, что можете изменить значения по умолчанию, либо изменив конфигурацию OpenSSL, либо предоставив свои собственные конфигурации в файлах).

В запросе на подпись сертификата вы указываете информацию для сертификата, который хотите сгенерировать. Этот запрос будет обработан владельцем корневого ключа (в данном случае вы его создали ранее) для генерации сертификата.

Важно: имейте в виду, что при создании запроса на подпись важно указать Common Name, предоставляющее IP-адрес или доменное имя для службы, в противном случае сертификат не может быть проверен.

Я опишу здесь два способа:

Оцените статью
Мой сертификат
Добавить комментарий