- 1С и Linux
- вторник, 27 ноября 2018 г.
- КриптоПро перенос контейнера с WIN на Linux
- Работа с КриптоПро на linux сервере
- С жесткого диска
- Проверка успешности установки закрытого ключа
- Добавление тестового сертификата
- Удаление сертификата
- Проверка сертификата
- Просмотр всех атрибутов сертификата
- Экспорт сертификатов на другую машину
- Подписание документа ЭЦП
- Проверка подписи ЭЦП
- Получение исходного файла
- Настройка службы точного времени
- Установка сертификатов на Linux
- Установка .cer (только открытая часть)
- Установка из .key (скопированные с носителя 6 файлов ключа)
- Установка сертификата с токена\флэш-накопителя
- Установка открытой части в контейнер закрытого ключа
- Установка корневых сертификатов и списков отзыва
- Установка корневого сертификата удостоверяющего центра
- Через терминал
- Через графический интерфейс
- Установка списка отозванных сертификатов
- Установка цепочки промежуточных сертификатов
1С и Linux
Пишу для себя, чтобы не забыть как делал. 95 % рабочее. На комментарии отвечаю, когда увижу.
вторник, 27 ноября 2018 г.
КриптоПро перенос контейнера с WIN на Linux
Копируем контейнер 2018-07-.000 с машины windows:
в /var/opt/cprocsp/keys/user/2018-07-.000
$ /opt/cprocsp/bin/amd64/csptest -keyset -verifycontext -enum -unique
CSP (Type:80) v4.0.9017 KC1 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 35902435
2018-07-02 16-30-20 ▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒ — ▒▒▒▒▒ — ▒▒▒▒▒ — ▒▒▒▒▒|HDIMAGE\\2018-07-.000\0A6B
OK.
Total: SYS: 0,020 sec USR: 0,100 sec UTC: 0,140 sec
[ErrorCode: 0x00000000]
Если получили крякозяблики в имени контейнера пробуем вывести сведения вот так:
$ /opt/cprocsp/bin/amd64/csptest -keyset -enum -verifycontext -fqcn | iconv -f cp1251
CSP (Type:80) v4.0.9017 KC1 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 10499043
\\.\HDIMAGE\2018-07-02 16-30-20 ООО XXXX XXXX КЭП — копия — копия — копия
OK.
Total: SYS: 0,030 sec USR: 0,120 sec UTC: 0,180 sec
[ErrorCode: 0x00000000]
В случае если контейнер создан в ОС Windows и имеет в имени кириллицу, импорт конкретного контейнера в случае cp1251
$ /opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont «$(echo ‘HDIMAGE\\2018-07-.000\0A6B’ | iconv -t cp1251)»
Далее нам нужно получить сертификат головного УЦ выдавшего Ваш сертификат. Для этого нам нужно вывести список сертификатов установленных в хранилище личных сертификатов пользователя:
$ /opt/cprocsp/bin/amd64/certmgr -list -store uMy
CA cert URL : http://www.dp.keydisk.ru/root/833/astral-833-2017n.cer
Нам нужно значение поля “CA cert URL”, автоматически скачать сертификаты удостоверяющих центров можно так:
$ 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/*.crt); do sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file $cert; done
Работа с КриптоПро на linux сервере
Скопировать в корень дискеты или флэшки сертификат и приватный ключ (из каталога 999996.000 , 999996 — название (alias) контейнера):
cp -R /path/to/key/999996.000 /media/flashdrive/ cp /path/to/cert/client.cer /media/flashdrive/
Выполнить команду по копированию ключа с флэшки на диск, ключ попадет в пользовательское хранилище My .
gate@example.com — то, что прописано в поле E сертификата (можно посмотреть командой keytool —printcert -file /path/to/cert/client.cer ):
csptest -keycopy -src '\\.\FLASH\gate@example.com' -dest '\\.\HDIMAGE\999996'
С жесткого диска
Скопировать приватный ключ в хранилище (контейнер), где — имя пользователя linux:
cp -R /path/to/key/999996.000 /var/opt/cprocsp/keys/username>/
Поставить «минимальные» права:
chmod 600 /var/opt/cprocsp/keys/username>/999996.000/*
Узнать реальное название контейнера:
csptest -keyset -enum_cont -verifycontext -fqcn
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище My :
certmgr -inst -file /path/to/file/client.cer -cont '\\.\HDIMAGE\999996'
Если следующая ошибка, нужно узнать реальное название контейнера (см. выше):
Failed to open container \\.\HDIMAGE\ [ErrorCode: 0x00000002]
Установить сертификат УЦ из-под пользователя root командой:
certmgr -inst -store uroot -file /path/to/file/CA.cer
Проверка успешности установки закрытого ключа
Если выводится PrivateKey Link: Yes. Container: HDIMAGE\\999996.000\D7BB , то есть и сертификат, и приватный ключ, а если выводится PrivateKey Link: No — связи нет, и использовать такой контейнер для подписи не удастся.
Добавление тестового сертификата
Добавление работает только на той же машине, и в тот же контейнер, где был сформированы следующий запрос на добавление:
cryptcp -creatrqst -dn 'cn=test' -cont '\\.\hdimage\test' test.csr
Ввести пароль на контейнер test123 .
cryptcp -creatrqst -dn 'e=email@test.ru,cn="тест тест",c=rus,l="москва",o="текст тест"' -cont '\\.\hdimage\myname' myname.csr
cryptcp -instcert -cont '\\.\hdimage\test' certnew.cer
Ввести пароль на контейнер. По-умолчанию: 12345678
Удаление сертификата
Проверка сертификата
1------- Issuer : E=cpca@cryptopro.ru, C=RU, L=Москва, O=ООО КРИПТО-ПРО, CN=УЦ KPИПTO-ПPO Subject : E=info@site.ru, C=RU, L=г. Москва, O="ООО ""Верес""", OU=Руководство, CN=Иванов Иван Иванович, T=Генеральный директор Serial : 0x75F5C86A000D00016A5F SHA1 Hash : 0x255c249150efe3e48f1abb3bc1928fc8f99980c4 Not valid before : 08/12/2014 09:04:00 UTC Not valid after : 08/12/2019 09:14:00 UTC PrivateKey Link : No
Подписание пустого файла (размер 0) проходит успешно, но при просмотре сертификатов этого файла выдается ошибка:
Can't open certificate store: '/tmp/tmp.G8cd13vzfZ.sig'. Error: No certificate found. /dailybuilds/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:312: 0x2000012D [ErrorCode: 0x2000012d]
Просмотр всех атрибутов сертификата
В cryptcp нет необходимых инструментов для получения всех атрибутов сертификата. Поэтому следует использовать openssl , но настроив его.
certmgr -list -f file.sig | grep 'SHA1 Hash'
В цикле извлекаем сертификаты:
cryptcp -nochain -copycert -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -f file.sig -df certificate.der -der
openssl x509 -in certificate.der -inform der -text -noout
openssl_conf = openssl_def # Это в начало файла #Все что ниже в конец [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = /usr/lib/ssl/engines/libgost.so # заменить реальным файлом default_algorithms = ALL CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
openssl ciphers | tr ":" "\n" | grep -i gost GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89
Экспорт сертификатов на другую машину
Закрытые ключи к сертификатам находятся тут: /var/opt/cprocsp/keys . Поэтому эти ключи переносятся просто: создаем архив и переносим на нужную машину в тот же каталог.
Экспорт самих сертификатов (если их 14):
for i in `seq 1 14`; do echo $i | certmgr -export -dest $i.cer; done
Переносим эти файлы на машину и смотрим, какие контейнеры есть:
csptest -keyset -enum_cont -verifycontext -fqcn
И как обычно, связываем сертификат и закрытый ключ:
certmgr -inst -file 1.cer -cont '\\.\HDIMAGE\container.name'
Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
Can not install certificate Public keys in certificate and container are not identical
Если нет закрытого ключа, то просто ставим сертификат:
Подписание документа ЭЦП
cryptcp -sign (КПС1) -nochain -pin pincode src.txt dest.txt.sig
Пример создания ЭЦП (по SHA1 Hash):
cryptcp -sign -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -nochain -pin test test.txt test.txt.sig
[ReturnCode: x] | Описание | Возвращаемый код завершения в баше $? |
---|---|---|
0 | успешно | 0 |
0x8010006b | Введен неправильный PIN | 107 |
0x2000012d | Сертификат не найден | 45 |
0x20000065 | Не удалось открыть файл | 101 |
Проверка подписи ЭЦП
Для верифицирования сертификатов нужен сертификат удостоверяющего центра и актуальный список отзыва сертификатов, либо настроенный для этого revocation provider.
Корневой сертификат УЦ, список отзыва сертификата является одним из реквизитов самого сертификата.
Контрагенты когда открывают подписи в КриптоАРМ используют revocation provider, он делает проверки отзыва сертификата онлайн. Как реализована проверка в Шарепоинте не знаю. Знаю только что используется библиотека Крипто.Net
Проверка конкретной подписи из локального хранилища по его хешу:
cryptcp -verify -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -nochain test.txt.sig
Проверить, взяв сертификат из file1.sig , подпись файла file2.sig . Практически, надо использовать один и тот же файл:
cryptcp -verify -norev -f file1.sig file2.sig
Certificates found: 2 Certificate chains are checked. Folder './': file.xls.sig. Signature verifying. Signer: Старший инженер, Иванов Иван Иванович, Отдел закупок, ООО «Верес», Москва, RU, info@site.ru Signature's verified. Signer: Генеральный директор, Сидоров Иван Петрович, Руководство, ООО «Кемоптика», Москва, RU, info@site.ru Signature's verified. [ReturnCode: 0]
[ReturnCode: x] | Текст | Описание | Возвращаемый код завершения в баше $? |
---|---|---|---|
0 | Успешно | 0 | |
0x80091004 | Invalid cryptographic message type | Неправильный формат файла | 4 |
0x80091010 | The streamed cryptographic message is not ready to return data | Пустой файл | 16 |
Получение исходного файла
Получение исходного файла (сообщения):
cryptcp -verify -nochain file.sig file.txt
Будет ругаться на сертификат (так как не будет проверки), но подпись удалит. Вариант с проверкой:
cryptcp -verify -nochain -f file.sig file.sig file.txt
Настройка службы точного времени
apt-get install ntp ntpdate
Необходимо добавить сервера:
# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example server ntp1.stratum2.ru server ntp2.stratum2.ru
Установка сертификатов на Linux
- Открыть «Инструменты КриптоПро», вкладка «Сертификаты»;
- Нажать «Импортировать ключи».
По умолчанию при импорте ключ копируется на ваш ПК. Если требуется использовать сертификат на съёмном носителе, его нужно скопировать на носитель и после установить;
Перейти в место хранения сертификата, выбрать его и нажать «Открыть»;
Ввести пароль от сертификата, заданный при выгрузке, и нажать «ОК»;
В новом окне можно задать пароль на сертификат. Если пароль не нужен, оставить поля пустыми и нажать «ОК»;
Установка .cer (только открытая часть)
- Открыть «Инструменты КриптоПро», вкладка «Сертификаты»;
- Нажать «Показать расширенные» и поставить галку «Отключить автовыбор хранилища (использовать текущее)».
Если галку не ставить, «КриптоПро» автоматически будет определять хранилище для сертификатов. Личные сертификаты попадут в хранилище «Другие пользователи»;
Перейти в выпадающем меню в нужное хранилище сертификатов и нажать «Установить сертификаты»;
Перейти в место хранения сертификата, выбрать его и нажать «Открыть»;
Установка из .key (скопированные с носителя 6 файлов ключа)
- Скопировать папку с файлами в папку локального хранения контейнеров «КриптоПро», по умолчанию «/var/opt/cprocsp/keys/имя_пользователя»;
Установка сертификата с токена\флэш-накопителя
- Подключить накопитель или токен к вашему ПК;
- В «Инструментах КриптоПро» перейти на вкладку «Контейнеры» и выбрать нужный контейнер на носителе;
- Нажать «Установить сертификат»;
Установка открытой части в контейнер закрытого ключа
Выполнить команду:/opt/cprocsp/bin/amd64/certmgr -inst -inst_to_cont -ask-container -pin «пин-код токена» -file “путь к файлу сертификата”
Пример:/opt/cprocsp/bin/amd64/certmgr -inst -inst_to_cont -ask-container -pin «12567» -file /path/to/certificate.cer
Установка корневых сертификатов и списков отзыва
Установка корневого сертификата удостоверяющего центра
Вам необходимо воспользоваться любым из способов:
Через терминал
Выполнить команду: /opt/cprocsp/bin/amd64/certmgr -inst -cert -file ~/Загрузки/.cer -store uRoot
Через графический интерфейс
- Открыть «Инструменты КриптоПро», нажать «Показать расширенные»;
Установка списка отозванных сертификатов
Выполнить команду:/opt/cprocsp/bin/amd64/certmgr -inst -crl -file ~/Загрузки/.crl
Установка цепочки промежуточных сертификатов
Выполнить команду:/opt/cprocsp/bin/amd64/certmgr -inst -cert -file ~/Загрузки/.p7b -store CA